【问题标题】:'numpy.ndarray' object has no attribute 'lower''numpy.ndarray' 对象没有属性 'lower'
【发布时间】: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 数组转换为字符串列表。我使用了这个:&gt;&gt;X_train = np.array(X_train).tolist() &gt;&gt;y_train = np.array(y_train).tolist() 但这只是将我的数组转换为列表列表。所以我不得不再写两行:&gt;&gt;X_train = list(map(''.join, X_train)) &gt;&gt;y_train = list(map(''.join, y_train)) 有没有更短的方法可以做到这一点?谢谢!

标签: numpy scikit-learn text-classification naivebayes tfidfvectorizer


【解决方案1】:

您已经检查了数组的形状,但您是否尝试过类似的方法:

data = vectorizer.fit_transform(array.ravel())

这应该对你有用

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 2020-10-06
    • 2019-12-07
    • 1970-01-01
    • 2019-06-29
    • 2020-10-22
    • 2016-09-29
    • 2019-03-19
    • 2021-08-23
    相关资源
    最近更新 更多