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



作为不进行任何预处理的交叉验证的示例,我可以这样做:

    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)

但是在设置交叉验证之前这样做不是一个好主意,因为这样训练集和测试集将一起归一化。我如何设置交叉验证,以便在每次运行时分别预处理相应的训练集和测试集?

根据文档,如果您使用Pipeline,则可以为您完成此操作。从文档中,就在3.1.1.1节上面,我强调一下:

就像在训练数据上测试预测器很重要一样,预处理(如标准化、特征选择等)和类似的数据转换同样应该从训练集中学习,并应用于预测[…]管道使组合估计器更容易,在交叉验证下提供这种行为[.]

更多关于管道的相关信息请点击这里。

相关内容

  • 没有找到相关文章

最新更新