最小二乘回归树Python实现——统计学习方法第五章课后题

李航博士《统计学习方法》第五章第二题,试用平方误差准则生成一个二叉回归树。

输入数据为:

x     0            1          2         3         4         5         6         7         8         9

y    4,5       4.75      4.91    5.34    5.80    7.05    7.90    8.23    8.70      9.00

这里使用递归算法

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
#李航《统计学习方法》第五章习题2 最小二乘回归树

import numpy as np

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

# def average(list):
#     ave = 0
#     for i in list:
#         ave += i
#     if len(list)>0:
#         ave = ave/len(list)
#     else:
#         ave = 0
#     return ave

def CART(start, end,y):
    if (end-start)>1:
        result = []
        for i in xrange(start,end+1,1):
            c1 = [np.average(y[start:i+1])]   #左子树平均值
            c2 = [np.average(y[i+1:end+1])]   #右子树平均值
            y1 = y[start:i+1]
            y2 = y[i+1:end+1]
            result.append((sum((y1-c1)**2)+sum((y2-c2)**2)))  #计算平方误差损失
        index1 = np.argmin(result) + start     #每一步的切分点,argmin返回最值所在的索引
        print index1,'---',np.average(y[start:index1+1]),'---',np.average(y[index1+1:end+1])
        CART(start,index1,y)   #对左子树生成
        CART(index1+1,end,y)   #对右子树生成
    else:
        return None

CART(0,9,y)
#输出:每一步的切分点、切分点左子树平均值、切分点右子树平均值

参考网址:http://blog.csdn.net/xiaoxiao_wen/article/details/54098015

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值