MySQL的學習(一)-DQL語言的學習
阿新 • • 發佈:2020-12-16
決策樹
認識決策樹
決策樹思想的來源非常樸素,程式設計中的條件分支結構就是if-else
結構,最早的決策樹就是利用這類結構分割資料的一種分類學習方法
怎麼理解這句話?通過一個對話例子
比如:你母親要給你介紹男朋友,是這麼來對話的:
- 女兒:多大年紀了?
- 母親:26。
- 女兒:長的帥不帥?
- 母親:挺帥的。
- 女兒:收入高不?
- 母親:不算很高,中等情況。
- 女兒:是公務員不?
- 母親:是,在稅務局上班呢。
- 女兒:那好,我去見見。
想一想這個女生為什麼把年齡放在最上面判斷!!!!!!!!!!!!!!
**決策樹的思想:**如何高效的進行決策?——特徵的先後順序
那麼如何確定特效的先後順序呢?
決策樹分類原理詳解
原理
資訊煽、資訊增益等
需要用到資訊理論的知識!!!
資訊理論基礎
- 資訊
- 消除隨機不確定性的的東西
- 例如:小明的年齡
- ”我今年18歲“ —— 資訊
- ”我明年19歲“ —— 不是資訊
- 資訊的衡量 —— 資訊量 —— 資訊熵
資訊適的定義
- H的專業術語稱之為資訊炯,單位為位元(bit)。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-asCysUwX-1608431730837)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20201219232312280.png)]
決策樹的劃分依據之— —— 資訊增益
- 定義與公式
特徵A對訓練資料集D的資訊增益g(D,A),定義為集合D的資訊煽H(D)與特徵A給定條件下D的資訊條件煽H(D|A)之差
公式為:g(D,A) = H(D) - H(D|A)
資訊熵計算:
條件熵的計算:
注:
- Ck 表示某個樣本類別的樣本數
- 資訊增益表示得知特徵X的資訊而息的不確定性減少的程度使得類Y的資訊熵減少程度
當然決策樹的原理不止資訊增益這一種,還有其他方法。但是原理都類似,我們就不去舉例計算。
- ID3
- 資訊增益 最大的準則
- C4.5
- 資訊增益比 最大的準則
- CART
- 分類樹:基尼係數 最小的準則在
sklearn
中可以選擇劃分的預設原則 - 優勢:劃分更加細緻(從後面例子的樹顯示來理解)
決策樹API
class sklearn.tree.DecisionTreeClassifier(criterion='gini', max_depth=None,random_state=None)
- 決策樹分類器
criterion:
決策樹的劃分依據,預設是gini
係數,也可以選擇資訊增益的熵entropy
。max_depth:
樹的深度大小,不設定的話資料量過大,使得決策樹劃分太細,泛化能力差,可能訓練資料效果好,測試資料就不好了random_state:
隨機數種子
決策樹預測鳶尾花資料集
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
if __name__ == '__main__':
# 獲取資料
iris = load_iris()
# 劃分資料集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=4)
# 決策樹 演算法預估器
estimator = DecisionTreeClassifier(criterion='entropy')
estimator.fit(x_train, y_train)
# 模型評估
# 方法一:直接對比真實值和預測值
y_predict = estimator.predict(x_test)
print('y_predict:\n', y_predict)
print('直接對比真實值和預測值:\n', y_test == y_predict)
# 方法二:計算準確率
score = estimator.score(x_test, y_test)
print('準確率:\n', score)
決策樹視覺化
儲存樹的結構到dot檔案
sklearn.tree.export_graphviz()
該函式能夠匯出DOT
格式tree.export_graphviz(estimator,out_file='tree.dot',feature_names=[])
dot 檔案當中內容如下:
digraph Tree {
node [shape=box] ;
0 [label="petal width (cm) <= 0.8\nentropy = 1.576\nsamples = 112\nvalue = [32, 42, 38]"] ;
1 [label="entropy = 0.0\nsamples = 32\nvalue = [32, 0, 0]"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="petal width (cm) <= 1.75\nentropy = 0.998\nsamples = 80\nvalue = [0, 42, 38]"] ;
0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
3 [label="petal length (cm) <= 4.95\nentropy = 0.433\nsamples = 45\nvalue = [0, 41, 4]"] ;
2 -> 3 ;
4 [label="petal width (cm) <= 1.65\nentropy = 0.165\nsamples = 41\nvalue = [0, 40, 1]"] ;
3 -> 4 ;
5 [label="entropy = 0.0\nsamples = 40\nvalue = [0, 40, 0]"] ;
4 -> 5 ;
6 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 0, 1]"] ;
4 -> 6 ;
7 [label="petal width (cm) <= 1.65\nentropy = 0.811\nsamples = 4\nvalue = [0, 1, 3]"] ;
3 -> 7 ;
8 [label="entropy = 0.0\nsamples = 3\nvalue = [0, 0, 3]"] ;
7 -> 8 ;
9 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1, 0]"] ;
7 -> 9 ;
10 [label="petal length (cm) <= 4.85\nentropy = 0.187\nsamples = 35\nvalue = [0, 1, 34]"] ;
2 -> 10 ;
11 [label="sepal length (cm) <= 5.95\nentropy = 0.918\nsamples = 3\nvalue = [0, 1, 2]"] ;
10 -> 11 ;
12 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1, 0]"] ;
11 -> 12 ;
13 [label="entropy = 0.0\nsamples = 2\nvalue = [0, 0, 2]"] ;
11 -> 13 ;
14 [label="entropy = 0.0\nsamples = 32\nvalue = [0, 0, 32]"] ;
10 -> 14 ;
}
網站顯示結構
http://webgraphviz.com/
決策樹總結
- 優點:
- 簡單的理解和解釋,樹木視覺化。
- 缺點:
- 決策樹學習者可以建立不能很好地推廣資料的過於複雜的樹,這被稱為過擬合
- 改進:
- 減枝
cart
演算法(決策樹API
當中已經實現,隨機森林
引數調優有相關介紹)。 - 隨機森林
- 減枝
注:企業重要決策,由於決策樹很好的分析能力,在決策過程應用較多, 可以選擇特徵