集成学习(随机森林)
目錄
一、集成學(xué)習(xí)概念
?二、Bagging集成原理
三、隨機(jī)森林
?四、例子(商品分類(lèi))
一、集成學(xué)習(xí)概念
集成學(xué)習(xí)通過(guò)建??個(gè)模型來(lái)解決單?預(yù)測(cè)問(wèn)題。它的?作原理是?成多個(gè)分類(lèi)器/模型,各?獨(dú)?地學(xué)習(xí)和作出預(yù) 測(cè)。這些預(yù)測(cè)最后結(jié)合成組合預(yù)測(cè),因此優(yōu)于任何?個(gè)單分類(lèi)的做出預(yù)測(cè)。
只要單分類(lèi)器的表現(xiàn)不太差,集成學(xué)習(xí)的結(jié)果總是要好于單分類(lèi)器的?
?二、Bagging集成原理
分類(lèi)圓形和長(zhǎng)方形
三、隨機(jī)森林
在機(jī)器學(xué)習(xí)中,隨機(jī)森林是?個(gè)包含多個(gè)決策樹(shù)的分類(lèi)器,并且其輸出的類(lèi)別是由個(gè)別樹(shù)輸出的類(lèi)別的眾數(shù)?定。隨機(jī)森林 = Bagging + 決策樹(shù)
列如: 如果你訓(xùn)練了5個(gè)樹(shù), 其中有4個(gè)樹(shù)的結(jié)果是True, 1個(gè)樹(shù)的結(jié)果是False, 那么最終投票結(jié)果就是True?
?1、隨機(jī)森林夠造過(guò)程中的關(guān)鍵步驟(M表示特征數(shù)?):
1)?次隨機(jī)選出?個(gè)樣本,有放回的抽樣,重復(fù)N次(有可能出現(xiàn)重復(fù)的樣本)
2) 隨機(jī)去選出m個(gè)特征, m <M
如果不進(jìn)?隨機(jī)抽樣,每棵樹(shù)的訓(xùn)練集都?樣,那么最終訓(xùn)練出的樹(shù)分類(lèi)結(jié)果也是完全?樣的
如果不是有放回的抽樣,那么每棵樹(shù)的訓(xùn)練樣本都是不同的,都是沒(méi)有交集的,這樣每棵樹(shù)都是“有偏的”,都是絕對(duì)“??的”(當(dāng)然這樣說(shuō)可能不對(duì)),也就是說(shuō)每棵樹(shù)訓(xùn)練出來(lái)都是有很?的差異的;?隨機(jī)森 林最后分類(lèi)取決于多棵樹(shù)(弱分類(lèi)器)的投票表決。
2.包外估計(jì)
在隨機(jī)森林構(gòu)造過(guò)程中,如果進(jìn)?有放回的抽樣,我們會(huì)發(fā)現(xiàn),總是有?部分樣本我們選不到。
由于基分類(lèi)器是構(gòu)建在訓(xùn)練樣本的?助抽樣集上的,只有約 63.2% 原樣本集出現(xiàn)在中,?剩余的 36.8% 的數(shù)據(jù)作為包 外數(shù)據(jù),可以?于基分類(lèi)器的驗(yàn)證集。?
3.bagging集成優(yōu)點(diǎn)
Bagging + 決策樹(shù)/線(xiàn)性回歸/邏輯回歸/深度學(xué)習(xí)… = bagging集成學(xué)習(xí)?法
經(jīng)過(guò)上??式組成的集成學(xué)習(xí)?法:
1. 均可在原有算法上提?約2%左右的泛化正確率
2. 簡(jiǎn)單, ?便, 通??
?四、例子(商品分類(lèi))
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:\\數(shù)學(xué)建模\\機(jī)器學(xué)習(xí)\\數(shù)據(jù)\\train.csv") # print(data) # print(data.describe()) # print(data.shape)# sns.countplot(data.target) # plt.show() #該數(shù)據(jù)類(lèi)別不均衡#數(shù)據(jù)基本處理(數(shù)據(jù)已經(jīng)經(jīng)過(guò)脫敏,不在需要特殊處理) # new1_data=data[:10000] #取前一萬(wàn)行 # print(new1_data) #使用上述方法不可行,使用隨機(jī)欠采樣獲取響應(yīng)數(shù)據(jù) 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()#將目標(biāo)值的屬性轉(zhuǎn)化為數(shù)字 le=LabelEncoder() y_sample=le.fit_transform(y_sample) print(y_sample)#分割數(shù)據(jù) x_train,x_test,y_train,y_test = train_test_split(x_sample,y_sample,random_state=22,test_size=0.2) #測(cè)試集合訓(xùn)練集每類(lèi)樣本不均衡的問(wèn)題 rf=RandomForestClassifier(oob_score=True) #包外估計(jì) 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模型評(píng)估 # 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)) #改變預(yù)測(cè)值的輸出模式,讓輸出結(jié)果為百分比,降低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))#參數(shù)調(diào)優(yōu)(n_estimators=one_parameter, # max_depth=10,max_features=10,min_samples_leaf=10) 通過(guò)正確率和損失圖來(lái)一個(gè)一個(gè)確定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()?
總結(jié)
以上是生活随笔為你收集整理的集成学习(随机森林)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c型钢机器_C型钢机
- 下一篇: 探店「无聊猿」BAYC 主题餐厅:食物都