
- Scikit Learn 教程
- Scikit Learn - 首頁
- Scikit Learn - 簡介
- Scikit Learn - 建模過程
- Scikit Learn - 資料表示
- Scikit Learn - 估計器 API
- Scikit Learn - 約定
- Scikit Learn - 線性建模
- Scikit Learn - 擴充套件線性建模
- 隨機梯度下降
- Scikit Learn - 支援向量機
- Scikit Learn - 異常檢測
- Scikit Learn - K 近鄰
- Scikit Learn - KNN 學習
- 樸素貝葉斯分類
- Scikit Learn - 決策樹
- 隨機決策樹
- Scikit Learn - Boosting 方法
- Scikit Learn - 聚類方法
- 聚類效能評估
- 使用 PCA 進行降維
- Scikit Learn 有用資源
- Scikit Learn - 快速指南
- Scikit Learn - 有用資源
- Scikit Learn - 討論
Scikit Learn - 隨機決策樹
本章將幫助您瞭解 Sklearn 中的隨機決策樹。
隨機決策樹演算法
我們知道 DT 通常透過遞迴分割資料進行訓練,但由於容易過擬合,因此它們已透過在資料的各種子樣本上訓練許多樹來轉換為隨機森林。 這sklearn.ensemble模組包含以下兩種基於隨機決策樹的演算法:
隨機森林演算法
對於正在考慮的每個特徵,它計算區域性最優特徵/分割組合。 在隨機森林中,整合中的每棵決策樹都是從訓練集中有放回地抽取的樣本構建的,然後獲取每棵樹的預測結果,最後透過投票選擇最佳解決方案。 它可用於分類和迴歸任務。
使用隨機森林進行分類
要建立隨機森林分類器,Scikit-learn 模組提供sklearn.ensemble.RandomForestClassifier。 在構建隨機森林分類器時,此模組使用的主要引數是“max_features”和“n_estimators”。
這裡,“max_features”是在分割節點時要考慮的特徵的隨機子集的大小。 如果我們將此引數的值選擇為 none,則它將考慮所有特徵,而不是隨機子集。 另一方面,n_estimators是森林中的樹木數量。 樹木數量越多,結果越好。 但計算時間也會更長。
實現示例
在以下示例中,我們使用sklearn.ensemble.RandomForestClassifier構建隨機森林分類器,並使用cross_val_score模組檢查其準確性。
from sklearn.model_selection import cross_val_score from sklearn.datasets import make_blobs from sklearn.ensemble import RandomForestClassifier X, y = make_blobs(n_samples = 10000, n_features = 10, centers = 100,random_state = 0) RFclf = RandomForestClassifier(n_estimators = 10,max_depth = None,min_samples_split = 2, random_state = 0) scores = cross_val_score(RFclf, X, y, cv = 5) scores.mean()
輸出
0.9997
示例
我們還可以使用 sklearn 資料集構建隨機森林分類器。 如下例所示,我們使用 iris 資料集。 我們還將找到其準確率得分和混淆矩陣。
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report, confusion_matrix, accuracy_score path = "https://archive.ics.uci.edu/ml/machine-learning-database s/iris/iris.data" headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class'] dataset = pd.read_csv(path, names = headernames) X = dataset.iloc[:, :-1].values y = dataset.iloc[:, 4].values X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30) RFclf = RandomForestClassifier(n_estimators = 50) RFclf.fit(X_train, y_train) y_pred = RFclf.predict(X_test) result = confusion_matrix(y_test, y_pred) print("Confusion Matrix:") print(result) result1 = classification_report(y_test, y_pred) print("Classification Report:",) print (result1) result2 = accuracy_score(y_test,y_pred) print("Accuracy:",result2)
輸出
Confusion Matrix: [[14 0 0] [ 0 18 1] [ 0 0 12]] Classification Report: precision recall f1-score support Iris-setosa 1.00 1.00 1.00 14 Iris-versicolor 1.00 0.95 0.97 19 Iris-virginica 0.92 1.00 0.96 12 micro avg 0.98 0.98 0.98 45 macro avg 0.97 0.98 0.98 45 weighted avg 0.98 0.98 0.98 45 Accuracy: 0.9777777777777777
使用隨機森林進行迴歸
要建立隨機森林迴歸,Scikit-learn 模組提供sklearn.ensemble.RandomForestRegressor。 在構建隨機森林迴歸器時,它將使用與sklearn.ensemble.RandomForestClassifier相同的引數。
實現示例
在以下示例中,我們使用sklearn.ensemble.RandomForestregressor構建隨機森林迴歸器,並使用 predict() 方法預測新值。
from sklearn.ensemble import RandomForestRegressor from sklearn.datasets import make_regression X, y = make_regression(n_features = 10, n_informative = 2,random_state = 0, shuffle = False) RFregr = RandomForestRegressor(max_depth = 10,random_state = 0,n_estimators = 100) RFregr.fit(X, y)
輸出
RandomForestRegressor( bootstrap = True, criterion = 'mse', max_depth = 10, max_features = 'auto', max_leaf_nodes = None, min_impurity_decrease = 0.0, min_impurity_split = None, min_samples_leaf = 1, min_samples_split = 2, min_weight_fraction_leaf = 0.0, n_estimators = 100, n_jobs = None, oob_score = False, random_state = 0, verbose = 0, warm_start = False )
擬合後,我們可以從迴歸模型中進行預測,如下所示:
print(RFregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
輸出
[98.47729198]
額外樹方法
對於正在考慮的每個特徵,它都會為分割選擇一個隨機值。 使用額外樹方法的好處是可以稍微減少模型的方差。 使用這些方法的缺點是它會稍微增加偏差。
使用額外樹方法進行分類
要使用額外樹方法建立分類器,Scikit-learn 模組提供sklearn.ensemble.ExtraTreesClassifier。 它使用與sklearn.ensemble.RandomForestClassifier相同的引數。 唯一的區別在於它們構建樹的方式,如上所述。
實現示例
在以下示例中,我們使用sklearn.ensemble.ExtraTreeClassifier構建隨機森林分類器,並使用cross_val_score模組檢查其準確性。
from sklearn.model_selection import cross_val_score from sklearn.datasets import make_blobs from sklearn.ensemble import ExtraTreesClassifier X, y = make_blobs(n_samples = 10000, n_features = 10, centers=100,random_state = 0) ETclf = ExtraTreesClassifier(n_estimators = 10,max_depth = None,min_samples_split = 10, random_state = 0) scores = cross_val_score(ETclf, X, y, cv = 5) scores.mean()
輸出
1.0
示例
我們還可以使用 sklearn 資料集使用額外樹方法構建分類器。 如下例所示,我們使用 Pima-Indian 資料集。
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import ExtraTreesClassifier path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8] seed = 7 kfold = KFold(n_splits=10, random_state=seed) num_trees = 150 max_features = 5 ETclf = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features) results = cross_val_score(ETclf, X, Y, cv=kfold) print(results.mean())
輸出
0.7551435406698566
使用額外樹方法進行迴歸
要建立額外樹迴歸,Scikit-learn 模組提供sklearn.ensemble.ExtraTreesRegressor。 在構建隨機森林迴歸器時,它將使用與sklearn.ensemble.ExtraTreesClassifier相同的引數。
實現示例
在以下示例中,我們應用sklearn.ensemble.ExtraTreesregressor,並使用與建立隨機森林迴歸器時相同的資料。 讓我們看看輸出有什麼不同。
from sklearn.ensemble import ExtraTreesRegressor from sklearn.datasets import make_regression X, y = make_regression(n_features = 10, n_informative = 2,random_state = 0, shuffle = False) ETregr = ExtraTreesRegressor(max_depth = 10,random_state = 0,n_estimators = 100) ETregr.fit(X, y)
輸出
ExtraTreesRegressor(bootstrap = False, criterion = 'mse', max_depth = 10, max_features = 'auto', max_leaf_nodes = None, min_impurity_decrease = 0.0, min_impurity_split = None, min_samples_leaf = 1, min_samples_split = 2, min_weight_fraction_leaf = 0.0, n_estimators = 100, n_jobs = None, oob_score = False, random_state = 0, verbose = 0, warm_start = False)
示例
擬合後,我們可以從迴歸模型中進行預測,如下所示:
print(ETregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
輸出
[85.50955817]