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

Posted

技术标签:

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

enter image description here我在使用随机森林分类器时收到此错误。这是我的代码:

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

train = pd.read_csv("train.csv", index_col=None)    
vectorizer = CountVectorizer(min_df=1)    
X1 = vectorizer.fit_transform(train['question'])    
X=X1.toarray()    
corpus=['tell me your name']    
t1= vectorizer.fit_transform(corpus)    
t=t1.toarray()    
number=LabelEncoder()   
train['answer']=number.fit_transform(train['answer'].astype('str'))    
features = ['question','answer']    
y= train['question'].values    
clf=RandomForestClassifier(n_estimators=20)    
clf.fit(X,y)    
predicted_result=clf.predict(t)

【问题讨论】:

你为什么要同时为 X 和 y 提供 train['question']? 【参考方案1】:

对训练数据和测试数据使用相同的训练向量器。在第二次,如果你再次拟合数据,那么它将仅基于这些新数据将其转换为向量。

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

【讨论】:

我从另一个文件中获取了测试数据,并尝试了矢量化器。它的工作原理! 现在我想知道我的输出是整数,因为我在训练时将字符串转换为整数,但我希望字符串作为输出。给我建议 我没找到你。如果你想要字符串,那么这就是输入。 Vectorizer 意味着将您的字符串 ip 转换为整数的向量 @KapilSen 你想让predicted_result 成为字符串吗?那么您应该在y 中提供它。无需对其进行编码。大多数 scikit 估计器支持 y 中的字符串(不是 X)。 @rakesh 我想成为字符串作为输出。我的问题解决了。

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

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

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

CNN和Transformer相结合的模型

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

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

3dmax中cs骨骼教程