RandomForest随机森林模型训练
生活随笔
收集整理的這篇文章主要介紹了
RandomForest随机森林模型训练
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一次用隨機森林做分類,使用sklearn中的庫,直接進行模型訓練。下面寫出了隨機森林中的一些參數,僅供參考。(適合像我這樣的菜鳥參考學習)
import pandas as pd from sklearn.ensemble import RandomForestClassifier # train_test_split 劃分訓練集 測試集 # cross_val_score 交叉驗證調節某個參數 # GridSearchCV 超參調節 調節多個參數 from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV # roc_auc_score分數返回roc曲線下的面積 from sklearn.metrics import roc_auc_score,auc,roc_curvedata = pd.read_csv('./data/new.csv') # print(data.head())# 查看1和0的數量 # print(data.flag.value_counts())# 把標記賦值給y y = data.flag # print(y) # 去掉標簽列flag 賦值給x x = data.drop('flag',axis=1) # print(x) # y為標簽 x為數據 # test_size表示測試集數據所占比例,random_state表示若要重復試驗保證每次隨機的實驗結果是一樣的 xtrain, xtest, ytrain, ytest = train_test_split(x, y,test_size=0.2, random_state=5 )# RandomForestClassifier參數 # n_estimators 森林中樹的數量,即基評估器的數量 # max_depth= 樹的最大深度 默認為none 這樣建樹時,會使每一個葉節點只有一個類別,或是達到min_samples_split。 # min_samples_split:根據屬性劃分節點時,每個劃分最少的樣本數 # min_samples_leaf:葉子節點最少的樣本數。 # criterion = 使用信息熵entropy或者基尼系數gini.默認是基尼系數 rfc = RandomForestClassifier(n_estimators=220,min_samples_leaf=10,min_samples_split=30,max_depth=8,random_state=10,criterion='gini',class_weight=None) rfc.fit(xtrain,ytrain)# 導入測試集 rfc的接口score計算的是模型準確率accuracy # result = rfc.score(xtest,ytest) # print(result)# 查看所有的決策樹 # print(rfc.estimators_)# 查看結果的類別 # print(rfc.classes_) # 查看類別數量 # print(rfc.n_classes_)# 查看預測結果標簽值 # print(rfc.predict(xtest))# 標簽是1的可能性 出來的結果左邊的標簽值為0的概率 右邊是標簽值為1的概率 # print(rfc.predict_proba(xtest)[:,:]) # 只取標簽為1的概率 # print(rfc.predict_proba(xtest)[:,1])# roc分數的計算 # sc = roc_auc_score(ytest,rfc.predict_proba(xtest)[:,1]) # print(sc)# 各個feature的重要性 # print(rfc.feature_importances_)# sklearn.model_selection.cross_val_score(estimator= ,X= , y= ,scoring= ,cv= ,n_jobs=, verbose= ) # estimator:估計方法對象(分類器) # X: 數據特征(Features) # y: 數據標簽 # soring:調用方法(包括accuracy和mean_squared_error等等) # cv: 幾折交叉驗證# 結果統計 計算P,R,F1,accuracy p = precision_score(list(ytest),rfc.predict(xtest),average='weighted') r = recall_score(list(ytest),rfc.predict(xtest),average='weighted') f1 = f1_score(list(ytest),rfc.predict(xtest),average='weighted')print(p) # 0.9038104235553457 print(r) # 0.903448275862069 print(f1) # 0.9034574607673332# 調整參數# 查看訓練集 # print(xtrain.shape)# 調整森林中樹的數量# param_test1 = {'n_estimators': range(20,500,10)} # estimator輸入分類器(分類器的參數) # param_grid= 需要調參的超參名 # scoring = 每次評估使用的分數 # cv = 每次進行幾折交叉驗證 # gsearch1 = GridSearchCV(estimator=RandomForestClassifier(min_samples_split=50, # min_samples_leaf=20, # max_depth=8,random_state=10), # param_grid=param_test1, # scoring='roc_auc', # cv=3) # gsearch1.fit(xtrain,ytrain) # # 輸出最好的參數和最好的分數 # print(gsearch1.best_params_,gsearch1.best_score_) # 輸出結果 {'n_estimators': 220} 0.8620994691397194# 調整最小樣本數 和 最小葉節點的樣本數 # param_test2 = {'min_samples_split':range(20,200,10),'min_samples_leaf':range(10,200,10)} # gsearch2 = GridSearchCV(estimator=RandomForestClassifier(n_estimators=220, # max_depth=8,random_state=10), # param_grid=param_test2, # scoring='roc_auc', # cv=3) # gsearch2.fit(xtrain,ytrain) # 輸出最好的參數和最好的分數 # print(gsearch2.best_params_,gsearch2.best_score_) # 輸出結果{'min_samples_leaf': 10, 'min_samples_split': 30} 0.8675084144386757# 調整最大深度 # param_test3 = {'max_depth':range(2, 50, 2)} # gsearch3 = GridSearchCV(estimator=RandomForestClassifier(n_estimators=220, # min_samples_leaf = 10, # min_samples_split = 30, # random_state=10), # param_grid=param_test3, # scoring='roc_auc', # cv=3) # gsearch3.fit(xtrain, ytrain) # 輸出最好的參數和最好的分數 # print(gsearch3.best_params_, gsearch3.best_score_) # 輸出結果{'max_depth': 8} 0.8675084144386757# scor = roc_auc_score(ytest, gsearch3.best_estimator_.predict_proba(xtest)[:, 1]) # print(scor) # 0.964570943075616# print(gsearch3.best_estimator_)# 調整分類方法 和樣本平衡 # param_test4 = {'criterion':['gini','entropy'], 'class_weight':[None,'balanced']} # gsearch4 = GridSearchCV(estimator=RandomForestClassifier(n_estimators=220, # min_samples_leaf=10, # min_samples_split=30, # max_depth=8, # random_state=10), # param_grid=param_test4, # scoring='roc_auc', # cv=3) # gsearch4.fit(xtrain,ytrain) # print(gsearch4.best_params_, gsearch4.best_score_) # {'class_weight': None, 'criterion': 'entropy'} 0.8722979957299399# scor = roc_auc_score(ytest, gsearch4.best_estimator_.predict_proba(xtest)[:, 1]) # print(scor) # 0.9615972812234495總結
以上是生活随笔為你收集整理的RandomForest随机森林模型训练的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于table的中元素对齐方式的注意点
- 下一篇: 学习笔记DL007:Moore-Penr