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

时间:2015-09-16 01:03:01

标签: 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)

我想使用

之类的东西预处理我的数据
from sklearn import preprocessing
x_scaled = preprocessing.scale(x_train)

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

1 个答案:

答案 0 :(得分:5)

根据文档,如果您使用Pipeline,则可以为您完成此操作。从docs,在3.1.1.1节上方,强调我的:

  

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

有关可用管道的更多相关信息here