背景
cart树作为决策树的一种,在非常多的地方被使用。既可以用于分类问题,也可以用于回归问题。分类问题则非常容易理解,利用gini系数较大的特征进行样本分裂,从而构建一颗分类树。 今天我们要探讨的是回归树。
回归树cart简介
回归树,则目标函数是平方差,也就是说,分完之后形成left和right子树,
每个子树对label,也就是y,进行平方差的计算。最后左右子树的平方差之和则是评估标准。 我们的目标则是选择平方差之和比较小的特征来进行划分。 停止条件则是,没有可划分的,或者误差之和非常小。
练手实现
如果明白了上面的定义,其实就两个点:选特征,目标平方差最小;
分裂; 然后继续直到结束。
def loadDataSet():
dataSet = []
f = open('regData.txt')
fr = f.readlines()
for line in fr:
line = line.strip().split('\t')
linef = [float(li) for li in line]
dataSet.append(linef)
dataSetMat = mat(dataSet)
return dataSetMat
def calcErr(dataSetMat):
'''
dataSetMat[line,col]
:param dataSetMat:
:return:
'''
label = dataSetMat[:,-1]
#print(type(label),len(label))
sqrtvar = var(label)* len(label)
#print(sqrtvar)
return sqrtvar
def chooseBestFeatVal2Split(dataSetMat):
t = dataSetMat[:, -1]