Python sklearn.linear_model: Linear Regression() ValueError occurred when .predict()
Python sklearn.linear_model: LinearRegression() ValueError occured when .predict()
我的训练矩阵 X 的形状为 (5182, 19231),y 是长度为 5182 的 1 和 0 的列表。我的测试矩阵的形状为 (496, 5477)。我将它们存储在单独的 pickle 文件中。这是我的代码:
def read(pklFile1):
f=open(pklFile1, 'rb')
Y = cPickle.load(f)
f.close()
return Y
if __name__ == '__main__':
X=read("results/train_feature.pkl")
y=read("results/train_label.pkl")
test=read("results/test_feature.pkl")
target=read("test_label.pkl")
clf=LogisticRegression()
clf=clf.fit(X, y)
predicted= clf.predict(test)
accuracy=np.mean(predicted == target)
print accuracy
当我运行我的代码时,运行ning
出现以下信息
predicted = clf.predict(test)
:
ValueError: X has 5477 features per sample; expecting 19231
我该如何解决?
您在 19231 个特征上训练了一个线性模型,但想要预测一些只有 5477 个特征的新样本。 这不是线性模型(或大多数分类器)的工作方式。特征数量需要相同!
由 19231 个变量的线性组合组成的线性模型应该如何仅对 5477 个变量起作用?如果在预测过程中某些变量是未知的,您可以估算它们(例如设置为零或均值),但即使是这种方法也需要知道变量的确切映射。 train 中的哪个变量对应于 predict 中的哪个变量。
我的训练矩阵 X 的形状为 (5182, 19231),y 是长度为 5182 的 1 和 0 的列表。我的测试矩阵的形状为 (496, 5477)。我将它们存储在单独的 pickle 文件中。这是我的代码:
def read(pklFile1):
f=open(pklFile1, 'rb')
Y = cPickle.load(f)
f.close()
return Y
if __name__ == '__main__':
X=read("results/train_feature.pkl")
y=read("results/train_label.pkl")
test=read("results/test_feature.pkl")
target=read("test_label.pkl")
clf=LogisticRegression()
clf=clf.fit(X, y)
predicted= clf.predict(test)
accuracy=np.mean(predicted == target)
print accuracy
当我运行我的代码时,运行ning
出现以下信息
predicted = clf.predict(test)
:
ValueError: X has 5477 features per sample; expecting 19231
我该如何解决?
您在 19231 个特征上训练了一个线性模型,但想要预测一些只有 5477 个特征的新样本。 这不是线性模型(或大多数分类器)的工作方式。特征数量需要相同!
由 19231 个变量的线性组合组成的线性模型应该如何仅对 5477 个变量起作用?如果在预测过程中某些变量是未知的,您可以估算它们(例如设置为零或均值),但即使是这种方法也需要知道变量的确切映射。 train 中的哪个变量对应于 predict 中的哪个变量。