【发布时间】:2020-09-22 04:20:32
【问题描述】:
我对 ML 相当陌生,我正在尝试在我的 NB 分类器上拟合一些数据。
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.svm import LinearSVC
# Naïve Bayes:
text_clf_nb = Pipeline([('tfidf', TfidfVectorizer()),
('clf', MultinomialNB()),
])
# Linear SVC:
text_clf_lsvc = Pipeline([('tfidf', TfidfVectorizer()),
('clf', LinearSVC()),
])
拟合数据的代码:
text_clf_nb.fit(X_train, y_train)
我的训练和测试数据的形状是
X_train.shape, X_test.shape, y_train.shape, y_test.shape : ((169, 1), (84,), (169, 1), (84,))
但不断收到:'numpy.ndarray' object has no attribute 'lower'
这是错误的完整跟踪:
AttributeError Traceback (most recent call last)
<ipython-input-57-139757126594> in <module>
----> 1 text_clf_nb.fit(X_train, y_train)
~\miniconda3\envs\nlp_course\lib\site-packages\sklearn\pipeline.py in fit(self, X, y, **fit_params)
263 This estimator
264 """
--> 265 Xt, fit_params = self._fit(X, y, **fit_params)
266 if self._final_estimator is not None:
267 self._final_estimator.fit(Xt, y, **fit_params)
~\miniconda3\envs\nlp_course\lib\site-packages\sklearn\pipeline.py in _fit(self, X, y, **fit_params)
228 Xt, fitted_transformer = fit_transform_one_cached(
229 cloned_transformer, Xt, y, None,
--> 230 **fit_params_steps[name])
231 # Replace the transformer of the step with the fitted
232 # transformer. This is necessary when loading the transformer
~\miniconda3\envs\nlp_course\lib\site-packages\sklearn\externals\joblib\memory.py in __call__(self, *args, **kwargs)
340
341 def __call__(self, *args, **kwargs):
--> 342 return self.func(*args, **kwargs)
343
344 def call_and_shelve(self, *args, **kwargs):
【问题讨论】:
-
@talonmies 上述帖子中的答案建议将 np 数组转换为字符串列表。我使用了这个:
>>X_train = np.array(X_train).tolist() >>y_train = np.array(y_train).tolist()但这只是将我的数组转换为列表列表。所以我不得不再写两行:>>X_train = list(map(''.join, X_train)) >>y_train = list(map(''.join, y_train))有没有更短的方法可以做到这一点?谢谢!
标签: numpy scikit-learn text-classification naivebayes tfidfvectorizer