Я работаю над классификацией текста, используя scikit-learn. Все хорошо работает с одной функцией, но введение нескольких функций дает мне ошибки. Я думаю, проблема заключается в том, что я не форматирую данные так, как этого требует классификатор.Использование нескольких функций с scikit-learn
Например, это работает отлично:
data = np.array(df['feature1'])
classes = label_encoder.transform(np.asarray(df['target']))
X_train, X_test, Y_train, Y_test = train_test_split(data, classes)
classifier = Pipeline(...)
classifier.fit(X_train, Y_train)
Но это:
data = np.array(df[['feature1', 'feature2']])
classes = label_encoder.transform(np.asarray(df['target']))
X_train, X_test, Y_train, Y_test = train_test_split(data, classes)
classifier = Pipeline(...)
classifier.fit(X_train, Y_train)
умирает с
Traceback (most recent call last):
File "/Users/jed/Dropbox/LegalMetric/LegalMetricML/motion_classifier.py", line 157, in <module>
classifier.fit(X_train, Y_train)
File "/Library/Python/2.7/site-packages/sklearn/pipeline.py", line 130, in fit
Xt, fit_params = self._pre_transform(X, y, **fit_params)
File "/Library/Python/2.7/site-packages/sklearn/pipeline.py", line 120, in _pre_transform
Xt = transform.fit_transform(Xt, y, **fit_params_steps[name])
File "/Library/Python/2.7/site-packages/sklearn/feature_extraction/text.py", line 780, in fit_transform
vocabulary, X = self._count_vocab(raw_documents, self.fixed_vocabulary)
File "/Library/Python/2.7/site-packages/sklearn/feature_extraction/text.py", line 715, in _count_vocab
for feature in analyze(doc):
File "/Library/Python/2.7/site-packages/sklearn/feature_extraction/text.py", line 229, in <lambda>
tokenize(preprocess(self.decode(doc))), stop_words)
File "/Library/Python/2.7/site-packages/sklearn/feature_extraction/text.py", line 195, in <lambda>
return lambda x: strip_accents(x.lower())
AttributeError: 'numpy.ndarray' object has no attribute 'lower'
на стадии предварительной обработки после classifier.fit() называется. Я думаю, проблема в том, что я форматирую данные, но я не могу понять, как правильно это сделать.
особенность1 и feature2 - это как английские текстовые строки, так и цели. Я использую LabelEncoder() для кодирования цели, которая, кажется, работает нормально.
Вот пример того, что возвращает print data
, чтобы дать вам представление о том, как оно отформатировано прямо сейчас.
[['some short english text'
'a paragraph of english text']
['some more short english text'
'a second paragraph of english text']
['some more short english text'
'a third paragraph of english text']]
Ну, как вы форматируете данные? Я вообще обнаружил, что могу просто передать pandas DataFrame непосредственно на функции 'scikit', и он работает нормально. – BrenBarn
Я пробовал передать DataFrame непосредственно в 'train_test_split()', и я получаю ту же ошибку. 'train_test_split (df ['feature1'], label_encoder.transform (df ['target']))' отлично работает. 'train_test_split (df [['feature1', 'feature2']], label_encoder.transform (df ['matches']))' does not. –
Можете ли вы распечатать, что выглядит 'X_train' в каждом из двух случаев. – ely