Scikit Learn - ValueError:X每个样本有26879个特征;期待7087

时间:2015-02-28 07:42:18

标签: python scikit-learn

我正在进行特征选择,首先训练具有L1惩罚的LogisticRegression,然后使用缩减的特征集来使用L2惩罚重新训练模型。现在,当我尝试预测测试数据时,对其进行的transform()会产生不同的维数组。我很困惑如何重新调整测试数据的大小以便能够预测。

感谢任何帮助。谢谢。

vectorizer = CountVectorizer()
output = vectorizer.fit_transform(train_data)
output_test = vectorizer.transform(test_data)

logistic = LogisticRegression(penalty = "l1")
logistic.fit(output, train_labels)
predictions = logistic.predict(output_test)

logistic = LogisticRegression(penalty = "l2", C = i + 1)
output = logistic.fit_transform(output, train_labels)
predictions = logistic.predict(output_test)

显示以下错误消息,该消息来自上一个预测行。原始功能数量为26879:

ValueError: X has 26879 features per sample; expecting 7087

1 个答案:

答案 0 :(得分:3)

这里似乎有一些问题。 首先,我建议你给两个逻辑模型赋予不同的名称,因为你需要两个进行预测。 在你的代码中,你永远不会调用l1逻辑回归的变换,这不是你想要做的。 你应该做的是

l1_logreg = LogisticRegression(penalty="l1")
l1_logreg.fit(output, train_labels)
out_reduced = l1_logreg.transform(out)
out_reduced_test = l1_logreg.transform(out_test)
l2_logreg = LogisticRegression(penalty="l2")
l2_logreg.fit(out_reduced, train_labels)
pedictions = l2_logreg.predict(out_reduced_test)

pipe = make_pipeline(CountVectorizer(), LogisticRegression(penalty="l1"),
                     LogisticRegression(penalty="l2"))
pipe.fit(train_data, train_labels)
preditions = pipe.predict(test_data)

仅供参考我不希望这比仅仅使用l2 logreg更好。你也可以试试SGDClassifier(惩罚=“弹性网”)。