机器学习---监督学习之决策树算法

  1. 决策树概念
    根据我们前面学到的知识
    顾名思义:一棵用来决策的树。
    机器学习已有的数据,分析什么情况会导致什么结果,把它画成一颗分叉的树,
    然后如果有新数据来了,带入这棵树来决策应该怎么做。
    比如带入性别,得到结果:性别女则决策买买买,性别男则决策吃吃吃。

  2. 举例
    在这里插入图片描述
    如果使用决策树划分这些数据?

  • 先竖着画一条线
    在这里插入图片描述
  • 由已经分割好的两部分继续划分
    在这里插入图片描述
  • 继续划分
    在这里插入图片描述
  • 这就是决策树了

  1. 物体越无序,熵越大,越不稳定。
    物品越有序,熵越小,越稳定。
    如何用数学定义描述这种状态?
    我们随机N次抽取物品,求出这些抽取出的物品排列起来和原来物品一模一样的概率。
    概率越大越稳定。概率越小越不稳定。
    又因为这些物品可能数量很多,一直求概率这个值会很小很小,为了使这个值依旧满足衡量稳定与否的作用还不那么小,我们对每个概率都取对数,这样相乘就可以被改成相加了(会是负数,再取相反数)。

我们使用决策树时,就可以使用熵的概念判断决策树划分的好坏了
在这里插入图片描述
父节点的熵值-子节点的熵值的平均值=信息增益
信息增益越大越好,就像是上图第三点似的,信息增益为1.

  1. 信息增益例子
    在这里插入图片描述
    如果先按照性别分类的话,信息增益为0.54
    在这里插入图片描述
    按照职业划分的话信息增益是1.
    所以我们这种情况按照职业划分更好。

总而言之,我们选择决策树的父节点时,可以用信息增益这个指标来决定用哪个参数当父节点。

  1. 随机森林
    上述的例子是两个参数,性别和职业,若是某些数据的参数过多,我们还依旧使用决策树的话,就会出现过拟合的状态,这时候模型倾向于记住数据而不是预测数据。类似于下图
    在这里插入图片描述
    这是一种不好的现象,如何解决呢?
    随机选择几个参数(列),生成决策树。
    再随机选择几个参数(列),生成决策树。
    ……
    多生成几个决策树。
    最后要进行预测数值时,将数值代入不同的决策树,得到不同的结果,我们取出现次数最多的结果。如下图所示。
    在这里插入图片描述
  2. 超参数
    学过数据结构的同学都知道,树有很多性质,决策树作为树的一种,也具有树的性质。
  • 最大深度
    决策树的最大深度指树根和叶子之间的最大长度。当决策树的最大深度为k时,它最多可以拥有
    2 k 2^k 2k片叶子。
    在这里插入图片描述
    设置最大深度这个超参数可以有效避免决策树左右不平衡效率问题。
    这样解决了一个问题又会出现什么问题呢?
    在这里插入图片描述
    如左图所示,一个节点内样本过多,一个节点内样本过少,这样也不行,所以还要用到一个超参数

  • 每个节点最小样本数
    若这个参数被设置为一个整数,就代表样本个数,如果被设置为小数就代表节点样本与总样本数的比值(必须大于等于此比值)

  • 最大特征数
    这个超参数就是第5点所说的,限制每次查找数据特征的个数,来生成许多决策树,以防出现过拟合的情况。

  1. 代码示例
# Import statements 
from sklearn.tree import DecisionTreeClassifier#分类器
from sklearn.metrics import accuracy_score#计算模型是准确率
import pandas as pd
import numpy as np

# Read the data.
data = np.asarray(pd.read_csv('data.csv', header=None))#读取数据
# Assign the features to the variable X, and the labels to the variable y. 
X = data[:,0:2]#数据中前两列是参数(所有行都包括)
y = data[:,2]#数据中第三列是标签(所有行都包括)

# TODO: Create the decision tree model and assign it to the variable model.
model = DecisionTreeClassifier()#实例化一个决策树模型

# TODO: Fit the model.
model.fit(X,y)#放入数据学习

# TODO: Make predictions. Store them in the variable y_pred.
y_pred = model.predict(X)#预测数据

# TODO: Calculate the accuracy and assign it to the variable acc.
acc = accuracy_score(y, y_pred)#计算准确率
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值