首先读取数据,使用的是隐形眼镜数据集。进行数据预处理。
import numpy as np
from sklearn.feature_extraction import DictVectorizer
data = []
labels = []
with open("lenses.txt") as ifile:
for line in ifile:
rowDict = {}#data需要是字典形式,因为之后需要使用DictVectorizer()修改字符串数据类型,以便符合DecisionTreeClassifier()
tokens = line.strip().split('\t')
rowDict['age']=tokens[0]#分割数据,将label与data分开
rowDict['prescript']=tokens[1]
rowDict['astigmatic']=tokens[2]
rowDict['tearRate']=tokens[3]
data.append(rowDict)
labels.append(tokens[-1])
x = np.array(data)
labels = np.array(labels)
y = np.zeros(labels.shape)#初始label全为0
y[labels =='hard']=1#当label等于这三种属性的话,设置为1。
y[labels =='soft']=1
vec = DictVectorizer()#转换字符串数据类型
dx = vec.fit_transform(x).toarray()
查看数据如下:
调用sklearn的决策树,使用默认参数,即CART。
from sklearn.tree import DecisionTreeClassifier
clf=DecisionTreeClassifier()
clf.fit(dx,y)
生成的决策树如下:
DecisionTreeClassifier(class_weight=None, criterion=’gini’, max_depth=None,
max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort=False, random_state=None,
splitter=’best’)
查看预测结果,并生成混淆矩阵:
from sklearn.metrics import classification_report
predictions = clf.predict(dx)
print(classification_report(y, predictions))
结果如下:
最后生成决策树:
from sklearn import tree
tree.export_graphviz(clf,out_file='tree.dot')
将dot文件转为jpg格式:在命令窗口中输入dot -Tjpg tree.dot -o tree.jpg即可。在jupyter notebook查看:
%pylab inline
from IPython.display import Image
Image('tree.jpg')
图片如下:
本节结束,下一篇将学习如何实现决策树参数的网格化搜索以及随机森林的实现。