python 数据挖掘(9)-- 决策树

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32023541/article/details/81565181

决策树用在分类的问题上,说白了就是根据属性判断某一类别的问题。决策树的核心是什么?打个比方,如果今天下雨,我就去超市,如果超市没有关门,我就买苹果。假设把结果分成两类,买苹果和不买苹果。则分为下:

这就是决策树,但是问题来了,这是我买苹果的决策树。但是如果不知道我的规则,只给一堆用户数据,比如告诉你天气和超市是否关门(忘记关门肯定买不了这个常识吧,也可以换成其他的因素)然后给出一大堆买苹果和不买苹果的结果。我们要怎么得到上图的这种决策树?要知道,怎么才能从数据中看出来天气是根节点?

如果是更复杂的场景,给你一系列的变量属性,每个属性也可能不止两个值。从一系列属性中根据某种规则(比如最大信息增益)找出最佳的属性作为根节点,在从根节点往下找出其余最佳的属性作为它的根节点,依次循环,直到属性不可再分。这样就得到了一个树状的判断图,这就是决策树的核心。

最佳属性的获取规则如下:

(1)首先计算总的信息熵值:根据信息论,信息值为下:

  

(2)计算每个属性的信息熵:

          假设属性有 k 种取值,

(3)选择最大信息增益的属性作为根节点

       

就这样在选取根节点后,在循环往复的在根节点一下再继续按此规则选择下一根节点,直到决策树成形。

以上展示了根据苹果买卖数据,决策树形成的过程,选取 天气为根节点。

用销量数据 sales_data.xls 生成决策树代码如下:

#-*- coding:utf-8 -*-
import pandas as pd

filename = 'wajue/sales_data.xls'
data = pd.read_excel(filename,index_col = u"序号")

# 数据是类别标签,要转化成数据
# 用 1 表示好,是,高 这三种属性,用 -1 来表示 坏 否 低
data[data == u"好"] = 1
data[data == u"是"] = 1
data[data == u"高"] = 1
data[data != 1] = -1

# 属性数据矩阵
x_copy = data.iloc[:,:3]
x = data.iloc[:,:3].as_matrix().astype(int)
# 销量类别矩阵
y = data.iloc[:,3].as_matrix().astype(int)

# 引入决策树分类器 DTC
from sklearn.tree import DecisionTreeClassifier as DTC
# 基于信息熵建立决策树模型
dtc = DTC(criterion = 'entropy')
dtc.fit(x,y)

# 导入相关函数,可视化决策时
from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO
with open("wajue/tree.dot","w") as f:
    f = export_graphviz(dtc,feature_names = x_copy.columns,out_file = f)

tree.dot 如下

猜你喜欢

转载自blog.csdn.net/qq_32023541/article/details/81565181