《统计学习方法》第五章——回归树 python实现

import numpy as np

def divide(data):
    divide_x = []
    divide_y = []
    for i in range(len(data) - 1):
        divide_x.append(np.mean([data[i][0], data[i + 1][0]]))
    for i in range(len(data) - 1):
        y1_arr = []
        y2_arr = []
        for j in range(len(data)):
            if j + data[0][0] < divide_x[i]:
                y1_arr.append(data[j][1])
            else:
                y2_arr.append(data[j][1])
        y_temp = [y1_arr, y2_arr]
        divide_y.append(y_temp)
    return divide_x,divide_y

def min_mse(divide_x,divide_y):
    mse_arr = []
    for i in range(len(divide_x)):
        ave_y1 = np.mean(divide_y[i][0])
        ave_y2 = np.mean(divide_y[i][1])
        mse = 0
        for j in range(len(divide_y[i][0])):
            mse += np.square(divide_y[i][0][j] - ave_y1)
        for k in range(len(divide_y[i][1])):
            mse += np.square(divide_y[i][1][k] - ave_y2)
        mse_arr.append(mse)

    min_mse = 10000
    index = 10000
    for i in range(len(mse_arr)):
        if min_mse > mse_arr[i]:
            min_mse = mse_arr[i]
            index = i
    return index

class BinaryTree:
    def __init__(self,prop):
        self.prop=prop
        self.leftchild=None
        self.rightchild=None
        self.value=None

data=[[1,4.50],[2,4.75],[3,4.91],[4,5.34],[5,5.80],[6,7.05],[7,7.90],[8,8.23],[9,8.70],[10,9.00]]

def create_tree(data,prop):
    if len(data)==1:
        return
    temp_tree_value = [prop, data]
    root = BinaryTree(prop)
    root.value = temp_tree_value
    divide_x, divide_y = divide(data)
    index = min_mse(divide_x, divide_y)
    print(divide_y[index])
    create_tree(data[:index + 1],"left")
    create_tree(data[index + 1:len(data)],"right")

create_tree(data,"root")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值