机器学习之决策树

决策树

表示

  • 输入:属性向量
  • 输出:决策Y
  • 每一个内结点:测试一个属性Xi
  • 每个分支: 选择属性Xi的一个取值
  • 每个叶结点:预测Y

同样一个训练数据集,可以有多棵树与其一致

构造

Top-Down的决策树归纳算法

Main loop:

  1. A←下一个结点node的最好属性
  2. 把A作为决策属性赋给结点node
  3. 对A的每一个取值,创建一个新的儿子结点node
  4. 把相应的训练样本分到叶结点
  5. 如果训练样本被很好的分类,则停止,否则在新的叶结点上重复上述过程

如何确定特测条件?

依赖于属性类型

  • 名词性\离散( Nominal)
  • 有序的( Ordinal)
  • 连续( Continuous)

依赖于切分的分支个数

  • 两路切分( 2-way)
  • 多路切分( Multi-way)

如何确定最好的切分

  • 最理想情况是每个子集为“皆为正例”或“皆为反例”
  • 更倾向结点上的数据具有同质homogeneous类别分布
  • 需要对结点混杂度impurity进行测量

如何衡量属性的“好”与“坏”

熵Entropy

  • H ( X ) H(X) H(X)是对从 X X X随机采样值在最短编码情况下的每个值平均
    (期望)长度(以2为底就是0、1编码)
    H ( X ) = − Σ i = 1 N P ( x = i ) log ⁡ 2 P ( x = i ) H(X)=-\Sigma^N_{i=1}P(x=i)\log_{2}P(x=i) H(X)=Σi=1NP(x=i)log2P(x=i)

在最短编码情况下,对消息 x = i x=i x=i分配 − log ⁡ 2 P ( x = i ) -\log_{2}P(x=i) log2P(x=i)位,所以其编码一个随机变量𝑋𝑋的期望位数即 H ( X ) H(X) H(X)

特定条件熵:y为某一取值时X的熵𝐻(𝑋|𝑌 = 𝑣)
条件熵:给定Y时X的熵𝐻(𝑋|𝑌)
互信息: I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) = H ( Y ) − H ( Y ∣ X ) = H ( X ) + H ( Y ) − H ( X , Y ) I(X; Y) = H(X) - H(X|Y) = H(Y) - H(Y|X) = H(X) + H(Y) - H(X, Y) I(X;Y)=H(X)H(XY)=H(Y)H(YX)=H(X)+H(Y)H(X,Y)

样本熵

  • S:训练例子的样本集
  • p p o s p_{pos} ppos:是S中的正例比例
  • p n e g p_{neg} pneg:中反例的比例
  • 用熵来测量S的混杂度

H ( S ) = − p p o s log ⁡ 2 p p o s − p n e g log ⁡ 2 p n e g H(S) = -p_{pos}\log_2p_{pos} -p_{neg}\log_2p_{neg} H(S)=pposlog2ppospneglog2pneg

熵计算
例:

信息增益

信息增益 = 熵 - 条件熵
G A I N s p l i t = E n t r o p y ( p ) − Σ i = 1 k n i n E n t r o p y ( i ) {GAIN}_{split} = Entropy(p) - \Sigma^k_{i=1}\frac{n_i}{n}Entropy(i) GAINsplit=Entropy(p)Σi=1knniEntropy(i)

通过Y获得X的信息,即降低X的不确定性
在一个条件下,信息复杂度(不确定性)减少的程度

评价

优点

  • 构建过程计算资源开销小
  • 分类未知样本速度极快
  • 对于小规模的树比较容易解释
  • 在许多小的简单数据集合上性能与其它方法相近

算法:C4.5(ID3)

  • 深度优先构建方法
  • 采用了信息增益
  • 在每一个结点需要对示例依据连续属性排序
  • 数据需要全部装入内存
  • 不适合大规模数据

欠拟合、过拟合

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
决策树是常用的机器学习算法之一,通过对数据的分类和特征值计算来完成对未知数据的预测。本文将介绍使用Python实现决策树算法的相关步骤。 首先,需要导入决策树算法工具包,使用以下代码: ```python from sklearn import tree ``` 然后,导入训练数据和测试数据,并进行预处理。为了方便起见,在本文中采用生成随机数的方式来生成样本数据,使用以下代码: ```python from sklearn.datasets import make_classification X, y = make_classification(n_samples=100, n_features=4, n_classes=2, n_informative=2, n_redundant=0, random_state=0, shuffle=False) ``` 接下来,使用生成的样本数据进行模型训练。这里使用scikit-learn中的DecisionTreeClassifier()函数。 ```python clf = tree.DecisionTreeClassifier() clf = clf.fit(X, y) ``` 训练后,调用predict()方法进行对测试数据的预测,使用以下代码: ```python y_pred = clf.predict(X) ``` 最后,评估模型的准确率,使用以下代码: ```python from sklearn.metrics import accuracy_score print(accuracy_score(y, y_pred)) ``` 这就是使用Python实现决策树算法的基本过程。决策树可以根据数据中的不同特征进行分类,是一个简单且常用的分类算法。决策树算法也可用于回归问题,例如预测一个数的大小。与其他机器学习算法相比,决策树具有易于理解和可解释的优点,同时还可以处理非线性的分类问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值