日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

随机森林原理详解及python代码实现

發(fā)布時間:2024/1/23 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 随机森林原理详解及python代码实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

隨機森林(RF)算法

  • 1、算法原理
  • 2、對數(shù)據(jù)的要求(無需規(guī)范化)
  • 3、算法的優(yōu)缺點
  • 4、算法需要注意的點
  • 5、python代碼實現(xiàn)(待更......)
    • 導(dǎo)入相關(guān)包
    • 讀取數(shù)據(jù)并預(yù)處理(必須處理缺失值)
    • 訓(xùn)練
    • 評估

1、算法原理

步驟(booststrap sampling):
1、從數(shù)據(jù)集中有放回的隨機抽m個樣本
2、從樣本中選取n個特征進行建樹
3、重復(fù)1-2

2、對數(shù)據(jù)的要求(無需規(guī)范化)

與cart類似 https://blog.csdn.net/weixin_41851055/article/details/106234426

3、算法的優(yōu)缺點

一、優(yōu)點:

  • 有效解決決策樹的過擬合
  • 能輸出變量重要性
  • 容易理解并且效果好
  • 具有很好的抗躁能力

二、缺點:

  • 小數(shù)據(jù)集及低維度效果一般
  • 速度較單個決策樹慢
  • 隨機生成、結(jié)果不穩(wěn)定(KPI值較大)

4、算法需要注意的點

隨機森林不易過擬合的原因
1、兩個隨機抽樣
2、bagging集成算法

隨機森林特征重要性原理
1、使用OOB(貸外數(shù)據(jù))計算貸外數(shù)據(jù)誤差(errorB1)(一棵樹)
2、隨機對特征x加入噪聲干擾(改變特征x的值等),再次計算貸外數(shù)據(jù)誤差(errorB2)(一棵樹)
3、importance=1N∑i=1N(errorB2?errorB1)importance=\frac{1}{N}\sum_{i=1}^N(errorB2-errorB1)importance=N1?i=1N?(errorB2?errorB1) NNN為隨機森林總的棵數(shù)

RF為什么隨機抽樣/隨機特征
保證基分類器多樣性,增加泛化能力與抗躁能力

為什么有放回抽樣
分布不同,使各棵決策樹差異性很大

RF需要剪枝與限制樹的深度嗎
不需要

RF為什么比bagging效率高
可并行實現(xiàn)而且引入了兩個隨機

5、python代碼實現(xiàn)(待更…)

導(dǎo)入相關(guān)包

import numpy as np import pandas as pd from sklearn.preprocessing import LabelEncoder #分類變量編碼包 from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier import variable_iv as vi import Logistic_model as lm from sklearn.ensemble import RandomForestClassifierimport os os.chdir('E:/wyz/Desktop/rf/')

讀取數(shù)據(jù)并預(yù)處理(必須處理缺失值)

data = pd.read_excel('ceshi.xlsx',sheet_name = 'Sheet2') #分類變量編碼 from sklearn.preprocessing import LabelEncoder le = LabelEncoder() str_variable = list(data.dtypes[data.dtypes.values == object].index) for col in str_variable: data[col] = le.fit_transform(data[col].astype(str)) #在單變量分析的基礎(chǔ)上填充缺失值(看哪一組的1的比率最接近于缺失值的那一組) data['var1'] = data['var1'].fillna(0.42089) data['var2'] = data['var2'].fillna(125.854) #劃分數(shù)據(jù)集 y = data_model['target'] x = data_model.drop('target', axis=1) x_train, x_test, y_train, y_test = train_test_split(x, y,random_state=0,train_size=0.7)

訓(xùn)練

model_rf = RandomForestClassifier(n_estimators=100,#樹的數(shù)量criterion='gini',#分裂指標max_depth=None,#樹的深度max_leaf_nodes=None,#最大葉子節(jié)點數(shù)量min_samples_leaf=1,#葉子最小樣本數(shù)min_samples_split=2,#分裂節(jié)點所需最小樣本數(shù)random_state=50, max_features = 'sqrt',#劃分時最多考慮的特征數(shù)量n_jobs=-1, verbose = 1)model_rf.fit(x_train, y_train)

評估

#預(yù)測結(jié)果 rf_class = model_rf.predict(x_test) rf_prob = model_rf.predict_proba(x_test)[:, 1] # Calculate roc auc print('測試集準確率: %.4f'%roc_auc_score(y_test, rf_class)) print('測試集AUC: %.4f'%roc_auc_score(y_test, rf_prob))

決策樹參數(shù)詳解

參數(shù)默認值及輸入類型介紹
n_estimators 默認值:100
輸入:int
也就是弱學(xué)習(xí)器的最大迭代次數(shù),或者說最大的弱學(xué)習(xí)器的個數(shù)。一般來說n_estimators太小,容易過擬合,n_estimators太大,又容易欠擬合,一般選擇一個適中的數(shù)值。在實際調(diào)參的過程中,我們常常將n_estimators和下面介紹的參數(shù)learning_rate一起考慮。
oob_scorer 默認值:False
輸入:bool
是否采用袋外樣本來評估模型的好壞。個人推薦設(shè)置為True,因為袋外分數(shù)反應(yīng)了一個模型擬合后的泛化能力。
criterion 默認值:GiniCART樹做劃分時對特征的評價標準。分類模型和回歸模型的損失函數(shù)是不一樣的。分類RF對應(yīng)的CART分類樹默認是基尼系數(shù)gini,另一個可選擇的標準是信息增益?;貧wRF對應(yīng)的CART回歸樹默認是均方差mse,另一個可以選擇的標準是絕對值差mae。一般來說選擇默認的標準就已經(jīng)很好的。
max_features 默認值:None決策樹劃分時考慮的最大特征數(shù)max_features:可以使用很多種類型的值,默認是”None”,意味著劃分時考慮所有的特征數(shù);如果是”log2”意味著劃分時最多考慮log2(n_features)個特征;如果是”sqrt”或者”auto”意味著劃分時最多考慮sqrt(n_features) 個特征。如果是整數(shù),代表考慮的特征絕對數(shù)。如果是浮點數(shù),代表考慮特征百分比,即考慮(百分比xN)取整后的特征數(shù)。其中N為樣本總特征數(shù)。一般來說,如果樣本特征數(shù)不多,比如小于50,我們用默認的”None”就可以了,如果特征數(shù)非常多,我們可以靈活使用剛才描述的其他取值來控制劃分時考慮的最大特征數(shù),以控制決策樹的生成時間。 參數(shù)效果:max_features 值越大,模型學(xué)習(xí)能學(xué)習(xí)到的信息越多,越容易過擬合。
max_depth 決策樹最大深度max_depth, 默認可以不輸入,如果不輸入的話,決策樹在建立子樹的時候不會限制子樹的深度。一般來說,數(shù)據(jù)少或者特征少的時候可以不管這個值。如果模型樣本量多,特征也多的情況下,推薦限制這個最大深度,具體的取值取決于數(shù)據(jù)的分布。常用的可以取值10-100之間。 參數(shù)效果:值越大,決策樹越復(fù)雜,越容易過擬合。
min_samples_split 默認值:2內(nèi)部節(jié)點再劃分所需最小樣本數(shù)min_samples_split: 這個值限制了子樹繼續(xù)劃分的條件,如果某節(jié)點的樣本數(shù)少于min_samples_split,則不會繼續(xù)再嘗試選擇最優(yōu)特征來進行劃分。 如果樣本量不大,不需要管這個值。如果樣本量數(shù)量級非常大,則推薦增大這個值。 參數(shù)效果:值越大,決策樹越簡單,越不容易過擬合。
min_samples_leaf 默認值:1葉子節(jié)點最少樣本數(shù)min_samples_leaf: 這個值限制了葉子節(jié)點最少的樣本數(shù),如果某葉子節(jié)點數(shù)目小于樣本數(shù),則會和兄弟節(jié)點一起被剪枝。 可以輸入最少的樣本數(shù)的整數(shù),或者最少樣本數(shù)占樣本總數(shù)的百分比。如果樣本量不大,不需要管這個值。如果樣本量數(shù)量級非常大,則推薦增大這個值。 參數(shù)效果:值越大,葉子節(jié)點越容易被被剪枝,決策樹越簡單,越不容易過擬合。
min_weight_fraction_leaf 默認值:0葉子節(jié)點最小的樣本權(quán)重和min_weight_fraction_leaf:這個值限制了葉子節(jié)點所有樣本權(quán)重和的最小值,如果小于這個值,則會和兄弟節(jié)點一起被剪枝。 默認是0,就是不考慮權(quán)重問題。一般來說,如果我們有較多樣本有缺失值,或者分類樹樣本的分布類別偏差很大,就會引入樣本權(quán)重,這時我們就要注意這個值了。
max_leaf_nodes 默認值:None最大葉子節(jié)點數(shù)max_leaf_nodes: 通過限制最大葉子節(jié)點數(shù),可以防止過擬合,默認是”None”,即不限制最大的葉子節(jié)點數(shù)。如果加了限制,算法會建立在最大葉子節(jié)點數(shù)內(nèi)最優(yōu)的決策樹。如果特征不多,可以不考慮這個值,但是如果特征分成多的話,可以加以限制,具體的值可以通過交叉驗證得到。 參數(shù)效果:值越小,葉子節(jié)點個數(shù)越少,可以防止過擬合。
min_impurity_split 默認值:1e-7節(jié)點劃分最小不純度min_impurity_split: 這個值限制了決策樹的增長,如果某節(jié)點的不純度(基于基尼系數(shù),均方差)小于這個閾值,則該節(jié)點不再生成子節(jié)點。即為葉子節(jié)點 。一般不推薦改動默認值1e-7。
n_jobs 這個參數(shù)告訴引擎有多少處理器是它可以使用。 “-1”意味著沒有限制,而“1”值意味著它只能使用一個處理器
random_state 此參數(shù)讓結(jié)果容易復(fù)現(xiàn)。 一個確定的隨機值將會產(chǎn)生相同的結(jié)果,在參數(shù)和訓(xùn)練數(shù)據(jù)不變的情況下。 我曾親自嘗試過將不同的隨機狀態(tài)的最優(yōu)參數(shù)模型集成,有時候這種方法比單獨的隨機狀態(tài)更好。
oob_score 這是一個隨機森林交叉驗證方法。 它和留一驗證方法非常相似,但這快很多。 這種方法只是簡單的標記在每顆子樹中用的觀察數(shù)據(jù)。 然后對每一個觀察樣本找出一個最大投票得分,是由那些沒有使用該觀察樣本進行訓(xùn)練的子樹投票得到。

總結(jié)

以上是生活随笔為你收集整理的随机森林原理详解及python代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。