如何使用scikit的预处理/规范化以及交叉验证?

Feq*_*ish 12 python scikit-learn

作为没有任何预处理的交叉验证的例子,我可以这样做:

    tuned_params = [{"penalty" : ["l2", "l1"]}]
    from sklearn.linear_model import SGDClassifier
    SGD = SGDClassifier()
    from sklearn.grid_search import GridSearchCV
    clf = GridSearchCV(myClassifier, params, verbose=5)
    clf.fit(x_train, y_train)
Run Code Online (Sandbox Code Playgroud)

我想用类似的东西预处理我的数据

from sklearn import preprocessing
x_scaled = preprocessing.scale(x_train)
Run Code Online (Sandbox Code Playgroud)

但是在设置交叉验证之前执行此操作不是一个好主意,因为培训和测试集将一起标准化.如何设置交叉验证以在每次运行时单独预处理相应的培训和测试集?

Sea*_*ter 5

根据文档,如果您使用Pipeline,可以为您完成.从文档中,在3.1.1.1节之上,强调我的:

正如测试从训练中保留的数据的预测器一样重要,同样应该从训练集中学习预处理(例如标准化,特征选择等)和类似的数据变换,并将其应用于保留数据以进行预测 [...]使用Pipeline可以更轻松地编写估算器,在交叉验证下提供此行为[.]

有关管道的更多相关信息,请点击此处.