欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?sklearn庫中的隨機森林模型詳解

 更新時間:2023年08月27日 11:44:55   作者:rink1t  
本文主要說明?Python?的?sklearn?庫中的隨機森林模型的常用接口、屬性以及參數(shù)調(diào)優(yōu)說明,需要讀者或多或少了解過sklearn庫和一些基本的機器學(xué)習(xí)知識

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)文章

  • 使用python播放音頻的示例代碼

    使用python播放音頻的示例代碼

    在Python中,我們可以使用多種庫來播放音頻文件,其中最常用的是pygame庫和playsound庫,本文給大家分享使用這些庫的示例,對python播放音頻示例代碼感興趣的朋友一起看看吧
    2024-02-02
  • 最新評論