機器學習 決策樹

2021-10-17 16:03:37 字數 2717 閱讀 3838

1.decisiontree決策樹演算法及引數詳解+例項

1.決策樹演算法及過度擬合

決策樹兩大關鍵點:屬性如何分割(分支演算法) 及 過度擬合解決辦法

(1)演算法

決策樹歸納的基本演算法是貪心演算法,在每一步選擇中都採取在當前狀態下最好的選擇,在其生成過程中,分割方法即屬性選擇度量是關鍵。通過屬性選擇度量,選擇出最好的將樣本分類的屬性。

根據分割方法的不同,決策樹可以分為兩類:

(2)解決過度擬合:剪枝演算法

使用決策樹模型擬合資料時,容易產生過擬合。當訓練樣本評分很高而測試資料集評分較低,這明顯是過擬合的特徵,解決辦法是對決策樹進行剪枝處理。

決策樹剪枝有兩種思路:前剪枝 與 後剪枝

2.建模前準備

3.python建模

(1)第一步 清洗資料集、再準備訓練與測試樣本

from sklearn.cross_validation import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)

(2)第二步 擬合模型

from sklearn.tree import decisiontreeclassifier

clf = decisiontreeclassifier()

clf.fit(x_train, y_train)

print("train score:", clf.score(x_train, y_train)) #訓練樣本得分

print("test score:", clf.score(x_test, y_test)) #測試樣本得分

#模型**

clf.predict(x_test)

#**x為各個類別的概率對數值,僅decisiontreeclassifier分類決策樹可用

clf.predict_log_poba(x_test)

#**x為各個類別的概率值,僅decisiontreeclassifier分類決策樹可用

clf.predict_proba(x_test)

(3)第三步 優化模型引數

若訓練樣本評分很高而測試資料集評分較低,這明顯是過擬合的特徵

解決決策樹過擬合的方法是剪枝,包括前剪枝和後剪枝。但是sklearn不支援後剪枝,這裡通過max_depth引數限定決策樹深度,在一定程度上避免過擬合。

使用不同的模型深度訓練模型,並計算評分資料:

train_score=

test_score=

for i in range(1,10):

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)

clf = decisiontreeclassifier(max_depth=i)

clf.fit(x_train, y_train)

print("i:",i,"train score:", clf.score(x_train, y_train)) #訓練樣本得分

print("i:",i,"test score:", clf.score(x_test, y_test)) #測試樣本得分

這裡由於以上train_test_split方法對資料切分是隨機打散的,造成每次用不同的資料集訓練模型總得到不同的最佳深度。展示模型評分趨勢:

from matplotlib import pyplot as plt

df_train = pd.dataframe(train_score, columns=['id', 'score'])

df_test = pd.dataframe(test_score, columns=['id', 'score'])

plt.figure(figsize=(6,4), dpi=120) plt.grid()

plt.xlabel('max depth of decison tree')

plt.ylabel('scores')

plt.ylim((0, 1.5))

plt.plot( df_test ['id'], df_test ['score'] , label='test_scores')

plt.plot( df_train['id'], df_train['score'] , label='train_scores')

plt.legend()

plt.show()

#得出max_depth=5時,測試樣本評分最高,那麼取max_depth=5的模型

(4)第四步 生成決策樹圖形

from sklearn.tree import decisiontreeclassifier

from sklearn import tree

clf = decisiontreeclassifier()

clf = clf.fit(x_train, y_train)

train_score = clf.score(x_train, y_train)

test_score = clf.score(x_test, y_test)

print('train score: ; test score: '.format(train_score, test_score))

# 匯出 titanic.dot 檔案

with open("tree.dot", 'w') as f:

f = tree.export_graphviz(clf, out_file=f)

機器學習 決策樹

一 基本概念 決策樹 decision tree 是一種基本的分類與回歸方法。決策樹模型呈樹形結構,在分類問題中,表示屬於特徵對例項進行分類的過程,它可以認為是if then規則的集合,也可以認為是電議在特徵空間與類空空上的條件概率分布,其主要優點是模型具有可讀性,分類速度快。決策樹的學習通常包括3...

機器學習 決策樹

我覺得決策樹是機器學習所有演算法中最可愛的了 沒有那麼多複雜的數學公式哈哈 下圖是一棵決策樹,用來判斷西瓜是好瓜還是壞瓜 決策過程中提出的每個判定問題都是都對某個屬性的測試,每個測試結果要麼推導出最終結論,要麼匯出進一步判斷的問題,在上次決策結果限定的範圍內做進一步判斷。從上圖可以看出,葉節點對應決...

機器學習 決策樹

一 演算法簡介 決策樹一般都是自上而下來生成的,每個決策後事件 即自然狀態 都可能引出兩個或多個事件,導致結果的不同,把這種結構分支畫成形狀很像一棵樹的枝幹,故稱為決策樹。決策樹能夠讀取資料集合,並且決策樹很多任務都是為了資料中所蘊含的知識資訊,因此決策樹可以使用不熟悉的資料集合,並從中提取一系列規...