在前面线性回归,线性回归要拟合全部样本,这个是不显示的,因为问题不一定就是线性模型,其中一种可行的方法是将数据集切分成多分易建模的数据,然后利用前面线性回归的方法来建模。如果第一个切分之后的数据还不好拟合的话,那就继续切分。
这就是决策树中一种叫分类回归树CART。这个算法即可以用于分类也可以用于回归。
在这个学习中,介绍了树剪枝算法。
CART算法实现
先看一下之前的树分类
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(' ') 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
我们大概看一下结果:
>>> import regTrees >>> testMat = mat(eye(4)) >>> testMat matrix([[ 1., 0., 0., 0.], [ 0., 1., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.]]) >>> mat0,mat1 = regTrees.binSplitDataSet(testMat,1,0.5) >>> mat0 matrix([[ 0., 1., 0., 0.]]) >>> mat1 matrix([[ 1., 0., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.]])
第二个函数以第二个特征进行分类,以0.5作为切分。下面给出CART算法流程
具体代码先不贴了,下面看看这个算法的树剪枝算法。
对于一棵树来说,如果节点过多,这个模型可能对数据过拟合,我们之前采用了交叉验证来发现过拟合,这个决策树也是一样。
通过降低决策树的复杂度来避免过拟合的过程称为剪枝。剪枝分为预剪枝跟后剪枝。
学习的这个事需要坚持,这几天感觉状态不佳,看这些算法有点囫囵吞枣了,目前先这样吧,先匆匆看完吧。