文本分类问题
下面我们来看一个文本分类问题,经典的新闻主题分类,用朴素贝叶斯怎么做。
In [193]:
1 | import jieba |
1 | 他/来到/东海/识别区 |
In [175]:
1 | #coding: utf-8 |
文本处理¶
1、把训练样本划分为训练集和测试集
2、统计了词频,按词频降序生成词袋
In [137]:
1 | # 文本处理,也就是样本生成过程 |
In [138]:
1 | print ("start") |
1 | start |
停用词文件去重
这个停用词文件不是很官方,所以需要清洗下
In [140]:
1 | # 粗暴的词去重 |
In [145]:
1 | # 生成stopwords_set |
1 | 428 |
词袋中选取有代表性的特征词
第一步生成的词袋里有很多通用的、无意义的词语,需要去掉。
有代表性的词语很大概率是一些对最终类别区分有作用的词语。并且后面这些词语会作为特征作为模型的输入。
In [125]:
1 | def words_dict(all_words_list, deleteN, stopwords_set=set()): |
In [149]:
1 | deleteN = 20 |
1 | ['游客', '旅游', '导弹', '大陆', '一个', '公司', '火炮', '考生', '台军', '认为', '北京', '已经', '解放军', '一种', '时间', '各种', '进行', '市场', '主要', '美国', '五一', '支付', '黄金周', '增长', '成为', '复习', '很多', '目前', '没有', '记者', '问题', '分析', '远程', '万人次', '射程', '接待', '基础', '部分', '部署', '作战', '一定', '选择', '辅导班', '考试', '词汇', '技术', '比赛', '文章', '完全', '可能', '收入', '工作', '时候', '今年', '表示', '期间', '企业', 'VS', '能力', '达到', '毕业生', '上海', '表现', '影响', '比较', '人数', '用户', '相对', '专家', '服务', '重要', '拥有', '需要', '训练', '开始', '销售', '通过', '阵地', '资料', '情况', '要求', '阅读', '老师', '新浪', '坦克', '网络', '军事', '英语', '项目', '历史', '设计', '几乎', '这是', '写作', '日本', '考古', '不同', '提高', '活动', '公里'] |
训练和测试集生成固定长度的词向量特征
这步为后面数据输入进贝叶斯模型训练做准备。
因为文本长度不一,所以每个样本需要固定好维度,才能喂给模型训练。
In [153]:
1 | # 文本特征 |
In [169]:
1 | flag = 'sklearn' |
1 | 71 |
贝叶斯模型开始训练和预测
In [176]:
1 | # 分类,同时输出准确率等 |
In [177]:
1 | flag='sklearn' |
1 | 0.7368421052631579 |
可视化
这步调参,查看不同的deleteNs对模型效果的影响
In [179]:
1 | print ("start") |
1 | start |
1 | finished |