隨機森林的Python實現 (RandomForestClassifier)

# -*- coding: utf-8 -*- """ RandomForestClassifier skleran 的隨機森林回歸模型,應用流程。 2.源數據隨機的切分:75%作為訓練數據 25%最為測試數據 1.訓練數據中的因變量(分類變量)處理成數字形式 3.設定參數,訓練/fit 4.對測試數據,預測/predict結果y_pre 5.對預測數據y列,y_pre列,生成混淆矩陣,顯示分類/預測效果 """
from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier import pandas as pd import numpy as np iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) #合並 自變量 和 因變量 df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75 #相當於隨機抽取了75%作為訓練數據 df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names) #將數字類別轉為文字類別 df.head() train, test = df[df['is_train']==True], df[df['is_train']==False] #拆分訓練集和測試集 features = df.columns[:4] # 前4個指標 為自變量 clf = RandomForestClassifier(n_jobs=2) # n_jobs=2是線程數 y, _ = pd.factorize(train['species']) # 將文字類別 轉為數字類別。一種序列化方法。第一參數是序列化后結果,第二個時參考 clf.fit(train[features], y) #訓練過程 preds = iris.target_names[clf.predict(test[features])] # 獲取測試數據預測結果 pd.crosstab(test['species'], preds, rownames=['actual'], colnames=['preds']) #生成混淆矩陣
#有意思的輸出
clf.feature_importances_ # 輸出 自變量的總要程度
clf.predict_proba(test[features]) #輸出每個測試樣本對應幾種數據類型的概率值
150個數據,112做訓練 38個最測試.
df數據示例-
測試數據,輸出結果-
參考:[Machine Learning & Algorithm] 隨機森林(Random Forest)
=============================================================================================================
知識點:
對 ‘RandomForestClassifier’ 原文 的 翻譯
知識點:
#將數字類別轉為文字類別
pd.Categorical.from_codes([0,1,2,1,0,0,1,-1], ['小貓','中貓','大貓'])
#Out[76]:
#[小貓, 中貓, 大貓, 中貓, 小貓, 小貓, 中貓, NaN]
#Categories (3, object): [小貓, 中貓, 大貓]
知識點:
# pd.factorize 用法

從例子中可以看到 pd.factorize() 返回的是一個tuple ,包含連個元素,第二個是源數據中所有數據的類別,當然取出了nan ,第一個是源數據在類別中對應的序號組成的array 看到這里可以發現 和pd.Categorical() 真的是非常像了。
知識點:
Pandas:透視表(pivotTab)和交叉表(crossTab)
知識點:
numpy.random.seed(1) #設定隨機種子且僅在下一次隨機時有效.
介紹Python-random模塊的鏈接:
==================================================================================================================================================
