【问题标题】:Sklearn text classification model returns single class regardless of actual contentSklearn 文本分类模型无论实际内容如何都返回单个类
【发布时间】:2021-07-08 21:41:01
【问题描述】:

我正在构建文本分类模型。并且由于某种原因,无论实际文本或行数如何,它都会返回给我一个类。这就是我正在做的事情:

X = df['text']
y = df['type']
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 13)

pipe_mnnb = Pipeline(steps = [('tf', TfidfVectorizer()), ('mnnb', MultinomialNB())])

pgrid_mnnb = {
 'tf__max_features' : [100, 250, 500],
 'tf__stop_words' : ['english', None],
 'tf__ngram_range' : [(1,1),(1,2)],
 'tf__use_idf' : [True, False],
 'mnnb__alpha' : [0.1, 0.5, 1]
}
gs_mnnb = GridSearchCV(pipe_mnnb,pgrid_mnnb,cv=5,n_jobs=-1)
gs_mnnb.fit(X_train, y_train)

然后我使用以下代码行仔细检查结果:

preds_mnnb = gs_mnnb.predict(X)
df['preds'] = preds_mnnb

一切看起来都不错。现在,我创建了一个我想应用分类模型的新数据框(我在这里使用虚拟数据):

test_data = pd.DataFrame({'text':['abc text',
                           'xyz text',
                           'mnopr text',
                           'ijk text',
                           'rrr text',
                           'xxx text']}
                        )
text
abc text
xyz text
mnopr text
ijk text
rrr text
xxx text

如果我使用这种方法,那么我会得到不同类别的正确分类结果:

test_data2 = test_data.iloc[:,0]
gs_mnnb.predict(test_data2)

array(['class A', 'class B', 'class C', 'C级','D级','B级'], dtype='

但是当我不应用 iloc 数据选择时:

gs_mnnb.predict(test_data)

那么我只会得到这种响应,不管有多少行或它们包含什么:

array(['class A'], dtype='

【问题讨论】:

    标签: python predict sklearn-pandas


    【解决方案1】:

    如果模型需要使用DataFrames,我会尝试的一件事是确保XyDataFrames - 目前,它们是Series。像这样更改前两行代码(注意额外的方括号):

    X = df[['text']]
    y = df[['type']]
    

    【讨论】:

    • 谢谢。遵循您的建议后,在拟合模型时出现以下错误:ValueError: Found input variables with contrast numbers of samples: [1, 149] 尽管数据的形状相同:X_train.shape y_train.shape (149, 1 ) (149, 1)
    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 2018-05-27
    • 1970-01-01
    • 2021-06-02
    • 2017-02-05
    • 2020-08-11
    • 2019-08-04
    • 2012-02-15
    相关资源
    最近更新 更多