作为不进行任何预处理的交叉验证的示例,我可以这样做:
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节上面,我强调一下:
就像在训练数据上测试预测器很重要一样,预处理(如标准化、特征选择等)和类似的数据转换同样应该从训练集中学习,并应用于预测[…]管道使组合估计器更容易,在交叉验证下提供这种行为[.]
更多关于管道的相关信息请点击这里。