天天看點

Sklearn 成長之路(二)建構随機森林并處理Iris資料集

随機森林的簡要解釋

随機森林即采用建構多棵随機樹的形式,讓這些随機樹同時并行處理一組資料,并對各個樹的分類結果進行彙總并投票,最終傳回随機森林的分類結果。

分類結果輸出

傳入資料集包含内容有: [‘data’, ‘target’, ‘target_names’, ‘DESCR’, ‘feature_names’]

訓練集樣本大小: (120, 4)

訓練集标簽大小: (120,)

測試集樣本大小: (30, 4)

測試集标簽大小: (30,)

模型測試集準确率為: 0.9333333333333333

特征重要程度為:

(‘sepal length (cm)’, 0.0915733052877204)

(‘sepal width (cm)’, 0.01876997123319593)

(‘petal length (cm)’, 0.44209219100019126)

(‘petal width (cm)’, 0.4475645324788924)

Show me the code

導包

# 資料集
from sklearn import datasets
# 随機森林子產品
from sklearn.ensemble import RandomForestClassifier
# 訓練集測試集分割子產品
from sklearn.model_selection import train_test_split

import numpy as np
import matplotlib.pyplot as plt
           

擷取資料

# 自定義導入資料集函數
def get_data(total_data):
    # 顯示total_data包含的内容
    print("傳入資料集包含内容有:", [x for x in total_data.keys()])
    # 樣本
    x_true = total_data.data
    # 标簽
    y_true = total_data.target
    # 特征名稱
    feature_names = total_data.feature_names
    # 類名
    target_names = total_data.target_names
    
    return x_true, y_true, feature_names, target_names
           

主函數及調用

# 定義主函數
def main():
    # 利用自定義函數導入Iris資料集
    total_iris = datasets.load_iris()
    x_true, y_true, feature_names, target_names = get_data(total_iris)
    
    # 分割資料集
    rate_test = 0.2  # 訓練集比例
    x_train, x_test, y_train, y_test = train_test_split(x_true,
                                                        y_true,
                                                        test_size= rate_test)
    print("\n訓練集樣本大小:", x_train.shape)
    print("訓練集标簽大小:", y_train.shape)
    print("測試集樣本大小:", x_test.shape)
    print("測試集标簽大小:", y_test.shape)

    # 執行個體化随機森林分類器
    clf = RandomForestClassifier()
    # 訓練模型
    clf.fit(x_train, y_train)
    # 評價模型
    score = clf.score(x_test, y_test)
    print("\n模型測試集準确率為:", score)
    
    # 顯示特征重要程度
    print("\n特征重要程度為:")
    info = [*zip(feature_names, clf.feature_importances_)]
    for cell in info:
        print(cell)
    
    
# 調用主函數
if __name__ == "__main__":
    main()
           

繼續閱讀