模型的特征数量必须与输入相匹配。模型 n_features 为 40,输入 n_features 为 38

Posted

技术标签:

【中文标题】模型的特征数量必须与输入相匹配。模型 n_features 为 40,输入 n_features 为 38【英文标题】:Number of features of the model must match the input. Model n_features is 40 and input n_features is 38 【发布时间】:2017-11-05 21:59:46 【问题描述】:

我收到此错误。请给我任何解决它的建议。这是我的代码。我从 train.csv 获取训练数据并从另一个文件 test.csv 测试数据。我是机器学习的新手,所以我不明白是什么问题。给我任何建议。

import quandl,math    
import numpy as np    
import pandas as pd    
import matplotlib.pyplot as plt
from matplotlib import style
import datetime
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import LabelEncoder
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import metrics
train = pd.read_csv("train.csv", index_col=None)
test = pd.read_csv("test.csv", index_col=None)
vectorizer = CountVectorizer(min_df=1)
X1 = vectorizer.fit_transform(train['question'])
Y1 = vectorizer.fit_transform(test['testing'])
X=X1.toarray()
Y=Y1.toarray()
#print(Y.shape)
number=LabelEncoder()
train['answer']=number.fit_transform(train['answer'].astype('str'))
features = ['question','answer']
y = train['answer']
clf=RandomForestClassifier(n_estimators=100)
clf.fit(X[:25],y)
predicted_result=clf.predict(Y[17])
p_result=number.inverse_transform(predicted_result)
f = open('output.txt', 'w')
t=str(p_result)
f.write(t)
print(p_result)

【问题讨论】:

【参考方案1】:

您的代码存在多个问题。 但是与这个问题相关的是,您在训练和测试数据上都拟合了 CountVectorizer (vectorizer),这就是您获得不同功能的原因。

你应该做的是:

X1 = vectorizer.fit_transform(train['question'])

# The following line is changed
Y1 = vectorizer.transform(test['testing'])

【讨论】:

@KapilSen 如果有帮助,请考虑接受答案。

以上是关于模型的特征数量必须与输入相匹配。模型 n_features 为 40,输入 n_features 为 38的主要内容,如果未能解决你的问题,请参考以下文章

模型的特征数量必须与输入相匹配。模型 n_features 为 40,输入 n_features 为 38

ValueError:模型的特征数量必须与输入匹配(sklearn)

CNN和Transformer相结合的模型

对具有不同结构的图进行监督学习的模型

RuntimeError:张量 a (4000) 的大小必须与非单维 1 的张量 b (512) 的大小相匹配

3dmax中cs骨骼教程