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

我遇到了这个错误。请给我一些解决建议。这里是我的代码。我从train.csv中获取训练数据,从另一个文件test.csv中获取测试数据。我是机器学习的新手,所以我不明白问题出在哪里。请给我一些建议。

import quandl,math    import numpy as np    import pandas as pd    import matplotlib.pyplot as pltfrom matplotlib import styleimport datetimefrom sklearn.ensemble import RandomForestClassifierfrom sklearn.preprocessing import LabelEncoderfrom sklearn.feature_extraction.text import CountVectorizerfrom sklearn import metricstrain = 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)

回答:

你的代码存在多个问题。但与这个问题相关的是,你在训练和测试数据上都对CountVectorizer (vectorizer)进行了拟合,这就是为什么你得到了不同的特征。

你应该做的是:

X1 = vectorizer.fit_transform(train['question'])# 以下这行已更改Y1 = vectorizer.transform(test['testing'])

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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

输入图片描述我在使用随机森林分类器时遇到了这个错误。以下是我的代码:

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)

回答:

对于训练数据和测试数据,请使用相同的训练过的向量化器。如果第二次再次拟合数据,它将仅基于这组新数据生成向量。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注