留一法交叉验证

我正在尝试通过留一法交叉验证来评估一个多变量数据集,然后移除那些对原始数据集没有预测能力的样本(经过本杰明校正,FDR > 10%)。

通过查阅交叉验证文档,我找到了留一法迭代器。然而,当我试图获取第n折的得分时,抛出了一个异常,指出需要多个样本。为什么.predict()可以工作而.score()不行?我如何获取单个样本的得分?我是否需要使用另一种方法?

未成功的代码:

from sklearn import ensemble, cross_validation, datasetsdataset = datasets.load_linnerud()x, y = dataset.data, dataset.targetclf = ensemble.RandomForestRegressor(n_estimators=500)loo = cross_validation.LeaveOneOut(x.shape[0])for train_i, test_i in loo:    score = clf.fit(x[train_i], y[train_i]).score(x[test_i], y[test_i])    print('Sample %d score: %f' % (test_i[0], score))

导致的异常:

ValueError: r2_score can only be computed given more than one sample.

[编辑,以澄清]:

我不是在问为什么这个方法不工作,而是希望找到一个可行的不同方法。在拟合/训练我的模型后,我如何测试单个样本与训练模型的拟合程度?


回答:

cross_validation.LeaveOneOut(x.shape[0]) 创建了与行数相同数量的折叠。这导致每次验证运行时仅获得一个实例。

现在,要画一条“线”,你需要两个点,而你只有一个实例,这就是错误信息所说的,需要多个实例(或样本)来画出用于计算R^2值的“线”。

一般来说,在机器学习领域,人们报告10折或5折交叉验证结果。因此,我建议将n设置为10或5,相应地进行调整。

编辑:在与@banana简短讨论后,我们意识到最初没有正确理解这个问题。由于无法为单个数据点获取R2得分,一个替代方法是计算实际点和预测点之间的距离。这可以通过numpy.linalg.norm(clf.predict(x[test_i])[0] - y[test_i])来实现

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注