2017-06-13 75 views
0

我在sklearn中训练了一个逻辑回归分类器。我的基本特征文件有65个特征,现在我通过考虑二次组合(使用PolynomialFeatures())将它们外推到1000。然后我通过Select-K-Best()方法将它们还原为100。在未知测试集上使用Select-K-best

但是,一旦我训练了我的模型并获得了新的test_file,它将只具有65个基本特征,但我的模型预计会有100个特征。

所以,我怎么能应用在我的测试集选择-K-最佳()方法时,我不知道这是在Select-K-Best.fit所需的标签()函数

回答

2

你不应该在测试数据中再次适用SelectKBest - 而应使用与培训中相同(已适合)的SelectKBest实例。即你应该只对测试数据使用.transform方法,而不是.fit方法。

scikit-learn提供了一个实用工具,可以轻松管理多个步骤;它被称为Pipeline。它应该类似于你的情况(通过make_pipeline帮手):

pipe = make_pipeline(
    PolynomialFeatures(2), 
    SelectKBest(100), 
    LogisticRegression() 
) 
pipe.fit(X_train, y_train) 
y_pred = pipe.predict(X_test) 
+0

Thanks! 在我的情况下,我需要在训练后坚持模型(保存到文件),然后再次加载以进行测试。 所以我想我也应该将fit'ed SelectKBest保存到文件并加载它进行测试。 目前我正在将numpy数组(包含所选K-要素的索引)存储到文件并在测试期间加载它。 有没有更简单的方法来做到这一点? –

+1

只需转储(使用pickle或joblib)整个管道对象,即'管道'变量。有关更多详细信息,请参阅http://scikit-learn.org/stable/modules/model_persistence.html#model-persistence。 –