You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Sklearn训练波斯语文本情感分析模型后预测报错咨询

解决ValueError: X.shape[1] = 8 should be equal to 1500的问题

嘿,我一眼就发现了两个关键问题导致这个报错,咱们逐个拆解:

问题1:训练时保存的不是SVM分类器,而是测试集的预测结果

看你训练代码里的这段:

with open('svm_rbf_classifier.pkl', 'wb') as fid:
    _pickle.dump(y_pred, fid)

你把测试集的预测结果y_pred(一个数组)误存成了"分类器",但实际上你应该保存训练好的classifier_rbf模型!这会导致后续加载时,classifier_rbf根本不是有效的SVM模型,直接影响后续预测逻辑。

问题2:预测时错误使用fit_transform,而非transform

在预测代码里:

X = vectorizer.fit_transform([comment]).toarray()

fit_transform会重新拟合TF-IDF向量器——也就是针对这条新评论重新构建词汇表,所以生成的特征只有8个(这条评论里的有效词数量),完全和训练时的1500维特征空间不匹配。正确做法是只用transform,复用训练好的向量器的词汇表来转换新文本。

修正后的完整代码

训练阶段(保存正确的模型与向量器):

vectorizer = TfidfVectorizer(max_features=1500, sublinear_tf=True, use_idf=True, stop_words=stop_words)
X = vectorizer.fit_transform(data).toarray()
le = LabelEncoder()
le.fit(["pos", "neu", "neg"])
y = le.transform(data_labels)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
classifier_rbf = SVC(kernel='rbf', gamma=1, C=1)
classifier_rbf.fit(X_train, y_train)
y_pred = classifier_rbf.predict(X_test)

# 修正:保存训练好的SVM分类器
with open('svm_rbf_classifier.pkl', 'wb') as fid:
    _pickle.dump(classifier_rbf, fid)
# 保存训练好的TF-IDF向量器
with open('tfidf_vectorizer.pkl', 'wb') as fid:
    _pickle.dump(vectorizer, fid)

print(classification_report(y_test, y_pred))
print()
print(accuracy_score(y_test, y_pred))

预测阶段(用transform复用特征空间):

import _pickle
from sklearn.svm import SVC
from sklearn.feature_extraction.text import TfidfVectorizer

with open('tfidf_vectorizer.pkl', 'rb') as fid:
    vectorizer = _pickle.load(fid)
with open('svm_rbf_classifier.pkl', 'rb') as fid:
    classifier_rbf = _pickle.load(fid)

comment = 'من نسبت به نتایجی که تیم این روزا کسب میکنه نگرانم'
# 修正:只用transform,避免重新拟合词汇表
X = vectorizer.transform([comment]).toarray()
predicted = classifier_rbf.predict(X)
print(predicted)

额外提醒

别忘了保存LabelEncoder哦!不然预测出来的数字标签(0/1/2)没法对应回"pos"/"neu"/"neg"的情感标签,你可以用pickle把它也保存下来,预测时加载后用le.inverse_transform(predicted)转换回原标签。

内容的提问来源于stack exchange,提问作者Nariman Esmaiely Fard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:36:42