吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

基于Python實現隨機森林算法

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

摘要

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

0 緒論

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

一、材料準備

Python編譯器:Pycharm社區版或個人版等

訓練數據集:此處使用2022年數維杯國際大學生數學建模競賽C題的附件數據為例。

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

二、算法原理

隨機森林算法是一種機器學習算法,它通過構建多棵決策樹并將它們的預測結果結合起來來預測目標變量。

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

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

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

Figure 1 隨機森林分類流程圖

三、算法Python實現

3.1 數據加載

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

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

3.2 創建隨機森林分類器

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

本文將迭代次數設為100

3.3創建ShuffleSplit對象,用于執行自動洗牌

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

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

3.4循環遍歷每個拆分,并使用隨機森林分類器對每個拆分進行訓練和評估

from sklearn.metrics import confusion_matrix, classification_report, accuracy_score
# 循環遍歷每個拆分,并使用隨機森林分類器對每個拆分進行訓練和評估
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)) # 輸出分類結果矩陣
  print("Classification Report:")
  print(classification_report(y_test, y_pred)) # 輸出混淆矩陣
  print("Accuracy:")
  print(accuracy_score(y_test, y_pred))
  print(clf.predict(X_train)) # 此處用作預測,預測數據可以用另一個文件導入,格式與DataX相同
  print(clf.score(X_test, y_test))

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

此處將結果矩陣、分類的準確性、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 函數將決策樹保存為 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 完整實現代碼

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
 
# 加載數據
X = pd.DataFrame(pd.read_excel('DataX.xlsx')).values # 輸入特征
y = pd.DataFrame(pd.read_excel('DataY.xlsx')).values # 目標變量
 
# 創建隨機森林分類器
clf = RandomForestClassifier(n_estimators=100)
 
# 創建ShuffleSplit對象,用于執行自動洗牌
ss = ShuffleSplit(n_splits=1, train_size=0.7, test_size=0.3, random_state=0)
# 循環遍歷每個拆分,并使用隨機森林分類器對每個拆分進行訓練和評估
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)) # 輸出分類結果矩陣
  print("Classification Report:")
  print(classification_report(y_test, y_pred)) # 輸出混淆矩陣
  print("Accuracy:")
  print(accuracy_score(y_test, y_pred))
  print(clf.predict(X_train)) # 此處用作預測,預測數據可以用另一個文件導入,格式與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 函數將決策樹保存為 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')

四、 結論

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

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

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

審核編輯:湯梓紅

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

    關注

    23

    文章

    4630

    瀏覽量

    93351
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49284
  • 機器學習
    +關注

    關注

    66

    文章

    8438

    瀏覽量

    133080
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85037

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

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

收藏 人收藏

    評論

    相關推薦

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

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

    機器學習隨機森林相關知識

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

    隨機森林的相關知識

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

    隨機森林的跌倒檢測算法

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

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

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

    Random Forest算法 python實現案例分析

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

    一種基于數據集成的隨機森林算法

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

    基于隨機森林與轉換算法實現海洋數據的協同轉換

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

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

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

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

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

    面向差分數據挖掘隱私保護的隨機森林算法

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

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

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

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

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

    隨機森林算法及其實現

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

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

    隨機森林使用名為“bagging”的技術,通過數據集和特征的隨機自助抽樣樣本并行構建完整的決策樹。雖然決策樹基于一組固定的特征,而且經常過擬合,但隨機性對
    發表于 03-18 14:27 ?3761次閱讀
    什么是<b class='flag-5'>隨機</b><b class='flag-5'>森林</b>?<b class='flag-5'>隨機</b><b class='flag-5'>森林</b>的工作原理
    娱乐城百家乐打不开| 赌百家乐怎样能赢| 至尊百家乐娱乐场开户注册 | 娱乐网百家乐补丁| 六合彩公式| 百家乐官网视频二人麻将| 电子百家乐官网打法| 太阳城百家乐主页| 大发888网页版登陆| 金公主百家乐官网现金网| 做生意店铺风水| 百家乐是个什么样的游戏| 宝马会线上娱乐| 澳门百家乐官网海洋阿强| 百家乐视频官方下载| 太阳城菲律宾官网| 百家乐官网游戏免费| 做生意如何风水| 大发888娱乐城下载英皇国际| 百家乐官网扑克投注赢钱法| 百家乐投注方向| 龙岩棋牌乐| 366百家乐官网赌博| 百家乐技巧微笑心法| 德江县| 百家乐官网俄罗斯轮盘转盘套装| 新全讯网2| 视频百家乐官网网站| 蓝盾百家乐娱乐场开户注册| 百家乐官网游戏解密| 百家乐怎么玩了| 大发888 备用6222| 百家乐官网博娱乐场| 三国百家乐的玩法技巧和规则 | 百家乐官网槛| 威尼斯人娱乐欢迎您| 百家乐官网知敌便能制胜| 星际百家乐官网娱乐城| 威尼斯人娱乐城信誉好吗| 百家乐官网诀| 大发888真钱游戏|