決策樹在sklearn中的實現
小夥伴們大家好~o( ̄▽ ̄)ブ,首先宣告一下,我的開發環境是Jupyter lab,所用的庫和版本大家參考:
Python 3.7.1(你的版本至少要3.4以上
Scikit-learn 0.20.0 (你的版本至少要0.20
Graphviz 0.8.4 (沒有畫不出決策樹哦,安裝程式碼conda install python-graphviz
Numpy 1.15.3, Pandas 0.23.4, Matplotlib 3.0.1, SciPy 1.1.0
- 決策樹是如何工作的
決策樹(Decision Tree)是一種非引數的有監督學習方法,它能夠從一系列有特徵和標籤的資料中總結出決策規則,並用樹狀圖的結構來呈現這些規則,以解決分類和迴歸問題。決策樹演算法容易理解,適用各種資料,在解決各種問題時都有良好表現,尤其是以樹模型為核心的各種整合演算法,在各個行業和領域都有廣泛的應用。
我們來簡單瞭解一下決策樹是如何工作的。決策樹演算法的本質是一種圖結構,我們只需要問一系列問題就可以對資料進行分類了。比如說,來看看下面這組資料集,這是一系列已知物種以及所屬類別的資料:
我們現在的目標是,將動物們分為哺乳類和非哺乳類。那根據已經收集到的資料,決策樹演算法為我們算出了下面的這棵決策樹:
假如我們現在發現了一種新物種Python,它是冷血動物,體表帶鱗片,並且不是胎生,我們就可以通過這棵決策樹來判斷它的所屬類別。
可以看出,在這個決策過程中,我們一直在對記錄的特徵進行提問。最初的問題所在的地方叫做根節點,在得到結論前的每一個問題都是中間節點,而得到的每一個結論(動物的類別)都叫做葉子節點。
關鍵概念:節點
根節點:沒有進邊,有出邊。包含最初的,針對特徵的提問。 中間節點:既有進邊也有出邊,進邊只有一條,出邊可以有很多條。都是針對特徵的提問。 葉子節點:有進邊,沒有出邊,每個葉子節點都是一個類別標籤。 *子節點和父節點:在兩個相連的節點中,更接近根節點的是父節點,另一個是子節點。
2. 決策樹演算法的核心是什麼
決策樹演算法的核心是要解決兩個問題:
1)如何從資料表中找出最佳節點和最佳分枝?
2)如何讓決策樹停止生長,防止過擬合?
幾乎所有決策樹有關的模型調整方法,都圍繞這兩個問題展開。這兩個問題背後的原理十分複雜,我會在講解模型引數和屬性的時候為大家簡單解釋涉及到的部分。在這裡,我會盡量避免讓大家太過深入到決策樹複雜的原理和數學公式中(儘管決策樹的原理相比其他高階的演算法來說是非常簡單了),專注於實踐和應用。
- sklearn中的決策樹
模組sklearn.tree
sklearn中決策樹的類都在”tree“這個模組之下。這個模組總共包含五個類:
tree.DecisionTreeClassifier 分類樹
tree.DecisionTreeRegressor 迴歸樹
tree.export_graphviz 將生成的決策樹匯出為DOT格式,畫圖專用
tree.ExtraTreeClassifier 高隨機版本的分類樹
tree.ExtraTreeRegressor 高隨機版本的迴歸樹
我們會主要講解分類樹和迴歸樹,並用影像呈現給大家。
sklearn的基本建模流程
在那之前,我們先來了解一下sklearn建模的基本流程。
在這個流程下,分類樹對應的程式碼是:
from sklearn import tree #匯入需要的模組
clf = tree.DecisionTreeClassifier() #例項化
clf = clf.fit(X_train,y_train) #用訓練集資料訓練模型
result = clf.score(X_test,y_test) #匯入測試集,從介面中呼叫需要的資訊
- 分類決策樹的實現
classsklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)
這裡以SKlearn自帶的紅酒資料集為例,畫一棵分類決策樹。
#匯入需要的演算法庫和模組
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
探索資料
wine = load_wine()
wine.data
wine.data.shape
wine.target
wine.target.shape
如果wine是一張表,應該長這樣:
import pandas as pd
pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
wine.feature_names
wine.target_names
切分訓練集和測試集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3)
Xtrain.shape
Xtest.shape
建立模型
clf = tree.DecisionTreeClassifier()
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) #返回預測的準確度
score
繪製樹
import graphviz
feature_name = ['酒精','蘋果酸','灰','灰的鹼性','鎂','總酚','類黃酮','非黃烷類酚類','花青素','顏色強度','色調','od280/od315稀釋葡萄酒','脯氨酸']
dot_data = tree.export_graphviz(clf
,out_file=None
,feature_names= feature_name
,class_names=["琴酒","雪莉","貝爾摩德"]
,filled=True
,rounded=True
)
graph = graphviz.Source(dot_data)
graph
最後繪製出來的樹就長這個樣子:
相關文章
- 機器學習之決策樹在sklearn中的實現機器學習
- 機器學習|決策樹-sklearn實現機器學習
- 機器學習Sklearn系列:(三)決策樹機器學習
- 機器學習之決策樹原理和sklearn實踐機器學習
- 機器學習之使用sklearn構造決策樹模型機器學習模型
- SKlearn中分類決策樹的重要引數詳解
- 【Python機器學習實戰】決策樹和整合學習(二)——決策樹的實現Python機器學習
- 機器學習——決策樹模型:Python實現機器學習模型Python
- 決策樹演算法的推理與實現演算法
- Reinventing the wheel:決策樹演算法的實現演算法
- 決策樹在機器學習的理論學習與實踐機器學習
- 決策樹模型(3)決策樹的生成與剪枝模型
- 機器學習之 決策樹(Decision Tree)python實現機器學習Python
- 決策樹
- 【機器學習】實現層面 決策樹 並用graphviz視覺化樹機器學習視覺化
- 《機器學習Python實現_09_02_決策樹_CART》機器學習Python
- 機器學習之決策樹ID3(python實現)機器學習Python
- 《統計學習方法》——從零實現決策樹
- 機器學習:決策樹機器學習
- 決策樹示例
- 機器學習-決策樹機器學習
- 從決策樹到隨機森林:樹型演算法的原理與實現隨機森林演算法
- 決策樹中結點的特徵選擇方法特徵
- 《機器學習實戰》決策樹(ID3演算法)的分析與實現機器學習演算法
- Python機器學習:決策樹001什麼是決策樹Python機器學習
- 決策樹演算法-實戰篇演算法
- 機器學習——決策樹模型機器學習模型
- 機器學習之決策樹機器學習
- 關於決策樹的理解
- 決策樹ID3分類演算法的C++實現演算法C++
- 決策樹ID3演算法python實現 -- 《機器學習實戰》演算法Python機器學習
- 04 ML 決策樹入門 ID3 演算法實現演算法
- 分類——決策樹模型模型
- 決策樹演算法演算法
- 機器學習筆記--決策樹機器學習筆記
- 實時智慧決策引擎在螞蟻金服風險管理中的實踐
- 機器學習西瓜書吃瓜筆記之(二)決策樹分類 附一鍵生成決策樹&視覺化python程式碼實現機器學習筆記視覺化Python
- 經典的決策樹演算法演算法