模型的特征数量必须与输入相匹配。模型 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)