色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

新機(jī)器視覺(jué) ? 來(lái)源:CSDN博主小皇的奶黃包 ? 2023-09-21 11:17 ? 次閱讀

摘要

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

0 緒論

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

一、材料準(zhǔn)備

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

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

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

二、算法原理

隨機(jī)森林算法是一種機(jī)器學(xué)習(xí)算法,它通過(guò)構(gòu)建多棵決策樹(shù)并將它們的預(yù)測(cè)結(jié)果結(jié)合起來(lái)來(lái)預(yù)測(cè)目標(biāo)變量。

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

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

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

Figure 1 隨機(jī)森林分類流程圖

三、算法Python實(shí)現(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 # 目標(biāo)變量

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

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

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

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

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

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

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

3.4循環(huán)遍歷每個(gè)拆分,并使用隨機(jī)森林分類器對(duì)每個(gè)拆分進(jìn)行訓(xùn)練和評(píng)估

from sklearn.metrics import confusion_matrix, classification_report, accuracy_score
# 循環(huán)遍歷每個(gè)拆分,并使用隨機(jī)森林分類器對(duì)每個(gè)拆分進(jìn)行訓(xùn)練和評(píng)估
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ù)測(cè),預(yù)測(cè)數(shù)據(jù)可以用另一個(gè)文件導(dǎo)入,格式與DataX相同
  print(clf.score(X_test, y_test))

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

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

3.5 計(jì)算特征重要性

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

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

3.6 將特征重要性可視化

import matplotlib.pyplot as plt
# 畫(huà)條形圖
plt.barh(range(len(importances)), importances)
 
# 添加標(biāo)題
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')

對(duì)特征重要性進(jìn)行可視化,可以提高論文的辨識(shí)度,也算是加分項(xiàng),比單純弄成表格的要好。

3.7生成決策樹(shù)可視化圖形

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

這里將隨機(jī)森林的算法過(guò)程進(jìn)行可視化,一般來(lái)說(shuō)很長(zhǎng),圖片不美觀,可以不放進(jìn)論文里,簡(jiǎn)單說(shuō)明即可。

3.8 完整實(shí)現(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 # 目標(biāo)變量
 
# 創(chuàng)建隨機(jī)森林分類器
clf = RandomForestClassifier(n_estimators=100)
 
# 創(chuàng)建ShuffleSplit對(duì)象,用于執(zhí)行自動(dòng)洗牌
ss = ShuffleSplit(n_splits=1, train_size=0.7, test_size=0.3, random_state=0)
# 循環(huán)遍歷每個(gè)拆分,并使用隨機(jī)森林分類器對(duì)每個(gè)拆分進(jìn)行訓(xùn)練和評(píng)估
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ù)測(cè),預(yù)測(cè)數(shù)據(jù)可以用另一個(gè)文件導(dǎo)入,格式與DataX相同
  print(clf.score(X_test, y_test))
 
importances = clf.feature_importances_ # 計(jì)算特征重要性
print(importances)
# 畫(huà)條形圖
plt.barh(range(len(importances)), importances)
 
# 添加標(biāo)題
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ù)將決策樹(shù)保存為 dot 文件
dot_data = export_graphviz(clf.estimators_[0], out_file=None,
              feature_names=['CDRSB_bl', 'PIB_bl',
                     'FBB_bl'])
 
# 使用 graphviz 庫(kù)讀取 dot 文件并生成決策樹(shù)可視化圖形
graph = graphviz.Source(dot_data)
graph.render('decision_tree')

四、 結(jié)論

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

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

來(lái)源:CSDN博主小皇的奶黃包

審核編輯:湯梓紅

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

    關(guān)注

    23

    文章

    4607

    瀏覽量

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

    關(guān)注

    1

    文章

    1623

    瀏覽量

    49108
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8406

    瀏覽量

    132563
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4792

    瀏覽量

    84627

原文標(biāo)題:保姆級(jí)隨機(jī)森林算法Python教學(xué)

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    機(jī)器學(xué)習(xí)隨機(jī)森林相關(guān)知識(shí)

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

    隨機(jī)森林的相關(guān)知識(shí)

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

    隨機(jī)森林的跌倒檢測(cè)算法

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

    面向隨機(jī)森林的差分隱私保護(hù)算法

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

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

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

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

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

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

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

    基于k近鄰的完全隨機(jī)森林算法KCRForest

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

    基于遺傳算法隨機(jī)森林的XGBoost改進(jìn)方法

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

    面向差分?jǐn)?shù)據(jù)挖掘隱私保護(hù)的隨機(jī)森林算法

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

    隨機(jī)森林的概念、工作原理及用例

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

    利用隨機(jī)森林進(jìn)行特征重要性評(píng)估

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

    隨機(jī)森林算法及其實(shí)現(xiàn)

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

    什么是隨機(jī)森林隨機(jī)森林的工作原理

    隨機(jī)森林使用名為“bagging”的技術(shù),通過(guò)數(shù)據(jù)集和特征的隨機(jī)自助抽樣樣本并行構(gòu)建完整的決策樹(shù)。雖然決策樹(shù)基于一組固定的特征,而且經(jīng)常過(guò)擬合,但隨機(jī)性對(duì)
    發(fā)表于 03-18 14:27 ?3554次閱讀
    什么是<b class='flag-5'>隨機(jī)</b><b class='flag-5'>森林</b>?<b class='flag-5'>隨機(jī)</b><b class='flag-5'>森林</b>的工作原理
    主站蜘蛛池模板: 97在线视频免费观看97| 精品久久久久久久久免费影院| 午夜电影三级还珠格格| 国产白丝JK被疯狂输出视频| 日韩午夜影院| MD传媒MD0021在线观看| 午夜伦理网| 国产精品嫩草影院一区二区三区| 亚洲 色 欧美 爱 视频 日韩| 美女裸露胸部100%无遮挡| 在线播放毛片| 男人私gay挠脚心vk视频| 红杏俱乐部| 99久久999久久久综合精品涩| 年轻夫妇韩剧中文版免费观看 | 中文字幕久久久| 日韩欧美一区二区三区免费观看| 国产一区二区三区内射高清| 69日本xxⅹxxxxx18| 色尼姑久久超碰在线| 护士日本xx厕所| 高清欧美一区二区三区| 中文字幕在线观看亚洲| 乳交高H糙汉宠文| 免费无码国产欧美久久18| 91精品视频网站| 亚洲免费一| 亚洲AV成人无码网天堂| 精品国产麻豆免费人成网站| 福利一区福利二区| 99久久久精品| 亚洲中文字幕在线第六区| 性生交片免费无码看人| 久久夜色噜噜噜亚洲AV0000| 精品国产乱码久久久久久人妻| 动漫美女脱小内内露尿口| 亚洲人成在线播放网站岛国| 迅雷哥在线观看高清| 欧式午夜理伦三级在线观看| 久久免费高清| 九九热这里有精品|