- 签证留学 |
- 笔译 |
- 口译
- 求职 |
- 日/韩语 |
- 德语
程序清单1 CART算法的实现代码
上述程序清单包含3个函数:第一个函数是loadDataset(),这里我们把目标变量数据存放在一起。该函数读取一个以tab键为分隔符的文件,然后将每行的内容保存成一组浮点数。
第二个函数是binSplitDataset(),该函数有3个参数:数据集合、待切分的特征和该特征的某个值。在给定特征和特征值的情况下,该函数通过数组过滤方式将上述数据集合切分得到两个子集并返回。
最后一个函数是树构建函数createTree(),它有4个参数:数据集和其他3个可选参数。这些可选参数决定了树的类型:leafType给出建立叶节点的函数;errType代表误差计算函数;而ops是一个包含树构建所需其他参数的元组。
函数createTree()是一个递归函数。该函数首先尝试将数据集分成两个部分,切分由函数chooseBestSplit()完成(这里未给出该函数的实现)。如果满足停止条件,chooseBestSplit()将返回None和某类模型的值。如果构建的是回归树,该模型是一个常数。如果是模型树,其模型是一个线性方程。后面会看到停止条件的作用方式。如果不满足停止条件,chooseBestSplit()将创建一个新的Python字典并将数据集分成两份,在这两份数据集上将分别继续递归调用createTree()函数。
程序清单1的代码很容易理解,但其中的方法chooseBestSplit()现在暂时尚未实现,所以函数还不能看到createTree()的实际效果。但是下面可以先测试其他两个函数的效果。将程序清单1的代码保存在文件regTrees.py中并在Python提示符下输人如下命令:
>>> 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,matl=regTrees.binSplitDataSet (testMat,1,0.5)
>>>mato
matrix([[ 0., 1., 0., 0.]])
>>> mat1
matrix([[ 1., 0., 0., 0.],
[0.,0.,1.,0.],
[ 0., 0.,0., 1.]])
很有趣吧。下面给出回归树的chooseBestsplit()函数,还会看到更有趣的结果。
责任编辑:admin