Python 3.x 未安装错误:TFIDFvectorier-词汇表不正确';t型蟒蛇

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

目标:预测原始数据上的标签

背景:我构建了一个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.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_列表的示例