Scikit learn: TypeError: аргумент float () должен быть строкой или числом, а не «Bunch» - PullRequest
1 голос
/ 06 октября 2019

Я хочу применить 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)

в строке clf.fit в позиции " training_labels " Я положил " vectorizer.vocabulary_.keys () "но это дает: ValueError: bad input shape (). Что я должен сделать, чтобы получить обученные ярлыки и заставить их работать?

1 Ответ

0 голосов
/ 06 октября 2019

Вы пытаетесь применить операцию числового масштабирования к текстовым данным. Это логически неверно. Если вы видите официальную документацию из MaxAbsScalar, ее функция:

Масштабировать каждую функцию по ее максимальному абсолютному значению

Если вы хотитечтобы найти векторы текстовых данных, вам нужно использовать что-то вроде CountVectorizer. См. этот пример из официальной документации здесь.

Кроме того, вы также можете попробовать TfIDfTransformer. Здесь - пример использования его с данными группы новостей.

...