基于sklearn的决策树python3

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

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()

查看数据如下:dx数据
y的数据如图
调用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')

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

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值