python - 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
我已经搜索了有关此类错误的答案,但似乎没有任何内容与我的实际输入文件和问题相匹配。如果之前已经回答过,请提前道歉。
解决方案
这是因为您再次在验证数据上拟合矢量化器,而模型从训练数据中学习了拟合矢量化器,您可以通过将fit_transform
验证线上的 更改为transform
如下方式来修复它:
T = tfidfconverter.transform(validation_source_samples.iloc[:, 1]).toarray()
推荐阅读
- c# - 为什么通过 API 在 Windows 容器/任务中获取 AWS 凭证会超时?
- clang - LLVM 错误:解析内联 asm 时出错,意外令牌
- javascript - 无法将属性传递给角度指令构造函数
- sql - 如何根据条件转置 SQL 输出?
- docker - 尝试从 Docker 映像显示 destop 时从 VNC 查看器获取黑屏
- html - 如何在 vuejs 中强制 @change
- php - 所以说我有一个这样的目录
- azure - Start-ComplianceSearch 上的 TaskCanceledException
- angular - Angular 6,使用'_'作为参数
- javascript - 过滤数组以响应多个值