python - 无论实际内容如何,sklearn 文本分类模型都返回单个类
问题描述
我正在建立文本分类模型。并且由于某种原因,无论实际文本或行数如何,它都会返回我一个类。这就是我正在做的事情:
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']}
)
文本 |
---|
美国广播公司文本 |
xyz 文本 |
mnopr 文本 |
ijk 文本 |
rrr 文本 |
xxx 文本 |
如果我使用这种方法,那么我会得到不同类别的正确分类结果:
test_data2 = test_data.iloc[:,0]
gs_mnnb.predict(test_data2)
数组(['A 类','B 类','C 类','C 类','D 类','B 类'],dtype='<U30')
但是当我不应用 iloc 数据选择时:
gs_mnnb.predict(test_data)
然后我只会得到这种响应,无论有多少行或它们包含什么:
数组(['class A'],dtype='<U30')
解决方案
如果模型需要与. DataFrames
_ 像这样更改前两行代码(注意额外的方括号):X
y
DataFrames
Series
X = df[['text']]
y = df[['type']]
推荐阅读
- mysql - UID CHAR(20) 上的 SQL 连接
- regex - Perl:将带有贪婪量词的正则表达式转换为非贪婪的方法
- javascript - 如何将照片与网络摄像头进行比较?FaceAPI.js
- react-native - 使用 Raspberry Pi 反应原生 MQTT
- python - python graph - 如何对图中的节点列表进行排序
- google-bigquery - BigQuery 对于具有许多 WHERE IN 参数的小表查询非常慢
- swift - 用于 Swift 倒计时的圆形进度条
- python - KeyboardSpecialFunc 无法旋转opengl python
- dart - 如何在 intellij idea 中找到飞镖路径
- c++ - 如何用地图值序列化矢量地图