我正在尝试通过留一法交叉验证来评估一个多变量数据集,然后删除那些对原始数据集没有预测能力的样本(经过Benjamini校正,FDR > 10%)。
使用交叉验证文档,我找到了留一法迭代器。但是,在尝试获取第n个折叠的得分时,会引发异常,指出需要多个样本。为什么.predict()有效而.score()无效?如何获得单个样本的得分?我需要使用其他方法吗?
未成功的代码:
使用交叉验证文档,我找到了留一法迭代器。但是,在尝试获取第n个折叠的得分时,会引发异常,指出需要多个样本。为什么.predict()有效而.score()无效?如何获得单个样本的得分?我需要使用其他方法吗?
未成功的代码:
from sklearn import ensemble, cross_validation, datasets
dataset = datasets.load_linnerud()
x, y = dataset.data, dataset.target
clf = 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.
[编辑,以澄清问题]:
我不是在问为什么这个方法不起作用,而是想要一个不同的方法来测试模型的拟合程度。在拟合/训练模型之后,如何测试单个样本与训练好的模型的拟合程度?
numpy.linalg.norm(clf.predict(x[test_i])[0] - y[test_i])
- Shashank Agarwal