让我们假设我有典型的训练和测试数据集的设置(X_train
,y_train
,X_test
,y_test
)和一个非常简单的管道,我想在交叉验证使用(我会拥有多个更复杂的管道,但是这仅仅是一个简单的例子)
当我执行下面的代码所示的交叉验证时,我想知道这种Pipeline
方法是否真的有效。
我的问题是,是在最后一个“测试”折叠上Pipeline
调用.predict()
方法,还是.predict()
在用于训练的折叠上调用方法?
from sklearn.cross_validation import cross_val_score, KFold
from sklearn.pipeline import Pipeline
from sklearn.naive_bayes import GaussianNB
from sklearn.preprocessing import StandardScaler
pipe = Pipeline(steps=[
('scaler', StandardScaler()),
('classification', GaussianNB())
])
cv = KFold(n=X_train.shape[0], n_folds=10)
scores = cross_val_score(pipe, X_train, y_train, cv=cv, scoring='accuracy')
也许是一个更简单的示例:
默认情况下,cross_val_score
总是会预测在test
通过显示部分cv
(看看[(train, test) for train, test in cv]
)。如果cv
分开train
并且test
不相交(例如,KFold
或其他交叉验证分裂对象的情况),则拟合的估计器/管线将始终对保留的数据进行预测。
看到这条线
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句