Python-scikit学习:如何在决策树和回归树中指定验证子集?

Python-scikit学习:如何在决策树和回归树中指定验证子集?,python,scikit-learn,decision-tree,Python,Scikit Learn,Decision Tree,我正在尝试用Python构建决策树和回归树。我正在使用sci工具包,但我对其他选择持开放态度 关于这个库,我不了解的是是否可以提供培训和验证子集,以便库在培训子集上构建模型,在验证中测试模型,并根据某些规则停止拆分(通常情况下,当附加拆分不能在验证子集上产生更好的性能时-这可以防止过度拟合)。 例如,这就是JMP软件所做的() 我在官方网站()和互联网上都没有提到如何使用验证子集 欢迎提供任何帮助!谢谢!中有一组相当丰富的交叉验证例程和示例 请注意,SK Learn版本0.14和0.15之间的交

我正在尝试用Python构建决策树和回归树。我正在使用sci工具包,但我对其他选择持开放态度

关于这个库,我不了解的是是否可以提供培训和验证子集,以便库在培训子集上构建模型,在验证中测试模型,并根据某些规则停止拆分(通常情况下,当附加拆分不能在验证子集上产生更好的性能时-这可以防止过度拟合)。 例如,这就是JMP软件所做的()

我在官方网站()和互联网上都没有提到如何使用验证子集


欢迎提供任何帮助!谢谢!

中有一组相当丰富的交叉验证例程和示例

请注意,SK Learn版本0.14和0.15之间的交叉验证似乎已经取得了很大的进展,因此如果您还没有升级到0.15,我建议您升级到0.15

正如jme在评论中所指出的,SK learn的网格搜索和管道功能也包含了一些交叉验证功能

为了完整地回答您的问题,这里有一个简单的示例,但更高级的k-fold、leave-one-out、leave-p-out、shuffle split等都可用:

import numpy as np
from sklearn import cross_validation
from sklearn import datasets
from sklearn import svm

iris = datasets.load_iris()
iris.data.shape, iris.target.shape
((150, 4), (150,))

X_train, X_test, y_train, y_test = cross_validation.train_test_split(iris.data,
                                                                     iris.target,
                                                                     test_size=0.4,
                                                                     random_state=0)

X_train.shape, y_train.shape
((90, 4), (90,))
X_test.shape, y_test.shape
((60, 4), (60,))

clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
clf.score(X_test, y_test)                           
0.96...

我希望这会有所帮助……祝你好运!

Sklearn将交叉验证工具与分类器分开,我认为这是一种更优雅的做事方式。请参阅和举个例子。这里还有一个使用支持向量分类器的例子,可以很容易地切换到决策树。这非常有用,但我恐怕不是这么想的我想复制这个JMP特性:>当你点击Go按钮时,平台会重复执行>分割,直到验证R平方比>接下来的10次分割更好。换句话说,我希望一些停止修剪规则是基于e out-of-sample(测试/验证/我们想称之为什么)数据集。相反,如果我理解正确,上面的示例说明了如何评估out-sample的性能,而不是根据out-of-sample的性能修剪模型。我还注意到:这里说:“修剪(当前不支持)”本质上,你所寻找的很像一个,SK Learn确实有。我知道你可能在寻找一个苹果对苹果的JMP,但你可能想看看它。随机林是一个元估计器,它可以在数据集的不同子样本上拟合多个决策树分类器,并使用平均值来提高预测能力但是,我想我可以编写一个类似于JMP自己的停止规则:假设我从max_depth=4开始。我检查样本外树的分数。然后我增加max_depth,直到样本外树的分数不再增加。mytree.fit(x_train,y_train)mytree.score(x_test,y_test)