树回归

本文探讨了如何应对数据集中输入与目标变量间的非线性关系,重点介绍了通过树回归来建模,包括回归树和模型树。CART算法被用于构建既能处理离散又能处理连续数据的二元树,并且通过预剪枝和后剪枝来防止过拟合。文章还提供了树回归的实现代码示例。
摘要由CSDN通过智能技术生成

  数据集中经常包含一些复杂的相互关系,使得输入数据和目标变量之间呈现非线性关系。对复杂的关系建模,一种方式用树对预测值分段,包括分段常数(回归树)和分段直线(模型树)。

        CART算法可以用于构建二元树并处理离散型或连续型数据的切分,对于过拟合可以采取剪枝的办法:预剪枝(在树的构建过程中剪枝)和后剪枝(当树构建完毕进行剪枝)。

       

       树回归的具体实现代码如下:

 

'''
Tree-Based Regression Methods

'''
from numpy import *

def loadDataSet(fileName):      #general function to parse tab -delimited floats
    dataMat = []                #assume last column is target value
    fr = open(fileName)
    for line in fr.readlines():
        curLine = line.strip().split('\t')
        fltLine = map(float,curLine) #map all elements to float()
        dataMat.append(fltLine)
    return dataMat

def binSplitDataSet(dataSet, feature, value):
    mat0 = dataSet[nonzero(dataSet[:,feature] > value)[0],:][0]
    mat1 = dataSet[nonzero(dataSet[:,feature] <= value)[0],:][0]
    return mat0,mat1

def regLeaf(dataSet):#returns the value used for each leaf
    return mean(dataSet[:,-1])

def regErr(dataSet):
    return var(dataSet[:,-1]) * shape(dataSet)[0]

def linearSolve(dataSet):   #helper function used in two places
    m,n = shape(dataSet)
    X = mat(ones((m,n))); Y = mat(ones((m,1)))#create a copy of data with 1 in 0th postion
    X[:,1:n] = dataSet[:,0:n-1]; Y = dataSet[:,-1]#and strip out Y
    xTx = X.T*X
    if linalg.det(xTx) == 0.0:
        raise NameError('This matrix is singular, cannot do inverse,\n\
        try increasing the second value of ops'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值