在Python中使用xgboost建立多分類模型
- 安裝xgboost
安裝xgboost有很多教程,強烈推薦如何在Python上安裝xgboost?中第一條高贊回答。主要就是安裝了anaconda之後,然後有Python的環境變數,然後pip install xg.whl文件完成安裝xgboost模塊。
- 建立多分類任務
a. 模型參數需要根據自己的數據情況來調整,可以參考:
params = { booster: gbtree, objective: multi:softmax, # 多分類的問題 num_class: 10, # 類別數,與 multisoftmax 並用 gamma: 0.1, # 用於控制是否後剪枝的參數,越大越保守,一般0.1、0.2這樣子。 max_depth: 12, # 構建樹的深度,越大越容易過擬合 lambda: 2, # 控制模型複雜度的權重值的L2正則化項參數,參數越大,模型越不容易過擬合。 subsample: 0.7, # 隨機採樣訓練樣本 colsample_bytree: 0.7, # 生成樹時進行的列採樣 min_child_weight: 3, silent: 1, # 設置成1則沒有運行信息輸出,最好是設置為0. eta: 0.007, # 如同學習率 seed: 1000, nthread: 4, # cpu 線程數}
b. 輸入數據形式
由於xgboost對訓練數據的形式有要求,對於自變數和因變數都需要轉化為數字才可以運算,因此如果自變數中是包含分類變數的話,需要進行one-hot編碼;如果因變數中是分類變數或者是字元串類型的也需要轉換為數字。
在這裡特地提出多分類模型的因變數,可以採用Python中的labelEncodere()模塊來轉換為數字編碼。
from sklearn import preprocessinglbl = preprocessing.LabelEncoder()trainy = lbl.fit_transform(testy)
c. 建模部分
dtrain = xgb.DMatrix(X_train, trainy)num_rounds = 500model = xgb.train(params, dtrain, num_rounds)pred = model.predict(dtest)
d. 準確率
print((pred == testy)/len(pred))
推薦閱讀:
※xgboost的原理沒你想像的那麼難
※數據分析及機器學習環境配置(docker極簡入門指南)
※BAT機器學習面試1000題系列(316-320)
※【轉】XGBoost參數調優完全指南(附Python代碼)