- 签证留学 |
- 笔译 |
- 口译
- 求职 |
- 日/韩语 |
- 德语
对于模型树、回归树和一般的回归方法,下面测试一下哪个模型最好。首先给出一些函数,它们可以在树构建好的情况下对给定的输入进行预测,之后利用这些函数来计算三种回归模型的测试误差。这些模型将在某个数据上进行测试,该数据涉及人的智力水平和自行车的速度的关系。
这里的数据是非线性的,不能简单地使用全局线性模型建模。当然这里也需要声明一下,此数据纯属虚构。
下面先给出在给定输入和树结构情况下进行预测的几个函数。打开regTrees.py并加入如下代码。
程序清单1 用树回归进行预测的代码
对于输入的单个数据点或者行向量,函数treeForeCast()会返回一个浮点值。在给定树结构的情况下,对于单个数据点,该函数会给出一个预测值。调用函数treeForeCast()时需要指定树的类型,以便在叶节点上能够调用合适的模型。参数modelEval是对叶节点数据进行预测的函数的引用。函数treeForeCast()自顶向下遍历整棵树,直到命中叶节点为止。一旦到达叶节点,它就会在输入数据上调用modelEval()函数,而该函数的默认值是regTreeEval()。
要对回归树叶节点进行预测,就调用函数regTreeEval();要对模型树节点进行预测时,就调用modelTreeEval()函数。它们会对输入数据进行格式化处理,在原数据矩阵上增加第0列,然后计算并返回预测值。为了与函数modelTreeEval()保持一致,尽管regTreeEval()只使用一个输入,但仍保留了两个输入参数。
最后一个函数是createForCast(),它会多次调用treeForeCast()函数。由于它能够以向量形式返回一组预测值,因此该函数在对整个测试集进行预测时非常有用。下面很快会看到这一点。
接下来考虑图1所示的数据。该数据是我从多个骑自行车的人那里收集得到的。图中给出骑自行车的速度和人的智商之间的关系。下面将基于该数据集建立多个模型并在另一个测试集上进行测试。对应的训练集数据保存在文件bikeSpeedVslq_train.txt中,而测试集数据保存在文件bikeSpeedVslq_test.txt中。