首页 > 解决方案 > int 和 string txt 的分类抛出 ValueError: Number of features of the model must match the input。模型 n_features

问题描述

我对机器学习相当陌生,抱歉,我正在尝试从一个包含训练样本的 txt 文件中读取:

123 这是一个长文本字符串

325 另一个文本

我的labels.txt文件是这样的:

123 1

325 2

因此,经过多次尝试,我设法用熊猫阅读了它们:

train_labels = pd.read_csv('train_labels.txt', nrows=200, dtype=str, delimiter="\t", header=None)

train_samples = pd.read_csv('train_samples.txt', nrows=200, dtype=str, encoding="UTF-8", delimiter="\t", header=None)

我用矢量化器转换了我的火车样本中的字符串列

from sklearn.feature_extraction.text import TfidfVectorizer

tfidfconverter = TfidfVectorizer(max_features=1500, min_df=5, max_df=0.7, stop_words=stop_words)

X = tfidfconverter.fit_transform(train_samples.iloc[:, 1]).toarray()

然后我尝试将我的分类器与随机森林相匹配

clf = RandomForestClassifier(n_estimators=1000, random_state=0)

clf.fit(X, train_labels) -> error

然后我阅读样本来计算我的准确度分数

validation_source_samples = pd.read_csv('validation_source_samples.txt', nrows=200, dtype=str, encoding="UTF-8", delimiter="\t", header=None)

validation_source_labels = pd.read_csv('validation_source_labels.txt', nrows=200, dtype=str, delimiter="\t", header=None)

T = tfidfconverter.fit_transform(validation_source_samples.iloc[:, 1]).toarray()


pred = clf.predict(T)

clf.predict我得到错误:

`ValueError: Number of features of the model must match the input`. 

模型 n_features 为 780,输入 n_features 为 879

我已经搜索了有关此类错误的答案,但似乎没有任何内容与我的实际输入文件和问题相匹配。如果之前已经回答过,请提前道歉。

标签: pythonmachine-learningscikit-learn

解决方案


这是因为您再次在验证数据上拟合矢量化器,而模型从训练数据中学习了拟合矢量化器,您可以通过将fit_transform验证线上的 更改为transform如下方式来修复它:

T = tfidfconverter.transform(validation_source_samples.iloc[:, 1]).toarray()

推荐阅读