首页 > 解决方案 > 使用单独的数据集进行模型验证

问题描述

抱歉,对sklearn来说很新。我正在尝试使用外部数据集对文本字符串进行二进制分类来验证模型。我已经训练了模型,但想将它用于另一个不同大小的数据集进行预测,而不是将数据包含在初始数据集拆分中。这甚至可能吗?

初始拆分

vectorizer = TfidfVectorizer(min_df=0.0, analyzer="char", sublinear_tf=True, ngram_range=(3, 3))
Xprod = vectorizer.fit_transform(prod_good)
X = vectorizer.fit_transform(total_requests)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=21)

测试模型

linear_svm=LinearSVC(C=1)
linear_svm.fit(X_train, y_train)
y_pred = linear_svm.predict(X_test)
score_test = metrics.accuracy_score(y_test, y_pred)
matrix = confusion_matrix(y_test, y_pred)

新预测

newpred = linear_svm.predict(Xprod)
...
Error:
ValueError: X has 4553 features per sample; expecting 24422

认为我在这里误解了一些基本概念

标签: machine-learningscikit-learnsvm

解决方案


该函数fit_transform生成 a fit,然后生成 a transform。所以这条线适合你的矢量化器,然后转换total_requestsX

X = vectorizer.fit_transform(total_requests)

由于您的矢量化器必须只安装一次(以便每次使用矢量化器时都具有相同的特征矩阵),因此要计算Xprod,您只需要使用transform

Xprod = vectorizer.transform(prod_good)

此外,您需要在安装矢量化器后计算 Xprod,因此在 X 之后计算 Xprod。


推荐阅读