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

来源:互联网 发布:福建天正网络咨询 编辑:程序博客网 时间:2024/06/08 17:57

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

输入数据为:

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 npy = 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 avedef 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 NoneCART(0,9,y)#输出:每一步的切分点、切分点左子树平均值、切分点右子树平均值

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

阅读全文
0 0
原创粉丝点击