首页 > 解决方案 > 多个特征作为 ML NLP 文本分析预测的输入

问题描述

我有 8 列作为输入和 1 列输出来预测。在尝试拟合 countvectorizer 和 tfidf 时,我得到了

ValueError: Found input variables with inconsistent numbers of samples: [7, 23752]

但是X_train.shapeX.shape当我应用 fit_transform 时是正确的,为什么会出现此错误?

代码

X_train, X_test, y_train, y_test = train_test_split(df[['A','B','C',
                                                   'D','E','F',
                                                   'G']], df.final, test_size=0.2, 
random_state = 42)
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfTransformer

nb = Pipeline([('vect', CountVectorizer()),
           ('tfidf', TfidfTransformer()),
           ('clf', MultinomialNB()),
          ])
nb.fit(X_train, y_train)

Notebook_Code_Image

标签: pythonscikit-learn

解决方案


CountVectorizer 应用于字符串,而不是 NumPy 数组。

https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html

TfidfTransformer 将在 CountVectorizer 计数矩阵上工作,因此您的管道没有意义,您也缺少参数。

由于您已经拥有 numpy 数组表示,因此只需直接适合 NB 分类器。

X_train, X_test, y_train, y_test = train_test_split(df[['A','B','C',
                                                   'D','E','F',
                                                   'G']], df.final, test_size=0.2, 
random_state = 42)

from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(X_train, y_train)

推荐阅读