《Python數(shù)據(jù)挖掘入門與實(shí)踐》這本書中關(guān)于決策樹部分的講解,代碼部分相對(duì)簡(jiǎn)要击奶,但坑爹的是辈双,他給的數(shù)據(jù)下載網(wǎng)站,人家改版了柜砾,根本找不到數(shù)據(jù)湃望,進(jìn)行測(cè)試,于是我又用“鳶尾花”數(shù)據(jù)測(cè)試了一下決策樹算法局义。
閑話少說喜爷,直接上代碼。
1萄唇、導(dǎo)入鳶尾花數(shù)據(jù)
鳶尾花數(shù)據(jù)檩帐,可以直接從sklearn庫中進(jìn)行載入,分別將自變量和因變量另萤,賦值為x和y湃密。
from sklearn.datasets import load_iris
import numpy as np
import pandas as pd
X_data = load_iris().data
y_data = load_iris().target
2、設(shè)置訓(xùn)練集和測(cè)試集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_data, y_data)
3四敞、建立決策樹對(duì)象
from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier(max_leaf_nodes=4,random_state = 14)
max_leaf_nodes=4泛源,指保留最大節(jié)點(diǎn)的數(shù)量為4,可以理解為樹的深度為4忿危。
random_state = 14达箍,設(shè)置隨機(jī)種子為14,使用相同的隨機(jī)種子能包粽子幾次的實(shí)驗(yàn)結(jié)果相同铺厨。但是缎玫,在自己的實(shí)驗(yàn)中,為保證隨機(jī)性解滓,可以設(shè)置不同的隨機(jī)種子赃磨。
4、訓(xùn)練并預(yù)測(cè)
dtc.fit(X_train,y_train) #用訓(xùn)練集進(jìn)行訓(xùn)練
y_predict = dtc.predict(X_test) # 利用測(cè)試數(shù)據(jù)生成預(yù)測(cè)值y_predict
# 判斷與訓(xùn)練集y是否相等并返回正確率
accuracy = np.mean(y_predict == y_test)*100
print('準(zhǔn)確率為%.2f%%' % accuracy)
得出的結(jié)果:準(zhǔn)確率為97.37%
5洼裤、得到?jīng)Q策樹圖
導(dǎo)入export_graphviz邻辉,生成dot文件
from sklearn.tree import export_graphviz
export_graphviz(clf,out_file = 'tree0.dot')
生成dot文件后,用GVEdit命令轉(zhuǎn)化成png格式或者其他格式腮鞍。
首先安裝graphviz-2.38值骇,然后設(shè)置環(huán)境變量(本人是windows環(huán)境下運(yùn)行的),然后敲下如下命令即可轉(zhuǎn)化成png格式的樹圖缕减。
dot -Tpng tree0.dot -o tree0.png
生成的樹圖如下所示:
由上圖可知雷客,此次創(chuàng)建決策用的是信息增益熵,主要用到兩個(gè)特征桥狡,即X[2]和X[3]搅裙。
根節(jié)點(diǎn)處X[2]小于等于2.45的為一類皱卓,且均為第一類鳶尾花
X[2]大于2.45,且X[3]大于1.75的為一類部逮,且大部分為第三類鳶尾花娜汁,只有一個(gè)樣本為第二類鳶尾花。
X[3]小于等于1.75兄朋,且X[2]小于等于4.95的為一類掐禁,且大部分為第二類鳶尾花,只有一個(gè)樣本為第三類鳶尾花颅和。
X[3]小于等于1.75傅事,且X[2]大于4.95的為一類,有2個(gè)為第二類峡扩,有4個(gè)為第三類鳶尾花蹭越。