Python?sklearn庫中的隨機森林模型詳解
sklearn中的隨機森林
sklearn中的集成學(xué)習(xí)算法模塊ensemble中與隨機森林相關(guān)的類
類 | 說明 |
---|---|
ensemble.RandomForestClassifier | 隨機森林分類 |
ensemble.RandomForestRegressor | 隨機森林回歸 |
基本使用
以紅酒數(shù)據(jù)集和波士頓房價數(shù)據(jù)集為例,sklearn中的分類樹和回歸樹的簡單使用如下:
# 導(dǎo)包 from sklearn.datasets import load_wine, load_boston from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor # 分類樹 data_wine = load_wine() # 加載紅酒數(shù)據(jù)集 # 劃分訓(xùn)練集和測試集 X_train, X_test, y_train, y_test = train_test_split(data_wine.data, data_wine.target, test_size=0.3, random_state=42) rfc = RandomForestClassifier() # 分類樹 rfc.fit(X_train, y_train) # 擬合訓(xùn)練集 print(rfc.predict(X_train)) # 輸出測試集的預(yù)測結(jié)果 print(rfc.score(X_test, y_test)) # 測試集上的準(zhǔn)確率 # 回歸樹 data_boston = load_boston() # 加載波士頓房價數(shù)據(jù)集 # 劃分訓(xùn)練集和測試集 X_train, X_test, y_train, y_test = train_test_split(data_boston.data, data_boston.target, test_size=0.3, random_state=42) reg = RandomForestRegressor() # 回歸樹 reg.fit(X_train, y_train) # 擬合訓(xùn)練集 print(reg.predict(X_train)) # 測試集的預(yù)測結(jié)果 print(reg.score(X_test, y_test)) # 測試集上的決定系數(shù) R2
常用屬性和接口
.feature_importances_
:每個特征的特征重要性,總和為1.oob_score_
:當(dāng)模型oob_score=True
時,訓(xùn)練后可查看樹模型使用oob數(shù)據(jù)進行測試的平均準(zhǔn)確度.estimators_
:返回集成的所有決策樹模型的模型列表.apply()
:傳入樣本特征數(shù)據(jù),返回每個樣本被分到的節(jié)點索引,每個樣本對應(yīng)一個列表,列表中是該樣本在隨機森林中所有樹模型中被分到的葉子節(jié)點索引.predict_proba()
:傳入樣本特征數(shù)據(jù)返回每個測試樣本對應(yīng)的被分到每個標(biāo)簽的概率
隨機森林的 .score()
接口的選用指標(biāo):
- 隨機森林分類:準(zhǔn)確度 Accuracy
- 隨機森林回歸:決定系數(shù) R2R^2R2
參數(shù)說明
與sklearn中的決策樹參數(shù)很多都很相似,以下參數(shù)說明是針對分類樹的,對于回歸樹,幾乎所有參數(shù)、屬性及接口都和分類樹一模一樣。需要注意的是,在回歸樹中,沒有標(biāo)簽分布是否均衡的問題,因此沒有class_weight這樣的參數(shù)。
sklearn中隨機森林分類和隨機森林回歸的默認(rèn)參數(shù)
- 隨機森林分類
RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None, criterion='gini', max_depth=None, max_features='auto', max_leaf_nodes=None, max_samples=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=None, oob_score=False, random_state=None, verbose=0, warm_start=False)
- 隨機森林回歸
RandomForestRegressor(bootstrap=True, ccp_alpha=0.0, criterion='mse', max_depth=None, max_features='auto', max_leaf_nodes=None, max_samples=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=None, oob_score=False, random_state=None, verbose=0, warm_start=False)
sklearn中隨機森林的許多參數(shù)是用于限定集成的決策樹模型的,這部分參數(shù)和決策樹模型中的許多參數(shù)相同,這里就一筆帶過,不再重復(fù)進行詳細(xì)說明了。
- criterion:不純度的衡量指標(biāo),Gini系數(shù)或信息熵
- max_depth:樹的最大深度,超過最大深度的樹枝都會被剪掉
- min_samples_leaf:一個節(jié)點在分枝后的每個子節(jié)點都必須包含至少min_samples_leaf個訓(xùn)練樣本,否則分枝就不會發(fā)生
- min_samples_split:一個節(jié)點必須要包含至少min_samples_split個訓(xùn)練樣本,這個節(jié)點才允許被分枝,否則分枝就不會發(fā)生
- max_features:max_features限制分枝時考慮的特征個數(shù),超過限制個數(shù)的特征都會被舍棄, 默認(rèn)值為總特征個數(shù)開平方取整
- min_impurity_decrease:限制信息增益的大小,信息增益小于設(shè)定數(shù)值的分枝不會發(fā)生
- class_weight:用于平衡不均衡數(shù)據(jù)集樣本
- min_weight_fraction_leaf:計算樣本權(quán)重版本的 min_samples_leaf
n_estimators
n_estimators是隨機森林中樹模型的數(shù)量,即基評估器的數(shù)量。這個參數(shù)對隨機森林模型的精確性影響是單調(diào)的,n_estimators越大,模型的效果往往越好。但是相應(yīng)的,任何模型都有決策邊界,n_estimators達到一定的程度之后,隨機森林的性能往往不再上升或開始波動,并且,n_estimators越大,需要的計算量和內(nèi)存也越大,訓(xùn)練的時間也會越長。對于這個參數(shù),我們是會在計算資源和模型效果之間取得平衡。
random_state
隨機森林中的random_state和決策樹中相似,只不過在決策樹中,一個random_state只控制生成一棵樹的隨機狀態(tài),而隨機森林中的random_state控制的是其集成的所有樹模型中的隨機狀態(tài),例如隨機森林的random_state為一個常數(shù)后,包含的所有樹模型的random_state則狀態(tài)下固定的隨機數(shù)。
注意:sklearn中的決策樹不是傳統(tǒng)的決策樹模型,也含有random_state參數(shù),也就是隨機選擇部分特征,但在一些情況下或許你會發(fā)現(xiàn)隨機森林集成單棵決策樹和用sklearn直接創(chuàng)建單個決策樹模型的效果也是不同的,這是因為在sklearn中隨機森林中集成的決策樹的特征選擇隨機性要比tree模塊中的決策樹模型的隨機性大得多,例如某數(shù)據(jù)集有700個特征,那隨機森林中的每棵樹可能隨機選擇其中的幾十個特征來考慮,而獨立的單個決策樹模型可能隨機選擇其中的幾百個特征來考慮。
bootstrap & oob_score
隨機森林中在保證樹模型的隨機性時,除了原本決策樹模型自帶的隨機性(從原始特征中隨機選擇部分特征),對于其中每個樹模型的訓(xùn)練樣本,則采用bootstrap方法,當(dāng) bootstrap
參數(shù)為True時,假設(shè)有 nnn 個樹模型,則會從原始訓(xùn)練樣本中進行有放回隨機抽樣得到大小與原始訓(xùn)練樣本數(shù)量相同的 nnn 個自助集,這 nnn 個自助集作為對對應(yīng)的 nnn 個樹模型的訓(xùn)練數(shù)據(jù)。該方法可進一步增大模型的隨機性。
每個自助集中只包含原始數(shù)據(jù)中的部分?jǐn)?shù)據(jù),由于可重復(fù)抽樣,因此大小與原始訓(xùn)練數(shù)據(jù)集相同,對于每棵樹而言,訓(xùn)練數(shù)據(jù)都僅包含原始數(shù)據(jù)的部分?jǐn)?shù)據(jù),其它數(shù)據(jù)被稱為袋外數(shù)據(jù)(out of bag, oob data),為了不讓這部分?jǐn)?shù)據(jù)浪費,對于每棵樹我們將它對應(yīng)的袋外數(shù)據(jù)作為這單棵樹模型的測試集進行性能測試,當(dāng) oob_score
參數(shù)為True時,隨機森林模型在訓(xùn)練后會針對每棵樹模型使用袋外數(shù)據(jù)計算準(zhǔn)確度后取其均值,則在訓(xùn)練隨機森林模型后可調(diào)用 oob_score_
接口查看。
n_jobs
n_jobs表示并行運行的作業(yè)數(shù),用于指定隨機森林的并行計算,可以加速訓(xùn)練過程
- -1:使用最大的CPU核心數(shù),例如4核CPU會啟動4個并行作業(yè)。
- 1(默認(rèn)):禁用并行計算,串行運行。
- 2、3等整數(shù):指定并行運行的作業(yè)數(shù)。
并行運行時,會拆分?jǐn)?shù)據(jù)到不同CPU內(nèi)核分別訓(xùn)練,然后合并結(jié)果,可大幅減少隨機森林的訓(xùn)練時間,但會消耗更多CPU資源。
參數(shù)影響程度
我們在調(diào)參的時候,一般會從基于主觀判斷來從對模型影響最大的參數(shù)向影響最小的參數(shù)調(diào)整,對于可控的數(shù)值型參數(shù),例如隨機森林的 n_estimators
我們往往基于經(jīng)驗和主觀判斷調(diào)節(jié),對于選項較少的如 criterion等參數(shù),我們一般可以使用網(wǎng)格調(diào)參,當(dāng)然算力允許的話想怎么調(diào)都是可以的。
參數(shù) | 影響 | 影響程度 |
---|---|---|
n_estimators | 隨著參數(shù)值的增加,模型性能提升至平穩(wěn),不影響單個模型的復(fù)雜度 | 4 |
max_depth | 默認(rèn)為最大值(不限制),值越小,模型復(fù)雜度越小 | 3 |
min_samples_leaf | 默認(rèn)為最小值(1),值越大,模型復(fù)雜度越小 | 2 |
min_samples_split | 默認(rèn)為最小值(2),值越大,模型復(fù)雜度越小 | 2 |
max_features | 默認(rèn)為中間值(auto),值越小,模型復(fù)雜度越小,值越大,模型復(fù)雜度越大 | 1 |
模型復(fù)雜度越大,過擬合風(fēng)險越大,欠擬合風(fēng)險越??;模型復(fù)雜度越小,欠擬合風(fēng)險越大,過擬合風(fēng)險越小。
ps:這里的參數(shù)中除了 n_estimators 外的其它參數(shù)影響程度對于單個決策樹模型也是同理的。
到此這篇關(guān)于Python sklearn庫中的隨機森林模型詳解的文章就介紹到這了,更多相關(guān)Python sklearn隨機森林模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
自動轉(zhuǎn)換Python代碼為HTML界面的GUI庫remi使用探究
這篇文章主要為大家介紹了自動轉(zhuǎn)換Python代碼為HTML界面的GUI庫remi使用探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01利用Python實現(xiàn)批量下載上市公司財務(wù)報表
這篇文章主要為大家介紹了如何利用Python做個小工具,可以批量把某網(wǎng)站上的上市公司的財報下下來。文中的示例代碼講解詳細(xì),感興趣的可以動手試一試2022-03-03本地部署Python?Flask并搭建web問答應(yīng)用程序框架實現(xiàn)遠(yuǎn)程訪問的操作方法
Flask是一個Python編寫的Web微框架,使用Python語言快速實現(xiàn)一個網(wǎng)站或Web服務(wù),本期教程我們使用Python Flask搭建一個web問答應(yīng)用程序框架,并結(jié)合cpolar內(nèi)網(wǎng)穿透工具將我們的應(yīng)用程序發(fā)布到公共網(wǎng)絡(luò)上,實現(xiàn)可多人遠(yuǎn)程進入到該web應(yīng)用程序訪問,需要的朋友可以參考下2023-12-12