python初学者学习笔记(四)构建简单决策树

这是我个人的学习笔记,可能有错误,不要见怪,不过程序都是运行过的,可以用的。
这一篇记录的是在上一篇读取的excel表格的基础上构建一个决策树,顺便复习下决策树的构建,决策树可以是二叉树也可以是非二叉树,它从一个根节点开始,通过判断数据的属性,一直到到达叶子结点为止,叶子结点就是输出的结果,例如:
枪 血 子弹 攻击
1 1 1 1
0 1 0 0
0 0 0 0
1 0 1 1
其中1表示真,0表示假,是否攻击就是决策树的判断结果,这里我是通过判断信息增益来为数据分类的,哪个属性的信息增益最大,就把它当作根节点,事实上用sklearn也好像不需要知道得太多,就是一个语句搞定了…,下面是代码:

from sklearn import tree
import numpy as np
import pydotplus
from sklearn.externals.six import StringIO
from pyexcel_xls import get_data

一、 导入各种模块,从sklearn导入决策树有关的模块tree,导入pydotplus用来画图,导入pyexcel_xls用来读取excel文件

def read_xls_file():
    xls_data = get_data(r"G:\python 3.5.1\data\305_304_4.xls")
    print( "Get data type:", type(xls_data))
    xls_data = np.array(xls_data['Sheet2'])
    print(xls_data)
    return xls_data

def read_xls_file_1():
    xls_data = get_data(r"G:\python 3.5.1\data\305_304_5.xls")
    print( "Get data type:", type(xls_data))
    a = np.array(xls_data['Sheet1'])
    for i in range(1, 302):                                   #将第二个文件的数据二值化,作为labels
        if a[i] == 2:
            a[i] = 1
        if a[i] == 1:
            a[i] = 0
        if a[i] == 3:
            a[i] = 1
        print(a[i])                                           #输出测试下数据是否成功二值化
    return a

dataSet = read_xls_file()
labels = read_xls_file_1()

为了更直观的展示二叉树,还是用下面的简单数据演示吧:

dataSet = [[1, 1, 0], [1, 0, 1], [1, 0, 1], [1, 0, 1], [0, 0, 1], [0, 1, 0], [0, 1, 1], [0, 1, 1]]
labels = ['fight', 'fight', 'fight', 'fight', 'run', 'fight', 'run', 'run']

这个就是开头的例子的数据,是否有枪,是否有血,是否有子弹,决定是否攻击
二、构建决策树,其实只有两行代码

clf = tree.DecisionTreeClassifier(criterion='entropy')     
clf = clf.fit(dataSet, labels)

criterion默认是gini(不纯度),这里是entropy(信息增益),另外还有别的参数,splitter=’random’或者’best’(默认是best),表示分类策略;max_depth=’最大深度’;我只记得这几个了….
三、显示信息增益数值,也是只需要一行代码

print(clf.feature_importances_)

四、画图(这个pydotplus画图干脆和下一章的matplotlib的画图一起记录好了..)

dot_data = StringIO()
tree.export_graphviz(clf, out_file=dot_data, filled=True, rounded=True, special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_png('iris.png')

最后得出的决策树是这个样子的:
决策树

猜你喜欢

转载自blog.csdn.net/weixin_37608233/article/details/66474356
今日推荐