〖原視頻地址〗
分類(lèi)器有很多種,比如神經(jīng)網(wǎng)絡(luò)、或支持向量機(jī),決策樹(shù)則是其中之一。決策樹(shù)一大特點(diǎn)便是簡(jiǎn)單易讀,便于理解。實(shí)際上,決策樹(shù)是為數(shù)不多的可解釋的分類(lèi)器。你可以徹底理解為什么這個(gè)分類(lèi)器做出了這樣的選擇。
鳶尾花數(shù)據(jù)
這節(jié)課使用一組真實(shí)的數(shù)據(jù)集-鳶尾花數(shù)據(jù)?!傍S尾花”是一個(gè)典型的機(jī)器學(xué)習(xí)問(wèn)題。在這個(gè)問(wèn)題中,我們使用不同的測(cè)量標(biāo)準(zhǔn),例如花瓣的寬度、長(zhǎng)度來(lái)辨別是哪種鳶尾花。在數(shù)據(jù)集里有三種不同的鳶尾花,山鳶尾、變色鳶尾、青龍鳶尾。
數(shù)據(jù)集中每種花有50個(gè)樣本,所以共有150個(gè)樣本。每個(gè)樣本有四個(gè)特征值來(lái)描述,分別是萼片和花瓣的長(zhǎng)度和寬度。每行數(shù)據(jù)的前面四列是特征值,最后一列是本行鳶尾花數(shù)據(jù)的種類(lèi),也就是標(biāo)簽。

本節(jié)課的目標(biāo)就是通過(guò)決策器訓(xùn)練這些數(shù)據(jù),然后可視化分類(lèi)器的決策過(guò)程。
導(dǎo)入數(shù)據(jù)
scikit-learn 提供了一系列的樣本數(shù)據(jù)集,我們可以很方便的導(dǎo)入到項(xiàng)目中。
from sklearn.datasets import load_iris
iris = load_iris()
拆分?jǐn)?shù)據(jù)
我們需要 從樣本數(shù)據(jù)中抽取部分?jǐn)?shù)據(jù)作為驗(yàn)證的測(cè)試數(shù)據(jù),剩余數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)。
test_index = [0, 50, 100]
# traing data
train_target = np.delete(iris.target, test_index)
train_data = np.delete(iris.data, test_index, axis=0)
這里我們用到了 Numpy。Numpy - 是Python語(yǔ)言的一個(gè)擴(kuò)充程序庫(kù),支持高級(jí)大量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫(kù)。
我們先導(dǎo)入 Numpy,這個(gè)庫(kù)包含在 anaconda3-4.4.0 中。
import numpy as np
訓(xùn)練數(shù)據(jù)
這部分和第一課的代碼是一致的。
# testing data
test_target = iris.target[test_index]
test_data = iris.data[test_index]
clf = tree.DecisionTreeClassifier()
clf.fit(train_data, train_target)
print(test_target)
print(clf.predict(test_data))
可視化決策樹(shù)
本課最關(guān)鍵的部分就是如何將決策樹(shù)做出判斷的過(guò)程可視化,需要用到 graphviz 和 pydotplus。
可視化代碼如下:
# viz code
dot_data = StringIO()
tree.export_graphviz(clf,
out_file=dot_data,
feature_names=iris.feature_names,
class_names=iris.target_names,
filled=True, rounded=True,
impurity=False)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf('iris.pdf')
我們最終將生成 iris.pdf 的決策圖,如下:

B 站視頻網(wǎng)址
我順便把 youtube 的視頻嵌上字幕后上傳到了 B 站,網(wǎng)址在 這里