作者:一切随缘2502885767 | 来源:互联网 | 2023-09-18 19:15
先放GitHub代码,如果觉得写得不错,记得加个star哦,嘻嘻~基本流程1、准备好数据食材、去停用词并利用结巴(jieba)进行分词处理数据食材选用参考:NLP中必不可少的语料资
先放GitHub代码,如果觉得写得不错,记得加个star哦,嘻嘻~
基本流程
1、准备好数据食材、去停用词并利用结巴(jieba)进行分词处理
数据食材选用参考:NLP中必不可少的语料资源
jieba分词模块参考官方文档啦~
# 参照代码中的cutWords.py文件
2、利用卡方检验特征选择
卡方检验:在构建每个类别的词向量后,对每一类的每一个单词进行其卡方统计值的计算。
1. 首先对卡方 检验所需的 a、b、c、d 进行计算。
a 为在这个分类下包含这个词的文档数量;
b 为不在该分类下包含这个词的文档数量;
c 为在这个分类下不包含这个词的文档数量;
d 为不在该分类下,且不包含这个词的文档数量。
2. 然后得到该类中该词的卡方统计值
公式为 float(pow((a*d – b*c), 2)) /float((a+c) * (a+b) * (b+d) * (c+d))。
3. 对每一类别的所有词按卡方值进行排序,取前 k 个作为该类的特征值,这里我们取 k 为 1000
# featureSelection.py
3、利用TF*IDF算法进行特征权重计算
TF-IDF算法:
- 全称叫 Term Frequency-Inverse Document Frequency 词频-逆文档频率算法
- 主要用于关键词抽取
- 优点:每个词的权重与特征项在文档中出现的频率成正比,与在整个语料中出现该特征项的文档数成反比。
- 原理解说:
训练文本的特征向量表示数据在 train.svm文件中,测试文本的特征向量表示数据在test.svm 中。
# featureWeight.py
3、基于训练文本的特征向量数据,使用LIBSVM库训练SVM 模型
使用libsvm对train.svm进行模型训练,和对test.svm模型进行预测
测试命令:
对train.svm文件数据进行缩放到[0,1]区间
./svm-scale -l 0 -u 1 train.svm > trainscale.svm
对test.svm文件数据进行缩放到[0,1]区间
./svm-scale -l 0 -u 1 test.svm > testscale.svm
对trainscale.svm 文件进行模型训练
./svm-train -s 1 trainscale.svm trainscale.model
对testscale.svm 文件进行模型预测,得到预测结果,控制台会输出正确率
./svm-predict testscale.svm trainscale.model testscale.result
4、对于测试集进行特征向量表示,代入训练得到的 SVM 模型中进行预测分类
预测结果:92%
目前这个阶段,能够讲到这个程度,以后在补充吧,小明酱撤退了~