Scikit学习:TypeError:float()参数必须是字符串或数字,而不是'Bunch'

时间:2019-10-06 11:32:50

标签: python pandas scikit-learn nlp

我想使用以下方法应用 svm ,但是显然“ Bunch”类型不合适。

通常,对于 Bunch (类似于字典的对象),有趣的属性是:“数据”(要学习的数据)和“目标”(分类标签)。您可以相应地访问.data和.target信息。有了下面的代码,如何使它工作?

import pandas as pd
from sklearn import preprocessing

#Call the data below using scikit learn which stores them in Bunch

newsgroups_train = fetch_20newsgroups(subset='train',remove=('headers', 'footers', 'quotes'), categories = cats)
newsgroups_test = fetch_20newsgroups(subset='test',remove=('headers', 'footers', 'quotes'), categories = cats)
vectorizer = TfidfVectorizer( stop_words = 'english') #new

vectors = vectorizer.fit_transform(newsgroups_train.data) #new

vectors_test = vectorizer.transform(newsgroups_test.data) #new

max_abs_scaler = preprocessing.MaxAbsScaler()
scaled_train_data = max_abs_scaler.fit_transform(vectors)#corrected
scaled_test_data = max_abs_scaler.transform(vectors_test)
clf=CalibratedClassifierCV(OneVsRestClassifier(SVC(C=1)))
clf.fit(scaled_train_data, train_labels)
predictions=clf.predict(scaled_test_data)
proba=clf.predict_proba(scaled_test_data)
trained_labels 位置的clf.fit行中的

我放了“ vectorizer.vocabulary_.keys ()”,但它给出了:{{1 }}。我应该怎么做才能获得训练有素的标签并使其起作用?

1 个答案:

答案 0 :(得分:0)

您正在尝试对文本数据应用数值缩放操作。从逻辑上讲这是不正确的。如果您看到MaxAbsScalar中的the official documentation,则其功能是:

  

按其最大绝对值缩放每个特征

如果要查找文本数据的向量,则需要使用类似CountVectorizer的东西。请参阅此处的官方文档this example

或者,您也可以尝试TfIDfTransformerHere是将其与新闻组数据一起使用的示例。