机器学习-决策树-剪枝处理

1.

ID3算法优缺点:

① 不能对连续数据进行处理,只能通过连续数据离散化进行处理;

② 采用信息增益容易偏向取值较多的特征,准确率不如信息增益率;

③ 缺失值不好处理。

④ 没有采用剪枝决策树的结构可能过于复杂,容易出现过拟合。

2.

C4.5算法优缺点:

① 产生的规则容易理解,准确率高,实现简单;

② 对数据进行多次顺序扫描和排序,效率低;

③ 只适合小规模数据集,需要将数据放到内存

3.剪枝目的:

避免过拟合现象,提升模型的泛化效果

4.剪枝方法:

剪枝算法主要分为两种,预剪枝和后剪枝

预剪枝是在构建决策树的过程中,提前停止使模型性能变差的分支

5.预剪枝方法:

  1. 当树的深度达到一定的规模,停止生长。
  2. 当前节点的样本数量小于某个阈值,停止生长。
  3. 信息增益信息增益率基尼指数增益小于某个阈值,停止生长。
  4. 测试集准确性提升小于某个阈值,或不再提升甚至有所下降时,停止生长。(西瓜书)

6.后剪枝方法:

  1. 悲观剪枝(PEP)
  2. 最小误差剪枝(MEP)
  3. 错误率降低剪枝(REP),(西瓜书)
  4. 代价复杂度剪枝(CCP)
  5. OPP (Optimal Pruning)
  6. CVP (Critical Value Pruning)

 

7.下面是剪枝的实例:

(1)开始

import math
import numpy as np 

 (2)创建数据集:

# 创建西瓜书数据集2.0
def createDataXG20():
    data = np.array([['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑']
                    , ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑']
                    , ['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑']
                    , ['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑']
                    , ['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑']
                    , ['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘']
                    , ['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘']
                    , ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑']
                    , ['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑']
                    , ['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘']
                    , ['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑']
                    , ['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘']
                    , ['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑']
                    , ['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑']
                    , ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘']
                    , ['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑']
                    , ['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑']])
    label = np.array(['是', '是', '是', '是', '是', '是', '是', '是', '否', '否', '否', '否', '否', '否', '否', '否', '否'])
    name = np.array(['色泽', '根蒂', '敲声', '纹理', '脐部', '触感'])
    return data, label, name

def splitXgData20(xgData, xgLabel):
    xgDataTrain = xgData[[0, 1, 2, 5, 6, 9, 13, 14, 15, 16],:]
    xgDataTest = xgData[[3, 4, 7, 8, 10, 11, 12],:]
    xgLabelTrain = xgLabel[[0, 1, 2, 5, 6, 9, 13, 14, 15, 16]]
    xgLabelTest = xgLabel[[3, 4, 7, 8, 10, 11, 12]]
    return xgDataTrain, xgLabelTrain, xgDataTest, xgLabelTest

(3) 创建基础函数:

# 定义一个常用函数 用来求numpy array中数值等于某值的元素数量
equalNums = lambda x,y: 0 if x is None else x[x==y].size


# 定义计算信息熵的函数
def singleEntropy(x):
    """计算一个输入序列的信息熵"""
    # 转换为 numpy 矩阵
    x = np.asarray(x)
    # 取所有不同值
    xValues = set(x)
    # 计算熵值
    entropy = 0
    for xValue in xValues:
        p = equalNums(x, xValue) / x.size 
        entropy -= p * math.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值