基于sklearn的决策树python3

来源:互联网 发布:windows pagefile.sys 编辑:程序博客网 时间:2024/06/05 05:47

首先读取数据,使用的是隐形眼镜数据集。进行数据预处理。

import numpy as npfrom sklearn.feature_extraction import DictVectorizerdata   = []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全为0y[labels =='hard']=1#当label等于这三种属性的话,设置为1。y[labels =='soft']=1vec = DictVectorizer()#转换字符串数据类型dx = vec.fit_transform(x).toarray()

查看数据如下:dx数据
y的数据如图
调用sklearn的决策树,使用默认参数,即CART。

from sklearn.tree import DecisionTreeClassifierclf=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_reportpredictions = clf.predict(dx)print(classification_report(y, predictions))

结果如下:混淆矩阵
最后生成决策树:

from sklearn import treetree.export_graphviz(clf,out_file='tree.dot')

将dot文件转为jpg格式:在命令窗口中输入dot -Tjpg tree.dot -o tree.jpg即可。在jupyter notebook查看:

%pylab inlinefrom IPython.display import ImageImage('tree.jpg')

图片如下:tree
本节结束,下一篇将学习如何实现决策树参数的网格化搜索以及随机森林的实现。

原创粉丝点击