首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中提高不平衡数据集的查准率和召回率

如何在Python中提高不平衡数据集的查准率和召回率
EN

Stack Overflow用户
提问于 2018-07-17 07:38:16
回答 1查看 3.2K关注 0票数 2

我构建了一个有监督的模型来对医学文本数据进行分类(我的输出预测了疾病的积极或消极发生)。数据非常不平衡(130例阳性病例与1600例阴性病例相比,这是可以理解的,因为这种疾病很罕见)。我首先清理了数据(删除了不必要的单词、词汇化等)。并在事后应用了POS。然后,我对清理后的数据应用了TfidfVectorizer和TfidfTransformer。对于分类,我尝试了支持向量机和随机森林,但即使在使用GridSearchCV调整了它们的参数(我还设置了class_weight = 'balanced')之后,对于正数据也只达到了56%的准确率和58%的召回率。有没有人有关于如何改善这种低准确率和召回率的建议?非常感谢。

这是我当前的Pipeline (显然我在运行它时只使用了其中一个分类器,但我显示这两个分类器只是为了显示它们的参数)。

代码语言:javascript
复制
pipeline = Pipeline([ 

('vectors', TfidfVectorizer(ngram_range = (2,3),norm = 'l1', token_pattern = r"\w+\b\|\w+" ,min_df = 2, max_features = 1000).fit(data['final'])),

('classifier', RandomForestClassifier(n_estimators = 51, min_samples_split = 8, min_samples_leaf = 2, max_depth = 14, class_weight= 'balanced')),

('classifier', SVC(C = 1000, gamma = 1, class_weight = 'balanced', kernel='linear')),

])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 07:50:17

首先,看看你的分类器看到的数据。测量特征和类之间的相关性(Pearson相关性很好),并检查是否有不相关的特征。例如,患者这个词通常不会被认为是一个停用词,但在医学数据库中,它很可能是一个停用词。

还要考虑使用更复杂的特征,如二元语法或三元语法,甚至添加单词嵌入(例如,采用预先训练的模型,如word2vec或GloVe,然后采用平均文本向量)。

注:如今,文本分类主要是通过神经网络和单词嵌入来完成的。也就是说,您的数据集不是很大,因此可能不值得更改方法(或者出于某种原因,您可能不想这样做)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51371356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档