前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习之决策树(上)

机器学习之决策树(上)

作者头像
润森
发布2019-09-17 11:46:06
5630
发布2019-09-17 11:46:06
举报
文章被收录于专栏:毛利学Python

决策树

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。

由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。

公式

当然也有推荐以2为底的对数

求两点分布的信息熵
代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
p = np.linspace(0.0000001,1,100)
h = -(1-p)*np.log(1-p) - p*np.log(p)  # 公式
plt.plot(p,h)
plt.show()

图像如下:

在这里插入图片描述

即如果概率都是0.5的信息熵最大,举个例子如果两个球队的获胜概率都是0.5,那么会有更多的人去观看,带来的信息冲量也是最大的。也就是如果比赛激烈那些引起的信息流量也是非常庞大的。

Gini系数(基尼系数)

Gini系数是一种与信息熵类似的做特征选择的方式,可以用来数据的不纯度。

决策树如何可视化

先处理一个问题,如何将一个决策树可视化

安装好Graphviz

因为要使用sklearn自带的 export_graphviz

网址:http://www.graphviz.org/

设置环境变量
cmd执行命令
代码语言:javascript
复制
pip install pydotplus

如何绘画

这里使用的是export_graphviz

代码语言:javascript
复制
import  numpy as np
from sklearn.tree import DecisionTreeClassifier
from matplotlib import pyplot as plt
import pydotplus
from sklearn import tree

X = np.array([[2, 2],
              [2, 1],
              [2, 3],
              [1, 2],
              [1, 1],
              [3, 3]])

y = np.array([0, 1, 1, 1, 0, 0])

plt.style.use('fivethirtyeight')
plt.rcParams['font.size'] = 18
plt.figure(figsize=(8, 8))

# Plot each point as the label
for x1, x2, label in zip(X[:, 0], X[:, 1], y):
    plt.text(x1, x2, str(label), fontsize=40, color='g',
             ha='center', va='center')

plt.grid(None)
plt.xlim((0, 3.5))
plt.ylim((0, 3.5))
plt.xlabel('x1', size=20)
plt.ylabel('x2', size=20)
plt.title('Data', size=24)
plt.show()



dec_tree = DecisionTreeClassifier()
print(dec_tree)
dec_tree.fit(X, y)
print(dec_tree.score(X,y))
# export_graphviz
dot_data = tree.export_graphviz(dec_tree, out_file=None,
                                feature_names=['x1', 'x2'],
                                class_names=['0', '1'],
                                filled=True, rounded=True,
                                special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
# 绘制图片
with open('demo.png', 'wb') as f:
    f.write(graph.create_png())

# 绘制pdf
graph.write_pdf('demo.pdf')

pdf和图片一样

具体说下这个决策树

一开始 x1<2.5是判断条件,gini=0.5,就是1-0.52-0.52 = 0.5,说明x1 = x2 ,只有[1,1],[3,3],x1<=2.5,选反的即x1>2.5 ,,决策树先value选[3,3},现在有6个样本。如果x1<=2.5,而且x2>2.5,将[2,3]选出。去掉[3,3] 5个,False是决策树的预测,因为Gini=0或1,它必须做出预测,样本中没有[1,0],它预测为0的分类。每做一次判断,就会做一个预测Gini=0的情况,将它分类,下次遇到[1,0]就将它分为0.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 求两点分布的信息熵
  • Gini系数(基尼系数)
  • 决策树如何可视化
    • 安装好Graphviz
      • 设置环境变量
        • cmd执行命令
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档