李航《统计学习方法》第2版 第5章课后习题答案


习题5.1


题目:根据表5.1所给的训练数据集,利用信息增益比(C4.5算法)生成决策树.



在这里插入图片描述


习题5.2


题目:已知下表所示的训练数据,试用平方误差损失准则生成一个二叉回归树.


在这里插入图片描述
在这里插入图片描述

"""
    编程实现书本89页习题5.2
    算法:最小二乘回归树生成算法
    准则:平方误差最小化
"""
#-*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

y = np.array([4.5, 4.75, 4.91, 5.34, 5.8, 7.05, 7.9, 8.23, 8.7, 9]) #y的值

#节点定义
class TreeNode(object):
    def __init__(self, tempR, tempc):
        #R存满足该节点划分条件的实例对应的yi
        #最后将输入空间划分为若干个单元,对所属每个单元的所有实例xi对应的yi取平均即为该单元上的最优输出值。
        self.R = tempR
        #c存的是该节点对应的s为切分点划分条件时的最小平方误差
        self.c = tempc
        self.left = None
        self.right = None


#CART算法建立回归树
def CART(start, end):
    # 切点s的选择表示R1为x值小于等于s的点,R2为大于s的点
    if(end - start >= 1):
        result = []
        for s in range(start+1, end+1):#s在(start, end]之间取值
            y1 = y[start : s] #y1取索引为[start, s]之间的值
            y2 = y[s: end+1] #y2 取索引为[s+1, end]之间的值
            result.append((y1.std()**2)*y1.size + (y2.std()**2)*y2.size)
            #std即标准差函数,求标准差的时候默认除以元素的个数,因此平方后乘以元素个数才是要求的平方差
        index1 = result.index(min(result)) + start#取平方差误差最小的索引值
        root = TreeNode(y[start:end+1], min(result))
        #索引值为0-9,x值为1-10,即s的值比求的索引值多1
        print("节点元素值为",y[start:end+1], "  s =",index1+1, "  最小平方误差为",min(result))#输出s值和最小平方误差
        root.left = CART(start, index1) #对列表的左侧生成左子树
        root.right = CART(index1+1, end) #对列表的右侧生成右子树
    else:
        root = None
    return root


if __name__ == "__main__":
    root = CART(0, 9)


习题5.3

在这里插入图片描述

在这里插入图片描述

习题5.4

在这里插入图片描述

在这里插入图片描述
*

参考链接:

  1. https://blog.csdn.net/qq_41562704/article/details/98590728

关于书本例题以及mnist数据集分类编程实现,参考链接:

  1. 李航《统计学习方法》第2版 第5章 编程生成决策树(ID3算法、C4.5算法)、调用sklearn模块实现(CART算法)(课本77页例题5.3

  2. 李航《统计学习方法》第2版 第5章 Python编程决策树(ID3未剪枝) 实现mnist数据集分类

猜你喜欢

转载自blog.csdn.net/weixin_43646592/article/details/109662910