scikit-learn決策樹算法類庫內部實現是使用了調優過的CART樹算法,既可以做分類,又可以做回歸。分類決策樹的類對應的是DecisionTreeClassifier,而回歸決策樹的類對應的是DecisionTreeRegressor。兩者的參數定義幾乎完全相同,但是意義不全相同。下面就對DecisionTreeClassifier和DecisionTreeRegressor的重要參數做一個總結,重點比較兩者參數使用的不同點和調參的注意點。
DecisionTreeClassifier和DecisionTreeClassifier 重要參數調參注意點
為了便於比較,這裡我們用表格的形式對DecisionTreeClassifier和DecisionTreeRegressor重要參數要點做一個比較。
1)當樣本少數量但是樣本特徵非常多的時候,決策樹很容易過擬合,一般來說,樣本數比特徵數多一些會比較容易建立健壯的模型
2)如果樣本數量少但是樣本特徵非常多,在擬合決策樹模型前,推薦先做維度規約,比如主成分分析(PCA),特徵選擇(Losso)或者獨立成分分析(ICA)。這樣特徵的維度會大大減小。再來擬合決策樹模型效果會好。
3)推薦多用決策樹的可視化(下節會講),同時先限制決策樹的深度(比如最多3層),這樣可以先觀察下生成的決策樹裡數據的初步擬合情況,然後再決定是否要增加深度。
4)在訓練模型先,注意觀察樣本的類別情況(主要指分類樹),如果類別分布非常不均勻,就要考慮用class_weight來限制模型過於偏向樣本多的類別。
5)決策樹的數組使用的是numpy的float32類型,如果訓練數據不是這樣的格式,算法會先做copy再運行。
6)如果輸入的樣本矩陣是稀疏的,推薦在擬合前調用csc_matrix稀疏化,在預測前調用csr_matrix稀疏化。
決策樹可視化化可以方便我們直觀的觀察模型,以及發現模型中的問題。這裡介紹下scikit-learn中決策樹的可視化方法。
import matplotlib.pyplot as plt%matplotlib inlineimport numpy as npimport pandas as pdfrom sklearn.datasets import load_irisfrom sklearn import tree
iris = load_iris()
clf = tree.DecisionTreeClassifier()clf = clf.fit(iris.data, iris.target)with open("iris.dot", 'w') as f: f = tree.export_graphviz(clf, out_file=f) from IPython.display import Image import pydotplus
dot_datadot_dat = tree.export_graphviz(clf, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png())
dot_data = tree.export_graphviz(clf, out_file=None)graph = pydotplus.graph_from_dot_data(dot_data) graph.write_pdf("iris.pdf")scikit-learn中決策樹的可視化一般需要安裝graphviz。主要包括graphviz的安裝和python的graphviz插件的安裝。
第一步是安裝graphviz。下載地址在:http://www.graphviz.org/。如果你是linux,可以用apt-get或者yum的方法安裝。如果是windows,就在官網下載msi文件安裝。無論是linux還是windows,裝完後都要設置環境變量,將graphviz的bin目錄加到PATH,比如我是windows,將C:/Program Files (x86)/Graphviz2.38/bin/加入了PATH
第二步是安裝python插件graphviz: pip install graphviz
第三步是安裝python插件pydotplus。這個沒有什麼好說的: pip install pydotplus
這樣環境就搭好了,有時候python會很笨,仍然找不到graphviz,這時,可以在代碼裡面加入這一行:
注意後面的路徑是你自己的graphviz的bin目錄。
from sklearn.datasets import load_irisfrom sklearn import treeimport sysimport os os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'接著載入sciki-learn的自帶數據,有決策樹擬合,得到模型:
這時候我們有3種可視化方法,第一種是用graphviz的dot命令生成決策樹的可視化文件,敲完這個命令後當前目錄就可以看到決策樹的可視化文件iris.pdf.打開可以看到決策樹的模型圖。
第二種方法是用pydotplus生成iris.pdf。這樣就不用再命令行去專門生成pdf文件了。
第三種辦法是個人比較推薦的做法,因為這樣可以直接把圖產生在ipython的notebook。代碼如下:
這裡給一個限制決策樹層數為4的DecisionTreeClassifier例子。
from itertools import product
import numpy as npimport matplotlib.pyplot as plt
from sklearn import datasetsfrom sklearn.tree import DecisionTreeClassifier
iris = datasets.load_iris()X = iris.data[:, [0, 2]]y = iris.target
clf = DecisionTreeClassifier(max_depth=4)clf.fit(X, y)
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)plt.show()from IPython.display import Image from sklearn import treeimport pydotplus dot_data = tree.export_graphviz(clf, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data) Image(graph.create_png())點擊下方圖片即可閱讀
那麼如何了解線性回歸的原理和算法呢?
分類算法評估中的「它們」有什麼用處?
學好Scikit-Learn,
於是你默默地推了一下酷酷的墨鏡【上篇】
如果你也有想分享的乾貨,可以登錄天池實驗室(notebook),包括賽題的理解、數據分析及可視化、算法模型的分析以及一些核心的思路等內容。
小天會根據你分享內容的數量以及程度,給予豐富的神秘天池大禮以及糧票獎勵。分享成功後你也可以通過下方釘釘群👇主動聯繫我們的社區運營同學(釘釘號: yiwen1991)
天池寶貝們有任何問題,可在戳「留言」評論或加入釘釘群留言,小天會認真傾聽每一個你的建議!