機器學習之XGBoost分類器XGBClassifier-- xgb使用sklearn介面
阿新 • • 發佈:2018-12-23
- 機器學習之XGBoost分類器XGBClassifier
# -*- coding: utf-8 -*- """ Created on Tue Dec 4 20:48:14 2018 @author: muli """ ''' xgb使用sklearn介面(推薦)--官方: 會改變的函式名是: eta -> learning_rate lambda -> reg_lambda alpha -> reg_alpha #引數 params = { 'booster': 'gbtree', 'objective': 'multi:softmax', # 多分類的問題 'num_class': 10, # 類別數,與 multisoftmax 並用 'gamma': 0.1, # 用於控制是否後剪枝的引數,越大越保守,一般0.1、0.2這樣子。 'max_depth': 12, # 構建樹的深度,越大越容易過擬合 'reg_lambda': 2, # 控制模型複雜度的權重值的L2正則化項引數,引數越大,模型越不容易過擬合。 'subsample': 0.7, # 隨機取樣訓練樣本 'colsample_bytree': 0.7, # 生成樹時進行的列取樣 'min_child_weight': 3, 'silent': 1, # 設定成1則沒有執行資訊輸出,最好是設定為0. 'learning_rate': 0.007, # 如同學習率 'reg_alpha':0, # L1 正則項引數 'seed': 1000, 'nthread': 4, # cpu 執行緒數 } # 迴歸 # m_regress = xgb.XGBRegressor(n_estimators=1000,seed=0) ''' from sklearn.model_selection import train_test_split from sklearn import metrics from sklearn.datasets import make_hastie_10_2 from xgboost.sklearn import XGBClassifier # make_hastie_10_2: # 產生一個相似的二元分類器資料集,有10個維度 X, y = make_hastie_10_2(random_state=0) # X:(12000, 10) # y:(12000,) # test_size測試集合所佔比例 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) clf = XGBClassifier( #樹的個數 n_estimators=100, # 如同學習率 learning_rate= 0.3, # 構建樹的深度,越大越容易過擬合 max_depth=6, # 隨機取樣訓練樣本 訓練例項的子取樣比 subsample=1, # 用於控制是否後剪枝的引數,越大越保守,一般0.1、0.2這樣子 gamma=0, # 控制模型複雜度的權重值的L2正則化項引數,引數越大,模型越不容易過擬合。 reg_lambda=1, #最大增量步長,我們允許每個樹的權重估計。 max_delta_step=0, # 生成樹時進行的列取樣 colsample_bytree=1, # 這個引數預設是 1,是每個葉子裡面 h 的和至少是多少,對正負樣本不均衡時的 0-1 分類而言 # 假設 h 在 0.01 附近,min_child_weight 為 1 意味著葉子節點中最少需要包含 100 個樣本。 #這個引數非常影響結果,控制葉子節點中二階導的和的最小值,該引數值越小,越容易 overfitting。 min_child_weight=1, #隨機種子 seed=1000 # L1 正則項引數 # reg_alpha=0, #如果取值大於0的話,在類別樣本不平衡的情況下有助於快速收斂。平衡正負權重 #scale_pos_weight=1, #多分類的問題 指定學習任務和相應的學習目標 #objective= 'multi:softmax', # 類別數,多分類與 multisoftmax 並用 #num_class=10, # 設定成1則沒有執行資訊輸出,最好是設定為0.是否在執行升級時列印訊息。 # silent=0 , # cpu 執行緒數 預設最大 # nthread=4, #eval_metric= 'auc' ) # 模型 訓練 clf.fit(X_train,y_train,eval_metric='auc') # 預測值 y_pred=clf.predict(X_test) # 真實值 賦值 y_true= y_test # 計算精度 print("Accuracy : %.4g" % metrics.accuracy_score(y_true, y_pred))