Skip to content

alicelmx/SVM-Chinese-Classification

Repository files navigation

SVM-Chinese-Classification

利用支持向量机实现中文文本分类

先放GitHub代码,如果觉得写得不错,记得加个star哦,嘻嘻~

基本流程

1、准备好数据食材、去停用词并利用结巴**(jieba)进行分词处理**

数据食材选用参考:NLP中必不可少的语料资源

jieba分词模块参考官方文档啦~

# 参照代码中的cutWords.py文件

2、利用卡方检验特征选择

**卡方检验:**在构建每个类别的词向量后,对每一类的每一个单词进行其卡方统计值的计算。

  1. 首先对卡方 检验所需的 a、b、c、d 进行计算。 a 为在这个分类下包含这个词的文档数量; b 为不在该分类下包含这个词的文档数量; c 为在这个分类下不包含这个词的文档数量; d 为不在该分类下,且不包含这个词的文档数量。
  2. 然后得到该类中该词的卡方统计值 公式为 float(pow((ad - bc), 2)) /float((a+c) * (a+b) * (b+d) * (c+d))。
  3. 对每一类别的所有词按卡方值进行排序,取前 k 个作为该类的特征值,这里我们取 k 为 1000
# featureSelection.py

3、利用TFIDF算法*进行特征权重计算

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% 这里写图片描述

目前这个阶段,能够讲到这个程度,以后在补充吧,小明酱撤退了~

About

利用支持向量机实现中文文本分类

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published