我的训练矩阵X的形状为(5182, 19231),y是一个长度为5182的由1和0组成的列表。我的测试矩阵的形状为(496, 5477)。我将它们存储在不同的pickle文件中。以下是我的代码:
def read(pklFile1): f=open(pklFile1, 'rb') Y = cPickle.load(f) f.close() return Yif __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
当我运行代码时,在运行predicted = clf.predict(test)
时出现了以下消息:
ValueError: X has 5477 features per sample; expecting 19231
如何解决这个问题?
回答:
您在一个具有19231个特征的线性模型上进行了训练,但想要用只有5477个特征的新样本进行预测。这不是线性模型(或大多数分类器)的工作方式。特征的数量必须相同!
您的线性模型由19231个变量的线性组合构成,如何仅用5477个变量来工作呢?如果在预测期间某些变量未知,您可以对它们进行填补(例如,设为零或平均值),但即使这种方法也需要知道变量的确切映射。训练中的哪个变量对应于预测中的哪个变量。