使用scikit-learn對csv數據文件構建隨機森林並可視化

1、對數據進行處理並訓練評估模型

from sklearn.model_selection import train_test_split, cross_val_score, KFold, GridSearchCV
import pandas as pd
import numpy as np

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler
from sklearn.tree import export_graphviz

path = "你自己的csv.csv"  # 5分類的
data = pd.read_csv(path)

# 打亂數據集
from sklearn import utils
data = utils.shuffle(data)

Y = data["score"].values
X = data.drop("score", axis=1).values
print(f"X=\n{X}")
print(f"\nY=\n{Y}")

# 數據標準化
scaler = StandardScaler()       # 實例化
scaler.fit(X)                   # 訓練標準化對象
X = scaler.transform(X)         # 轉換數據集

# 拆分訓練集和測試集
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.3, random_state=0)

# 實例化分類器(默認生成100顆樹,信息熵,葉子結點最少樣本量爲3,最大深度爲15)
clf = RandomForestClassifier(n_estimators=2, criterion="entropy", min_samples_leaf=3, max_depth=15)

# 訓練
clf.fit(train_X, train_Y)
# 預測並評估
predict_Y = clf.predict(test_X)

print(f"準確率acc = {accuracy_score(y_pred=predict_Y, y_true=test_Y)}")

2、下面繪製隨機森林

需要一些準備和解釋:
1、需要下載安裝Graphviz,代碼中還要指出安裝的bin目錄位置
參考(都要看):
https://blog.csdn.net/Candy_GL/article/details/79684947

https://blog.csdn.net/qq_40304090/article/details/88594813

2、注意繪製的森林並不是在一張圖像上的,而是需要一棵樹一棵樹的繪製

## 繪製隨機森林
# 加入Graphviz的環境路徑
import os
os.environ["PATH"] += os.pathsep + "G:/24_graphviz_msi/bin"
# 提取隨機森林中單個樹
# estimator = clf.estimators_[5]  # 提取第5顆樹
# 遍歷提取所有樹,分別繪製
for i_tree in range(len(clf.estimators_)):
    # 繪圖並導出
    dot_data = export_graphviz(clf.estimators_[i_tree], out_file=None,
                               feature_names=(list(data.drop("score", axis=1).columns)))  # 第1個參數Decision_tree是dtc或clf都可以
    import pydotplus
    graph = pydotplus.graph_from_dot_data(dot_data)
    graph.get_nodes()[7].set_fillcolor("#FFF2DD")
    if os.path.exists(f"{i_tree}_out.png"):
       pass
    else:
        graph.write_png(f"{i_tree}_out.png")  # 當前文件夾生成out.png

3、還有一些其他的打印路徑的方法,如sklearn官方提供的export_text,以及一些用戶自己寫的方法,請點擊 另一篇文章

如果你使用export_text遇到報錯sklearn.tree export_textc error,請直接更新scikit-learn

pip install scikit-learn --upgrade

參考:
《如何用Scikit-learn可視化隨機森林中的一棵樹》
《如何能將sklearn裏隨機森林分類樹的結構給畫出來?》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章