隨機森林分類和決策樹的對比

2021-10-09 21:25:29 字數 3708 閱讀 4824

%matplotlib inline

from sklearn.tree import decisiontreeclassifier

from sklearn.ensemble import randomforestclassifier

from sklearn.datasets import load_wine

wine = load_wine(

)wine.data # 特徵矩陣,不能為一維,要和標籤分開匯入

wine.target # 標籤,必須為一維,要和特徵矩陣分開匯入

from sklearn.model_selection import train_test_split

xtrain,xtest,ytrain,ytest = train_test_split(wine.data,wine.target,test_size=

0.3)

clf = decisiontreeclassifier(random_state=0)

# 例項化

rfc = randomforestclassifier(random_state=0)

# 例項化

clf = clf.fit(xtrain,ytrain)

# 訓練集帶入例項化後的模型去進行訓練,使用的介面是fit

rfc = rfc.fit(xtrain,ytrain)

# 訓練集帶入例項化後的模型去進行訓練,使用的介面是fit

score_c = clf.score(xtest,ytest)

# 使用其他介面score將測試集匯入我們訓練好的模型,去獲取我們希望獲取的結果(score、y_test)

score_r = rfc.score(xtest,ytest)

# 使用其他介面score將測試集匯入我們訓練好的模型,去獲取我們希望獲取的結果(score、y_test)

print

('single tree:{}'

.format

(score_c)

# format用於轉換資料型別

,'random forest:{}'

.format

(score_r)

)

from sklearn.model_selection import cross_val_score

import matplotlib.pyplot as plt

rfc = randomforestclassifier(n_estimators=25)

#n_estimators確定森林中樹的數目

rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10)

clf = decisiontreeclassifier(

)clf_s = cross_val_score(clf,wine.data,wine.target,cv=10)

plt.plot(

range(1

,11),rfc_s,label=

'randomforest'

)# 乙個plt.plot裡面只能有乙個標籤

plt.plot(

range(1

,11),clf_s,label=

'decisiontree'

)plt.legend(

)

label =

'randomforest'

for model in

[randomforestclassifier(n_estimators=25)

,decisiontreeclassifier()]

: score = cross_val_score(model,wine.data,wine.target,cv=10)

print

('{}:'

.format

(label)),

print

(score.mean())

plt.plot(

range(1

,11),score,label = label)

plt.legend(

) label =

'decisiontree'

superpa =

for i in

range

(200):

rfc = randomforestclassifier(n_estimators=i+

1,n_jobs =-1

)# n_jobs決定了使用的cpu核心個數,n_jobs = -1表示使用全部的cpu

rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10)

.mean(

)print

(max

(superpa)

,superpa.index(

max(superpa)))

# 0.9888888888888889 35,35+1棵樹效果最好

plt.figure(figsize =[20

,5])

plt.plot(

range(1

,201

),superpa)

import numpy as np

from scipy.special import comb

np.array(

[comb(

25,i)*(

0.2**i)*(

(1-0.2)**

(25-i))

for i in

range(13

,26)]

).sum(

)

for i in

range

(len

(rfc.estimators_)):

print

(rfc.estimators_[i]

.random_state)

# 檢視隨機森林中所有樹的隨機值

rfc = randomforestclassifier(n_estimators=

25,oob_score=

true

)# oob_score=true用袋外資料來進行測試

rfc = rfc.fit(wine.data,wine.target)

# 無需劃分訓練集和測試集

rfc.oob_score_ # 袋外資料測試結果

rfc.score(xtest,ytest)

# 測試集分數

rfc.feature_importances_ # 得出特徵的重要性數值

rfc.

(xtest)

# 樣本在這棵樹中所在的葉子節點的索引

rfc.predict(xtest)

# 返回對測試集**的標籤,此時為**值,ytest中為真實值

rfc.predict_proba(xtest)

# 樣本在這棵樹中被分類到各個標籤的概率

注意:當基分類器的誤差率小於0.5,即準確率大於0.5時,整合的效果是比基分類器要好的。相反,當基分類器的誤差率大於0.5,袋裝的整合演算法就失效了,所以在使用隨機森林之前,一定要檢查,用來組成隨機森林的分類樹們是否都有至少50%的**準確率。

決策樹和隨機森林

決策樹 建立決策樹的關鍵,是在當前狀態下選擇那個屬性作為分類依據。根據不同的目標函式,建立決策樹主要有三個演算法 id3 iterative dichotomiser c4.5 cart classification and regression tree 資訊增益 當熵和條件熵中的概率由資料統計得...

決策樹和隨機森林

c4.5 cart 2,工具 能夠將dot檔案轉換為pdf png 3,執行命令 缺點 改進 建立10顆決策樹,樣本,特徵大多不一樣 隨機又放回的抽樣 bootstrap boolean,optional default true 是否在構建樹時使用放回抽樣。隨機森林的優點 import panda...

Python 分類演算法(決策樹,隨機森林)

資訊熵的計算 條件熵的計算 決策樹分類器 criterion 預設是 gini 係數,也可以選擇資訊增益的熵 entropy max depth 樹的深度大小 random state 隨機數種子 method decision path 返回決策樹的路徑 在機器學習中 隨機森林 是乙個包含多個決策...