RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Python實現(xiàn)隨機森林算法

新機器視覺 ? 來源:CSDN博主小皇的奶黃包 ? 2023-09-21 11:17 ? 次閱讀

摘要

機器學(xué)習算法是數(shù)據(jù)挖掘、數(shù)據(jù)能力分析和數(shù)學(xué)建模必不可少的一部分,而隨機森林算法和決策樹算法是其中較為常用的兩種算法,本文將會對隨機森林算法的Python實現(xiàn)進行保姆級教學(xué)。

0 緒論

數(shù)據(jù)挖掘和數(shù)學(xué)建模等比賽中,除了算法的實現(xiàn),還需要對數(shù)據(jù)進行較為合理的預(yù)處理,包括缺失值處理、異常值處理、特征值的特征編碼等等,本文默認讀者的數(shù)據(jù)均已完成數(shù)據(jù)預(yù)處理,如有需要,后續(xù)會將數(shù)據(jù)預(yù)處理的方法也進行發(fā)布。

一、材料準備

Python編譯器:Pycharm社區(qū)版或個人版等

訓(xùn)練數(shù)據(jù)集:此處使用2022年數(shù)維杯國際大學(xué)生數(shù)學(xué)建模競賽C題的附件數(shù)據(jù)為例。

數(shù)據(jù)處理:經(jīng)過初步數(shù)據(jù)清洗和相關(guān)性分析得到初步的特征,并利用決策樹進行特征重要性分析,完成二次特征降維,得到'CDRSB_bl', 'PIB_bl', 'FBB_bl'三個自變量特征,DX_bl為分類特征。

二、算法原理

隨機森林算法是一種機器學(xué)習算法,它通過構(gòu)建多棵決策樹并將它們的預(yù)測結(jié)果結(jié)合起來來預(yù)測目標變量。

隨機森林是一種典型的Bagging模型,是基于多種決策樹的分類智能算法。首先,在處理后的數(shù)據(jù)集中進行隨機抽樣,形成n種不同的樣本數(shù)據(jù)集。

然后,根據(jù)數(shù)據(jù)集構(gòu)建不同的決策樹模型,再將測試集代入決策樹中,得到分類結(jié)果,最后通過投票進行預(yù)測分類,具體的流程圖如下圖1所示:

70e04486-57ba-11ee-939d-92fbcf53809c.jpg

Figure 1 隨機森林分類流程圖

三、算法Python實現(xiàn)

3.1 數(shù)據(jù)加載

import pandas as pd
# 加載數(shù)據(jù)
X = pd.DataFrame(pd.read_excel('DataX.xlsx')).values # 輸入特征
y = pd.DataFrame(pd.read_excel('DataY.xlsx')).values # 目標變量

此處將自變量存放在DataX中,因變量存放在DataY中,如需進行樣本預(yù)測,可另存一個文件(格式與DataX一致),在后文predict中進行替換。

3.2 創(chuàng)建隨機森林分類器

from sklearn.ensemble import RandomForestClassifier
# 創(chuàng)建隨機森林分類器
clf = RandomForestClassifier(n_estimators=100)

本文將迭代次數(shù)設(shè)為100

3.3創(chuàng)建ShuffleSplit對象,用于執(zhí)行自動洗牌

from sklearn.model_selection import ShuffleSplit
# 創(chuàng)建ShuffleSplit對象,用于執(zhí)行自動洗牌
ss = ShuffleSplit(n_splits=1, train_size=0.7, test_size=0.3, random_state=0)

此處使用70%的樣本數(shù)據(jù)作為訓(xùn)練集,30%的樣本數(shù)據(jù)作為測試集,如果在國際比賽中,可通過調(diào)整其測試訓(xùn)練比,來進行模型的敏感性和穩(wěn)定性分析。

3.4循環(huán)遍歷每個拆分,并使用隨機森林分類器對每個拆分進行訓(xùn)練和評估

from sklearn.metrics import confusion_matrix, classification_report, accuracy_score
# 循環(huán)遍歷每個拆分,并使用隨機森林分類器對每個拆分進行訓(xùn)練和評估
for train_index, test_index in ss.split(X, y):
  X_train, X_test = X[train_index], X[test_index]
  y_train, y_test = y[train_index], y[test_index]
  clf.fit(X_train, y_train)
  y_pred = clf.predict(X_test)
  print("Confusion Matrix:")
  print(confusion_matrix(y_test, y_pred)) # 輸出分類結(jié)果矩陣
  print("Classification Report:")
  print(classification_report(y_test, y_pred)) # 輸出混淆矩陣
  print("Accuracy:")
  print(accuracy_score(y_test, y_pred))
  print(clf.predict(X_train)) # 此處用作預(yù)測,預(yù)測數(shù)據(jù)可以用另一個文件導(dǎo)入,格式與DataX相同
  print(clf.score(X_test, y_test))

一個分類器的好壞、是否適用,離不開模型的評估,常用的方法就是混淆矩陣和F1-Score,博主建議直接使用F1-Score即可,如果時間充足,可以使用多種機器學(xué)習算法的對比,說明你選擇隨機森林或者其他機器學(xué)習算法的原因,這是加分項。

此處將結(jié)果矩陣、分類的準確性、F1-Score值均輸出,可適當采用,建議弄成表格放進論文里。

3.5 計算特征重要性

# 計算特征重要性
importances = clf.feature_importances_ 
print(importances)

如何判斷選擇的特征是否需要再次降維,得到的特征重要性非常低,即說明這個指標在該算法分類中不起明顯作用,可將該特征進行刪除。

3.6 將特征重要性可視化

import matplotlib.pyplot as plt
# 畫條形圖
plt.barh(range(len(importances)), importances)
 
# 添加標題
plt.title("Feature Importances")
feature_names = ['CDRSB_bl', 'PIB_bl', 'FBB_bl']
# 添加特征名稱
plt.yticks(range(len(importances)), feature_names)
 
# 顯示圖像
# plt.show()
plt.savefig('feature_importance.png')

對特征重要性進行可視化,可以提高論文的辨識度,也算是加分項,比單純弄成表格的要好。

3.7生成決策樹可視化圖形

from sklearn.tree import export_graphviz
import graphviz
# 使用 export_graphviz 函數(shù)將決策樹保存為 dot 文件
dot_data = export_graphviz(clf.estimators_[0], out_file=None,
              feature_names=['CDRSB_bl', 'PIB_bl',
                     'FBB_bl'])
 
# 使用 graphviz 庫讀取 dot 文件并生成決策樹可視化圖形
graph = graphviz.Source(dot_data)
graph.render('decision_tree')

這里將隨機森林的算法過程進行可視化,一般來說很長,圖片不美觀,可以不放進論文里,簡單說明即可。

3.8 完整實現(xiàn)代碼

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score
from sklearn.model_selection import ShuffleSplit
import pandas as pd
from sklearn.tree import export_graphviz
import graphviz
import matplotlib.pyplot as plt
 
# 加載數(shù)據(jù)
X = pd.DataFrame(pd.read_excel('DataX.xlsx')).values # 輸入特征
y = pd.DataFrame(pd.read_excel('DataY.xlsx')).values # 目標變量
 
# 創(chuàng)建隨機森林分類器
clf = RandomForestClassifier(n_estimators=100)
 
# 創(chuàng)建ShuffleSplit對象,用于執(zhí)行自動洗牌
ss = ShuffleSplit(n_splits=1, train_size=0.7, test_size=0.3, random_state=0)
# 循環(huán)遍歷每個拆分,并使用隨機森林分類器對每個拆分進行訓(xùn)練和評估
for train_index, test_index in ss.split(X, y):
  X_train, X_test = X[train_index], X[test_index]
  y_train, y_test = y[train_index], y[test_index]
  clf.fit(X_train, y_train)
  y_pred = clf.predict(X_test)
  print("Confusion Matrix:")
  print(confusion_matrix(y_test, y_pred)) # 輸出分類結(jié)果矩陣
  print("Classification Report:")
  print(classification_report(y_test, y_pred)) # 輸出混淆矩陣
  print("Accuracy:")
  print(accuracy_score(y_test, y_pred))
  print(clf.predict(X_train)) # 此處用作預(yù)測,預(yù)測數(shù)據(jù)可以用另一個文件導(dǎo)入,格式與DataX相同
  print(clf.score(X_test, y_test))
 
importances = clf.feature_importances_ # 計算特征重要性
print(importances)
# 畫條形圖
plt.barh(range(len(importances)), importances)
 
# 添加標題
plt.title("Feature Importances")
feature_names = ['CDRSB_bl', 'PIB_bl', 'FBB_bl']
# 添加特征名稱
plt.yticks(range(len(importances)), feature_names)
 
# 顯示圖像
# plt.show()
plt.savefig('feature_importance.png')
# 使用 export_graphviz 函數(shù)將決策樹保存為 dot 文件
dot_data = export_graphviz(clf.estimators_[0], out_file=None,
              feature_names=['CDRSB_bl', 'PIB_bl',
                     'FBB_bl'])
 
# 使用 graphviz 庫讀取 dot 文件并生成決策樹可視化圖形
graph = graphviz.Source(dot_data)
graph.render('decision_tree')

四、 結(jié)論

對隨機森林進行Python的實現(xiàn),并計算了結(jié)果矩陣、評估矩陣和準確率,可支持對模型的準確性、適用性、敏感性和穩(wěn)定性進行分析。

并通過對特征重要性和隨機森林算法實現(xiàn)過程的可視化,很好地完成了一趟完整的隨機森林算法的演示。

來源:CSDN博主小皇的奶黃包

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4607

    瀏覽量

    92828
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1623

    瀏覽量

    49108
  • 機器學(xué)習
    +關(guān)注

    關(guān)注

    66

    文章

    8406

    瀏覽量

    132558
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4792

    瀏覽量

    84627

原文標題:保姆級隨機森林算法Python教學(xué)

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    機器學(xué)習算法隨機森林算法詳解及工作原理圖解

    隨機森林是一種靈活且易于使用的機器學(xué)習算法,即便沒有超參數(shù)調(diào)優(yōu),也可以在大多數(shù)情況下得到很好的結(jié)果。它也是最常用的算法之一,因為它很簡易,既可用于分類也能用于回歸任務(wù)。 在這篇文章中,
    的頭像 發(fā)表于 03-14 16:10 ?31.9w次閱讀
    機器學(xué)習<b class='flag-5'>算法</b>之<b class='flag-5'>隨機</b><b class='flag-5'>森林</b><b class='flag-5'>算法</b>詳解及工作原理圖解

    機器學(xué)習隨機森林相關(guān)知識

    機器學(xué)習之隨機森林(三)
    發(fā)表于 04-02 10:06

    隨機森林的相關(guān)知識

    機器學(xué)習之隨機森林(一)
    發(fā)表于 08-27 07:30

    隨機森林的跌倒檢測算法

    針對現(xiàn)有跌倒檢測算法由于缺乏真實老人跌倒樣本以及使用年輕人仿真跌倒樣本規(guī)模較小導(dǎo)致的過擬合和適應(yīng)性不足等問題,提出了基于隨機森林的跌倒檢測算法。該
    發(fā)表于 12-29 14:50 ?2次下載

    面向隨機森林的差分隱私保護算法

    提出一種基于隨機森林的差分隱私保護算法DiffPRFs,在每一棵決策樹的構(gòu)建過程中采用指數(shù)機制選擇分裂點和分裂屬性,并根據(jù)拉普拉斯機制添加噪聲。在整個算法過程中滿足差分隱私保護需求,相
    發(fā)表于 02-08 17:10 ?3次下載

    Random Forest算法 python實現(xiàn)案例分析

    隨機森林由Breiman提出的一種分類算法,它使用Bootstrap重采樣技術(shù),從原始訓(xùn)練樣本集中有放回的重復(fù)隨機抽取n個樣本生成新的樣本集合,以此作為訓(xùn)練集來訓(xùn)練決策樹。然后按照上述
    的頭像 發(fā)表于 09-23 09:58 ?4744次閱讀
     Random Forest<b class='flag-5'>算法</b> <b class='flag-5'>python</b><b class='flag-5'>實現(xiàn)</b>案例分析

    一種基于數(shù)據(jù)集成的隨機森林算法

    用于銷售預(yù)測的歷史數(shù)據(jù)存在稀疏性與波動性等特點,當預(yù)測周期較長時,傳統(tǒng)統(tǒng)計學(xué)或者機器學(xué)習領(lǐng)域預(yù)測算法的預(yù)測效果較差。為此,利用隨機森林的集成思想與訓(xùn)練數(shù)據(jù)集的隨機分割重組,提出一種基于
    發(fā)表于 03-16 11:37 ?12次下載
    一種基于數(shù)據(jù)集成的<b class='flag-5'>隨機</b><b class='flag-5'>森林</b><b class='flag-5'>算法</b>

    基于隨機森林與轉(zhuǎn)換算法實現(xiàn)海洋數(shù)據(jù)的協(xié)同轉(zhuǎn)換

    轉(zhuǎn)換接口,提出基于隨機森林的數(shù)據(jù)分類與轉(zhuǎn)換算法實現(xiàn)海洋數(shù)據(jù)的協(xié)同轉(zhuǎn)換,并通過加入數(shù)據(jù)預(yù)處理過程降低時間復(fù)雜度。在此基礎(chǔ)上,設(shè)計改進的雞群優(yōu)化算法
    發(fā)表于 03-31 14:41 ?1次下載
    基于<b class='flag-5'>隨機</b><b class='flag-5'>森林</b>與轉(zhuǎn)換<b class='flag-5'>算法</b><b class='flag-5'>實現(xiàn)</b>海洋數(shù)據(jù)的協(xié)同轉(zhuǎn)換

    基于k近鄰的完全隨機森林算法KCRForest

    針對有新類的動態(tài)數(shù)據(jù)流分類算法檢測新類性能不高的問題,提出一種基于k近鄰的完全隨機森林算法( Kcrforest)。該算法利用動態(tài)數(shù)據(jù)流中已
    發(fā)表于 04-02 10:01 ?18次下載
    基于k近鄰的完全<b class='flag-5'>隨機</b><b class='flag-5'>森林</b><b class='flag-5'>算法</b>KCRForest

    基于遺傳算法隨機森林的XGBoost改進方法

    回歸預(yù)測是機器學(xué)習中重要的研究方向之一,有著廣闊的應(yīng)用領(lǐng)域。為了進一步提升回歸預(yù)測的精度,提出了基于遺傳算法隨機森林的 Gboost改進方法( GA Xgboost_RF)。首先利用遺傳算法
    發(fā)表于 04-26 15:44 ?10次下載
    基于遺傳<b class='flag-5'>算法</b>和<b class='flag-5'>隨機</b><b class='flag-5'>森林</b>的XGBoost改進方法

    面向差分數(shù)據(jù)挖掘隱私保護的隨機森林算法

    數(shù)據(jù)挖掘中的隱私保護問題是目前信息安全領(lǐng)域的研究熱點之一。針對隱私保護要求下的分類問題,提出一種面向差分隱私保護的隨機森林算法 REDPP-Gini。將隨機
    發(fā)表于 05-12 14:14 ?1次下載

    隨機森林的概念、工作原理及用例

    隨機森林是一種監(jiān)督式算法,使用由眾多決策樹組成的一種集成學(xué)習方法,輸出是對問題最佳答案的共識。隨機森林可用于分類或回歸。
    的頭像 發(fā)表于 08-05 10:00 ?6930次閱讀

    利用隨機森林進行特征重要性評估

    隨機森林是以決策樹為基學(xué)習器的集成學(xué)習算法隨機森林非常簡單,易于實現(xiàn),計算開銷也很小,更令人驚
    的頭像 發(fā)表于 10-10 17:14 ?1894次閱讀

    隨機森林算法及其實現(xiàn)

    其實從直觀角度來解釋,每棵決策樹都是一個分類器(假設(shè)現(xiàn)在針對的是分類問題),那么對于一個輸入樣本,N棵樹會有N個分類結(jié)果。而隨機森林集成了所有的分類投票結(jié)果,將投票次數(shù)最多的類別指定為最終的輸出,這就是一種最簡單的 Bagging 思想。
    的頭像 發(fā)表于 05-15 09:46 ?1932次閱讀
    <b class='flag-5'>隨機</b><b class='flag-5'>森林</b><b class='flag-5'>算法</b>及其<b class='flag-5'>實現(xiàn)</b>

    什么是隨機森林?隨機森林的工作原理

    隨機森林使用名為“bagging”的技術(shù),通過數(shù)據(jù)集和特征的隨機自助抽樣樣本并行構(gòu)建完整的決策樹。雖然決策樹基于一組固定的特征,而且經(jīng)常過擬合,但隨機性對
    發(fā)表于 03-18 14:27 ?3550次閱讀
    什么是<b class='flag-5'>隨機</b><b class='flag-5'>森林</b>?<b class='flag-5'>隨機</b><b class='flag-5'>森林</b>的工作原理
    RM新时代网站-首页