[英]Using multiple features with 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()調用之后的預處理階段。 我認為問題在於格式化數據的方式,但是我不知道如何正確處理數據。
feature1和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']]
特定的錯誤消息使您的代碼似乎期望某處為str
(以便可以調用.lower
),但它接收的是整個數組(可能是str
的整個數組)。
您可以編輯問題以更好地描述數據並發布完整的追溯,而不僅僅是帶有命名錯誤的小部分嗎?
同時,您也可以嘗試
data = df[['feature1', 'feature2']].values
和
df['target'].values
而不是自己顯式轉換為np.ndarray
。
在我看來,好像正在制作一個數組,它是1x1,而“數組”中的單例元素本身就是一個ndarray
。
如果您的文本列具有相同的編碼器/轉換器,則將這些列合並在一起。
data = np.append(df.feature1. df.feature2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.