3 決策樹的減枝處理
4 決策樹中的連續值和缺失值
5 多變數的決策樹
6 sklearn中的決策樹
總結決策樹(decision tree):是一種基本的分類與回歸方法,此處主要討論分類的決策樹。
但是對於決策樹回歸,跟決策樹分類差不多,是在決策樹分類的基礎下,獲取各各葉子結點(類)的均值。
1) 構建根節點,將所有訓練資料都放在根節點,根據某種演算法選擇乙個最優特徵,按著這一特徵將訓練資料集分割成子集,使得各個子集有乙個在當前條件下最好的分類。
2) 如果這些子集已經能夠被基本正確分類,那麼構建葉節點,並將這些子集分到所對應的葉節點去。
3)如果還有子集不能夠被正確的分類,選取子集選擇新的最優特徵,繼續對其進行分割,構建相應的節點,如此遞迴,直至所有訓練資料子集被基本正確的分類,或者沒有合適的特徵為止。
4)每個子集都被分到葉節點上,即都有了明確的類,這樣就生成了一顆決策樹。
簡單一句話就是:劃分前的資訊熵–劃分後的資訊熵。表示的是向純度方向邁出的「步長」。
舉個例子
**資訊
資訊增益率
舉個例子:
計算income的增益率
由上面gain(income)=0.029。因此gainratio(income)= 0.029/1.557 = 0.019
分為預減枝和後減枝
預減枝:在劃分前計算該劃分前後的驗證精度(通過驗證集對該樹進行驗證),若精度不提公升則減枝,否者不減枝
後減枝:在樹生成後進行減枝,計算減枝後的驗證精度是否提公升,來判斷減不減枝
開始之前先思考第乙個為問題?當樣本資料**現連續值和缺失值,決策樹是怎麼處理的?
對於特徵(列)中的連續值處理:
1)對該連續值按小到大排序
2)依次選取左右兩個點的中間值,形成n-1個劃分結點
3)在這些劃分結點中選擇最有效的劃分結點
首先讓我們看看,正常的決策樹是長這樣
多變數決策樹長這樣
對比前後,實際上原來的化分類別的是關於軸(x和y)平行的,現在變為線/曲線
這線是怎麼出來的?實質上在各各變數間建立了乙個關係函式,再以此分類
思考第二個問題,若資料集**現缺失值,決策樹又是怎麼處理的?
由上面可以看出,對於缺失值的處理就是在原資訊增益的基礎上進行推廣,計算含缺失值的資訊增益。
對於sklearn中的模型基本上就分為以下3步驟:
第1步:匯入模型,並確定模型引數為了方便理解,這裡使用sklearn中的load_iris資料集舉例,模型3步驟:第2步:新增訓練模型
第3步:對訓練後的模型進行樣本**/平均精度
### 虹膜資料集構建樹
from sklearn.datasets import load_iris
from sklearn import tree
x, y = load_iris(return_x_y=true)
## 第1步:匯入模型,並確定模型引數
clf = tree.decisiontreeclassifier(
)## 第2步:新增資料訓練模型
clf = clf.fit(x, y)
## 第3步:對訓練後的模型進行樣本**/平均精度
#這裡可以呼叫函式檢視模型的屬性,或者**樣本型別等
print(
"訓練集樣本平均精度"+str(clf.score(x,y))
)
對於屬性劃分:
資訊增益:
缺點:如果考慮編號為一屬性,每個分支節點僅包含乙個樣本,這些分支節點的純度已經最大,然而,這樣的決策樹顯然不具有泛化能力,無法對新樣本進行有效**。
資訊增益比:
是資訊增益上的改進,採用資訊增益率替代資訊增益。
基尼係數:
以基尼係數替代熵,最小化不純度,而不是最大化資訊增益。
對於樹減枝:
預剪枝基於"貪心"本質禁止這些分支展開,給預剪枝決策樹帶來欠擬合的風險.
後剪枝決策樹欠擬合風險很小,泛化效能往往優於預剪枝決策樹,但是訓練時間開銷比未剪枝決策樹
和預剪枝決策樹都要大得多
參考文獻
《機器學習》 --周志華
《資料探勘概念與技術》 中文版的
白話決策樹
有一天,小明無聊,對宿舍玩cs的舍友進行統計,結果剛記下四行,被舍友認為影響發揮,給踢到床下去了,讓我們看看可憐的小明的記錄 子彈數量 血 行為 機槍 多 少 戰鬥 機槍 少 多 逃跑 小刀 少 多 戰鬥 小刀 少 少 逃跑 為了對得起小明記錄的這四條記錄,我們對其進行決策樹分析,從資料中看 1.如...
mysql用大白話解釋 大白話說說mysql索引
前面其實寫了好幾篇關於 mysql 索引的文章了,文章中有具體的例項和 sql 語句,這篇文章我想再用純大白話講講 mysql 索引,文中不涉及具體 sql 我之前甚至想過為啥要用資料庫來儲存資料,用普通的 txt 或者 word 這類檔案不行麼,這個問題其實可以從幾個方面來看,乙個是併發訪問資料加...
快速排序(大白話)
假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方便,就讓第乙個數6作為基準數吧。接下來,需要將這個序列中所有比基準數大的數放在6的右邊,比基準數小的數...