Scikit Learn - ValueError: X has 26879 features per sample; expecting 7087
Scikit Learn - ValueError: X has 26879 features per sample; expecting 7087
我正在通过首先使用 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
这里似乎有几处不对劲。
首先,我建议你给这两个逻辑模型起不同的名字,因为你需要两者都做预测。
在你的代码中,你永远不会调用 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(penalty="elasticnet").
我正在通过首先使用 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
这里似乎有几处不对劲。 首先,我建议你给这两个逻辑模型起不同的名字,因为你需要两者都做预测。 在你的代码中,你永远不会调用 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(penalty="elasticnet").