【文本分类】基于改进CHI和PCA的文本特征选择

简介: 【文本分类】基于改进CHI和PCA的文本特征选择

摘要:改进CHI算法后,结合PCA算法,应用于文本的特征选择,提高了精度。

参考文献:[1]文武,万玉辉,张许红,文志云.基于改进CHI和PCA的文本特征选择[J].计算机工程与科学,2021,43(09):1645-1652.

一、引言


  文本特征空间的高维稀疏性严重影响了分类器的训练效率及分类精度,需要使用一些算法对高维的矩阵来降维、去噪。常用的特征选择算法有:文档频率DF、互信息MI、卡方检验CHI、信息增益IG、主成分分析PCA

二、基础算法


2.1、CHI算法【卡方统计】


  基本思想如下所示:

  (1)由CHI计算公式计算特征词与类别的CHI值;

  (2)根据所有特征与类别的CHI值大小排序;

  (3)选取前T个特征词作为输出特征子集。

  CHI算法的主要目的是筛选出和类别相关性强的特征,去除噪声特征,实现降维。

  初始卡方统计公式

image.png

 以上公式中A、B、C、D的含义如下:

` Ci类 非Ci类
含有特征tk的文本数 A B
不含有特征tk的文本数 C D

  如果数据集有n类,那么一个特征对每个类别都会有一个CHI值,这里会涉及到卡方值的选取模型问题,有2种方式:

  1、求n个卡方值的max

  2、求n个卡方值的avg

  通常使用第1种,max值更具有代表性,更能表达出一个特征对分类的话语权。

2.2、PCA算法【主成分分析】


  基本思想如下所示:

image.png

  主成分分析 PCA 在尽可能保留较多原始特征信息的基础上,根据方差最大化,将原始的高维特征重新组合在低维空间上表达出来,提取出贡献率大的综合特征,实现降维。

PCA是特征选择,还是特征杂糅在一起(综合)?求解。

2.3、CHI算法的改进ICHI


  从CHI算法的缺点出发:

 1、词频问题。CHI算法仅考虑特征词是否出现在文档中,没有考虑特征词的出现次数。原始CHI公式中,A、B、C、D计算的都是特征是否在文本中出现,而不是特征在文本中出现的几次,相当于求布尔值。


 2、文档分布。对于具体类别内部,若某特征词仅在此类中的个别文档中出现,在其它文档中不出现,则该特征词所代表的类别信息就少很多。


 3、类别频。若特征词只出现在极少类别中,它就会比在较多类别中都出现的特征更重要。


 4、负相关特性。负相关特性会对特征的重要性产生负面的影响,从CHI的原始公式中可以看出,特征词与类别成正相关,即A×D-B×C>0,卡方值越大,特征越重要。若特征词与类别成负相关,即A×D-B×C <0,该特征词对此类别越不重要,卡方值应越小,但实际卡方值却变大,这就影响了分类效果。

理论上说,由于CHI的原始公式是求平方的,如果负相关,最终平方也是大于零的。但是卡方值算的就是数据的信息程度,越偏离,信息量越大。此处有待研究。

 CHI算法的缺点的解决办法:

  1、词频问题。引入基于类别文档归一化的特征频度因子。同时为了防止分布不均匀,主要措施是特征词在文本内归一化,再在类别内归一化。公式如下:

image.png

 2、文档分布。提出了类别内部特征词的文档分布因子。算一下特征在内中分布。公式如下:

image.png

 3、类别频。 提出了逆类别分布因子。类似于TF-IDF思想。公式如下:

image.png

 4、负相关特性。解决办法是当A×D-B×C <0,卡方值直接为0。

总结:

  最终改进后的ICHI算法公式为:

image.png

三、代码实验


3.1、实验思路


  根据以下4种方法:

  (1)普通CHI算法来选择特征

  (2)改良ICHI算法来选择特征

  (3)普通CHI算法来选择特征 + PCA

  (4)改良ICHI算法来选择特征 + PCA

  比较不同算法之间,文本分类的准确率。

3.2、数据集


  数据来源于 https://github.com/cystanford/text_classification 。数据集共包含四个类别,分别为“女性”,“体育”,“文学”,“校园”,原始数据集已经划分了测试集和训练集,并给出了停用词文档。

3.3、实验结果


特征维度 sklean的chi2卡方 手写普通卡方CHI 手写改进卡方ICHI 手写普通卡方+PCA 手写改进卡方ICHI+PCA
4000 0.86 0.875 0.875 0.87 0.88
6000 0.865 0.885 0.885 0.88 0.885
8000 0.88 0.855 0.875 0.855 0.88
10000 0.87 0.875 0.88 0.875 0.88
12000 0.865 0.865 0.875 0.875 0.865
14000 0.87 0.87 0.885 0.875 0.88
6000 0.88 0.87 0.895 0.885 0.89
18000 0.875 0.865 0.9 0.875 0.89
20000 0.87 0.865 0.875 0.885 0.87
22000 0.875 0.865 0.885 0.9 0.89
24000 0.87 0.875 0.885 0.89 0.88

 【注】PCA算法降维到3000个特征。

  实验结果分析:

  1、对比chi2、CHI、ICHI方法,可以看到ICHI算法准确率效果确实最好;

  2、对比CHI+PCA、ICHI+PCA,可以看到仍然是ICHI+PCA效果好。

相关文章
|
算法 计算机视觉 开发者
OpenCV中使用Eigenfaces人脸识别器识别人脸实战(附Python源码)
OpenCV中使用Eigenfaces人脸识别器识别人脸实战(附Python源码)
820 0
|
计算机视觉 Python
AttributeError: module ‘cv2‘ has no attribute ‘face‘
AttributeError: module ‘cv2‘ has no attribute ‘face‘
593 0
|
监控 安全 Unix
在Linux中,有哪些安全审计工具?
在Linux中,有哪些安全审计工具?
|
数据采集 机器学习/深度学习 PyTorch
PyTorch中的数据加载与预处理
【4月更文挑战第17天】了解PyTorch中的数据加载与预处理至关重要。通过`Dataset`和`DataLoader`,我们可以自定义数据集、实现批处理、数据混洗及多线程加载。`transforms`模块用于数据预处理,如图像转Tensor和归一化。本文展示了CIFAR10数据集的加载和预处理示例,强调了这些工具在深度学习项目中的重要性。
|
运维 虚拟化
VPS和云服务器有哪些区别?
VPS和云服务器有哪些区别?VPS(Virtual Private Server)和云服务器都是虚拟化技术的产物,但它们之间有以下几个不同点
|
数据可视化 C++
vscode插件离线安装及常见错误
本文简单介绍了vscode如何离线安装插件,以及2种具体的安装方式,最后给出了在插件安装过程中版本不一致时如何解决的方案,希望可以帮助到正在阅读的你​。
4801 0
vscode插件离线安装及常见错误
|
机器学习/深度学习 人工智能 算法
Dataset之Fashion-MNIST:Fashion-MNIST数据集简介、下载、使用方法之详细攻略
Dataset之Fashion-MNIST:Fashion-MNIST数据集简介、下载、使用方法之详细攻略
Dataset之Fashion-MNIST:Fashion-MNIST数据集简介、下载、使用方法之详细攻略
|
XML 开发框架 安全
Java开发热门框架【SpringBoot】快速入门教程
SpringBoot作为当下Java开发最常用的技术框架,相信你也一定听过很多次了。 那么到底什么是SpringBoot?SpringBoot又有什么用呢?跟着动力节点的视频带你快速入们springboot
434 0
|
新零售 关系型数据库 数据库
电商行业解决方案及数据库搬站最佳实践
该方案适用于新零售领域的电商行业,包括电商公司初创,满足快速搭建平台;以及中型企业应对发展阶段,满足业务快速占领市场。
1815 0
|
SQL Go 数据库
SQL Server遍历表的几种方法
原文:SQL Server遍历表的几种方法   在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易懂,但是它不符合面向集合操作的原则,而且性能也比面向集合低。
3404 0
下一篇
开通oss服务