一、XBGoost調參
步驟:
1、設定一個稍大的學習率(0.1),利用xgboost裏的cv方法去確定一個合適的迭代次數(也就是樹的個數)
2、根據參數的重要性,分別對參數進行調參,利用GridSearchCV,先進行大範圍粗調再小範圍精調,參數重要性排序:
- max_depth和min_child_weight
- gamma
- subsample和colsample_bytree
- reg_alpha和reg_lambda
3、調小learning_rate(0.01),利用cv找到合適的迭代次數。
github代碼地址:
https://github.com/xiayto/Mechine_learning/blob/master/xgboost%E8%B0%83%E5%8F%82.py
二、SVR調參
對於 SVR、LinearSVR、NuSVR的選擇:
1、當我們對數據有先驗知識,數據是線性可分時候用SVR
2、當線性不可分用SVR,一般選擇RBF高斯核函數,要調參
3、當我對用於支持的向量的百分比有要求時候用NuSVR
參數介紹:
- C:默認是1,控制鬆弛因子,噪聲比較多的時候C設置小一點,分解平面不需要嚴格將樣本區分。
- epsilon:允許的距離誤差,默認是0.1
- kernel:默認是rbf高斯核,常用的含有poly多項式核函和sigmoid核函數
- degree:poly擴展才有的參數,K(x,z) = 中的d
- gamma:所有的多項式擴展都需要調節的參數,一般用交叉驗證確定
- coef0:poly和sigmoid中需要調節的參數,默認是0
- cache_size:緩存大小,默認200MB,如果內存足夠,推薦使用500MB甚至1000MB
SVR調參過程:
1、確定鬆弛因子C
2、確定gamma
3、確定epsilon
三、RandomForest調參
參數介紹:
clf = RandomForestRegressor(
n_estimators=2, # 學習器個數
criterion='mse', # 評價函數
max_depth=None, # 最大的樹深度,防止過擬合
min_samples_split=2, # 根據屬性劃分節點時,每個劃分最少的樣本數
min_samples_leaf=1, # 最小葉子節點的樣本數,防止過擬合
max_features='auto', # auto是sqrt(features)還有 log2 和 None可選
max_leaf_nodes=None, # 葉子樹的最大樣本數
bootstrap=True, # 有放回的採樣
min_weight_fraction_leaf=0,
n_jobs=5) # 同時用多少個進程訓練
調參過程
1、先對重要的參數調整,再對相對不重要的參數調整
2、有相互聯繫的一起調,沒有的可以分開調提高效率
3、先大範圍粗調,再小範圍精調
4、用貪心的方式,下一次調調用上一次的最優結果
重要性排序:
1、決策樹個數
2、max_depth 和 min_samples_split 和 min_samples_leaf
3、max_features
調參代碼:
https://github.com/xiayto/tianchi_competition/blob/master/RandomForest%E8%B0%83%E5%8F%82.py