集成学习(随机森林)
目錄
一、集成學習概念
?二、Bagging集成原理
三、隨機森林
?四、例子(商品分類)
一、集成學習概念
集成學習通過建??個模型來解決單?預測問題。它的?作原理是?成多個分類器/模型,各?獨?地學習和作出預 測。這些預測最后結合成組合預測,因此優于任何?個單分類的做出預測。
只要單分類器的表現不太差,集成學習的結果總是要好于單分類器的?
?二、Bagging集成原理
分類圓形和長方形
三、隨機森林
在機器學習中,隨機森林是?個包含多個決策樹的分類器,并且其輸出的類別是由個別樹輸出的類別的眾數?定。隨機森林 = Bagging + 決策樹
列如: 如果你訓練了5個樹, 其中有4個樹的結果是True, 1個樹的結果是False, 那么最終投票結果就是True?
?1、隨機森林夠造過程中的關鍵步驟(M表示特征數?):
1)?次隨機選出?個樣本,有放回的抽樣,重復N次(有可能出現重復的樣本)
2) 隨機去選出m個特征, m <M
如果不進?隨機抽樣,每棵樹的訓練集都?樣,那么最終訓練出的樹分類結果也是完全?樣的
如果不是有放回的抽樣,那么每棵樹的訓練樣本都是不同的,都是沒有交集的,這樣每棵樹都是“有偏的”,都是絕對“??的”(當然這樣說可能不對),也就是說每棵樹訓練出來都是有很?的差異的;?隨機森 林最后分類取決于多棵樹(弱分類器)的投票表決。
2.包外估計
在隨機森林構造過程中,如果進?有放回的抽樣,我們會發現,總是有?部分樣本我們選不到。
由于基分類器是構建在訓練樣本的?助抽樣集上的,只有約 63.2% 原樣本集出現在中,?剩余的 36.8% 的數據作為包 外數據,可以?于基分類器的驗證集。?
3.bagging集成優點
Bagging + 決策樹/線性回歸/邏輯回歸/深度學習… = bagging集成學習?法
經過上??式組成的集成學習?法:
1. 均可在原有算法上提?約2%左右的泛化正確率
2. 簡單, ?便, 通??
?四、例子(商品分類)
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from imblearn.under_sampling import RandomUnderSampler from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import log_loss from sklearn.preprocessing import OneHotEncoderdata = pd.read_csv("F:\\數學建模\\機器學習\\數據\\train.csv") # print(data) # print(data.describe()) # print(data.shape)# sns.countplot(data.target) # plt.show() #該數據類別不均衡#數據基本處理(數據已經經過脫敏,不在需要特殊處理) # new1_data=data[:10000] #取前一萬行 # print(new1_data) #使用上述方法不可行,使用隨機欠采樣獲取響應數據 y=data["target"] x=data.drop(["id","target"],axis=1) rus=RandomUnderSampler(random_state=0) x_sample,y_sample=rus.fit_resample(x,y) print(x_sample) print(y_sample) sns.countplot(y_sample) #樣本均衡了 plt.show()#將目標值的屬性轉化為數字 le=LabelEncoder() y_sample=le.fit_transform(y_sample) print(y_sample)#分割數據 x_train,x_test,y_train,y_test = train_test_split(x_sample,y_sample,random_state=22,test_size=0.2) #測試集合訓練集每類樣本不均衡的問題 rf=RandomForestClassifier(oob_score=True) #包外估計 rf.fit(x_train,y_train) y_pre=rf.predict(x_test) print(y_pre) # print(rf.score(x_test,y_test)) # print(rf.oob_score_)#使用logloss模型評估 # log_loss(y_test,y_pre,eps=1e-15,normalize=True) #log_loss使用中y_test,y_pre需要用one—hot表示 one_hot=OneHotEncoder(sparse=False) y_test1=one_hot.fit_transform(y_test.reshape(-1,1)) y_pre1=one_hot.fit_transform(y_pre.reshape(-1,1)) print(y_test1) print(y_pre1) print(log_loss(y_test1,y_pre1,eps=1e-15,normalize=True)) #改變預測值的輸出模式,讓輸出結果為百分比,降低logloss y_pre_proba=rf.predict_proba(x_test) print(y_pre_proba) print(log_loss(y_test1,y_pre_proba,eps=1e-15,normalize=True))#參數調優(n_estimators=one_parameter, # max_depth=10,max_features=10,min_samples_leaf=10) 通過正確率和損失圖來一個一個確定tuned_parameters=range(10,200,10) accuracy_t=np.zeros(len(tuned_parameters)) error_t=np.zeros(len(tuned_parameters)) # print(accuracy_t) [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] for j,one_parameter in enumerate(tuned_parameters):rf2=RandomForestClassifier(n_estimators=one_parameter,max_depth=10,max_features=10,min_samples_leaf=10,oob_score=True,random_state=0,n_jobs=-1)rf2.fit(x_train,y_train)accuracy_t[j]=rf2.oob_score_ #輸出精確度y_pre=rf2.predict_proba(x_test)error_t[j]=log_loss(y_test,y_pre,eps=1e-15,normalize=True)# print(error_t) plt.plot(tuned_parameters,accuracy_t) plt.xlabel("n_estimators") plt.ylabel("accuracy") plt.grid(True) plt.show()?
總結
以上是生活随笔為你收集整理的集成学习(随机森林)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c型钢机器_C型钢机
- 下一篇: 探店「无聊猿」BAYC 主题餐厅:食物都