Python 3.x 未安装错误:TFIDFvectorier-词汇表不正确';t型蟒蛇
目标:预测原始数据上的标签 背景:我构建了一个SVM分类器 我正在使用以下代码: 0)导入模块Python 3.x 未安装错误:TFIDFvectorier-词汇表不正确';t型蟒蛇,python-3.x,machine-learning,svm,tf-idf,predict,Python 3.x,Machine Learning,Svm,Tf Idf,Predict,目标:预测原始数据上的标签 背景:我构建了一个SVM分类器 我正在使用以下代码: 0)导入模块 import numpy as np from sklearn import cross_validation from sklearn import datasets from sklearn import svm from sklearn.model_selection import StratifiedKFold from sklearn.metr
import numpy as np
from sklearn import cross_validation
from sklearn import datasets
from sklearn import svm
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import precision_score, recall_score,accuracy_score
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import precision_recall_fscore_support
precision_scores = []
recall_scores = []
f_scores = []
for train_index, test_index in skf.split(X, y):
X_train = X[train_index]
X_test = X[test_index]
y_train = y[train_index]
y_test = y[test_index]
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
precision_scores.append(scores[0])
recall_scores.append(scores[1])
f_scores.append(scores[2])
1)X\u列表
和y
type(X_list) #list, strings
len(X_list) #2163
type(y) #numpy.ndarray
len(y) #2163
type(X_original) #list, strings
len(X_original) #2163
2)将X_列表
从字符串转换为浮点,使用tfidf
tfidf = TfidfVectorizer()
X_vec = tfidf.fit_transform(X_list)
X = X_vec.toarray()
3)X
shape
X.shape (2163, 8753)
4)10倍验证和SVM
skf = StratifiedKFold(n_splits=10)
clf = svm.SVC(kernel='linear', C=1)
5)循环10次
import numpy as np
from sklearn import cross_validation
from sklearn import datasets
from sklearn import svm
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import precision_score, recall_score,accuracy_score
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import precision_recall_fscore_support
precision_scores = []
recall_scores = []
f_scores = []
for train_index, test_index in skf.split(X, y):
X_train = X[train_index]
X_test = X[test_index]
y_train = y[train_index]
y_test = y[test_index]
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
precision_scores.append(scores[0])
recall_scores.append(scores[1])
f_scores.append(scores[2])
6)对原始数据集进行预测
type(X_list) #list, strings
len(X_list) #2163
type(y) #numpy.ndarray
len(y) #2163
type(X_original) #list, strings
len(X_original) #2163
7)将X_原始
从字符串转换为浮点
tfidf = TfidfVectorizer()
X_original_transform = tfidf.transform(X_original)
但当我这样做时,会出现以下错误
`NotFittedError: TfidfVectorizer - Vocabulary wasn't fitted.`
所以有一个类似的问题,但它似乎与我的问题不同
8)如何修复此错误?在上面的第(7)点中,您可以看到您正在再次初始化tfidf
,这将生成一个没有任何数据或信息的TfidfVectorizer的新实例。那你就不合适了。因此出现了错误。
您需要以与第(2)点相同的方式调用fit()
将第(7)点更改为:
同样在第(2)点中,首先在整个数据集上安装TFIDFvectorier,然后将其拆分为train和test。不建议这样做,因为这样会在训练时将有关数据的信息泄漏给模型。想想这是如何在现实世界中工作的。你有没有关于你想提前预测的数据的所有信息?不可以。您在可用数据上训练模型,并在看不见的数据上使用它。第(2)点中的当前代码打破了这一点
始终首先分为训练和测试,然后仅对训练数据进行训练(fit()
),并使用该信息对测试数据应用(transform()
)
更改如下:
1) 首先删除第(2)点中的代码。我们将在folds迭代中进行
2) 更改点(5)如:
你能发布完整的代码吗?不仅仅是片段。您是否在任何地方再次初始化了
tfidf
?我已经更新了我的代码以显示几乎完整的版本(除了实际的X
或y
),感谢您提供了详细的指针和代码。然而,当我在()1中尝试上面列出的TypeError Traceback(最近一次调用last)时,我得到了以下错误:在skf.split(X_list,y)中,通过10倍2的train#index,test_index循环,测试skf.split(X_list,y):--->3x_train=X_list[train_index]4x_test=X_list[test_index]5 y\u列=y[列索引]
TypeError:只有整数标量数组才能转换为标量数组index@EER在这种情况下,请展示一些x_列表的示例