在文本分类中,需要先对文本分词,原始的文本中可能由几十万个中文词条组成,维度非常高。另外,为了提高文本分类的准确性和效率,一般先剔除决策意义不大的词语,这就是特征词提取的目的。本文将简单介绍几种文本特征词提取算法。

信息增益(IG)

对于一个系统,其信息熵为\(H(S)=-\sum_{i}^{C}P_ilog_2(P_i)\).\(C\)表示类别个数,\(P_i\)表示第\(i\)的类别的概率。某个特征\(F\),有该特征和没有该特征,信息量的变化,就是信息增益。

对特征\(F\),它的取值有\(n\)种(\(x_1\), \(x_2\), ... , \(x_n\)),计算每个值的条件熵,并取均值

$$H(C|F) = \sum_i^nP_{i}H(C|X=x_i)$$

在分类中,特征词\(f\)只有存在(取值1)和不存在(取值为0)。那么\(H(C|f)=P(f=0)H(C|f=0) + P(f=1)H(C|f=1)\)。所以信息增益为

$$IG(F)=H(F)-H(C|F)=-\sum_{i=1}^{n}P(C_i)log(P(C_i) + $$

$$\quad \qquad P(f=1)\sum_{i=1}^{n}P(C_i|f=1)logP(C_i|f=1)+P(f=0)\sum_{i=1}^{n}P(C_i|f=0)logP(C_i|f=0)$$

信息增益提取特征词步骤:

1,统计正负分类的文档数,记为\(N_1\), \(N_2\).

2, 统计每个词在正文档出现的频率(A),负文档出现的频率(B),正文档不出现的频率(C),负文档不出现的频率(D).

3,计算信息熵

$$H(S)=-(\frac{N_1}{N_2+N_1}log(\frac{N_1}{N_1+N_2})+\frac{N_2}{N_1+N_2}log(\frac{N_1}{N_1+N_2}))$$

4,计算每个词\(w\)的信息增益

$$IG(w) = H(S)+\frac{A+B}{N_1+N_2}(\frac{A}{A+B}log(\frac{A}{A+B})+\frac{B}{A+B}log(\frac{B}{A+B}))$$

$$\qquad\qquad +\frac{A+B}{N_1+N_2}(\frac{A}{A+B}log(\frac{A}{A+B})+\frac{B}{A+B}log(\frac{B}{A+B}))$$

5,按照信息增益的大小排序,取topxx就行。

卡方校验(chi-square)

卡方检验最基本的思想就是通过观察实际值与理论值的偏差来确定理论的正确与否。具体做的时候常常先假设两个变量确实是独立的(“原假设”),然后观察实际值(观察值)与理论值(这个理论值是指“如果两者确实独立”的情况下应该有的值)的偏差程度,如果偏差足够小,我们就认为误差是很自然的样本误差,是测量手段不够精确导致或者偶然发生的,两者确确实实是独立的,此时就接受原假设;如果偏差大到一定程度,使得这样的误差不太可能是偶然产生或者测量不精确所致,我们就认为两者实际上是相关的,即否定原假设,而接受备择假设。

假设理论值是\(E\),实际值是\(x\),偏差程度的计算公式为:

$$\sum_{i}^{n}\frac{(x_i-E)^2}{E}$$

这个公式就是卡方检验使用的差值衡量公式,\(x_i\)表示样本。如果差值很大,则认为与原假设不符合,认为词与类别很相关。现在有N篇文章,分类有体育和非体育两类,考察“足球”和体育类别的关系:

特征选择

属于体育

不属于体育

总计

包含“足球”单词

A

B

A+B

不包含“足球”单词

C

D

C+D

总计

A+C

B+D

N

如果“足球”与体育不相关,则体育类文章包含“足球”的比例等同于所有文章包含“足球”的比例,所以A的理论值是

$$E_{11}=(A+C)\frac{A+B}{N}$$

卡方差值

$$D_{11}=\frac{(A-E_{11})^2}{E_{11}}$$

同样可以求出\(D_{12}, D_{21}, D_{22}\),最后求出“足球”与“体育”类的卡方值

$$\chi^2(足球,体育)=D_{11}+D_{12}+D_{21}+D_{22}=\frac{N(AD-BC)^2}{(A+C)(A+B)(B+D)(C+D)}$$

卡方检验的缺点:只考虑了词是否出现,而没有考虑出现了多少次,容易夸大低频词的价值。如一个单词a在一类文章中都出现一次,而另外一个单词b在该类99%的文章中都出现了10次,但是b计算出来的卡方值要小于a,所以,在筛选的时候,容易筛掉单词b,这就是“低频词缺陷”,通常,考虑也需要考虑词频。

卡方提取特征词步骤:

1,统计正负分类的文档数,记为\(N_1\), \(N_2\).

2, 统计每个词在正文档出现的频率(A),负文档出现的频率(B),正文档不出现的频率(C),负文档不出现的频率(D).

3,计算卡方

$$\chi^2=D_{11}+D_{12}+D_{21}+D_{22}=\frac{N(AD-BC)^2}{(A+C)(A+B)(B+D)(C+D)}$$

5,按照卡方值从大到小,取topxx就行。

http://www.pycpp.com/2015/06/27/%E6%96%87%E6%9C%AC%E7%89%B9%E5%BE%81%E8%AF%8D%E6%8F%90%E5%8F%96%E7%AE%97%E6%B3%95/

java代码编写的文本特征提取_文本特征词提取算法相关推荐

  1. 长沙北大青鸟java 学费_长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二)...

    原标题:长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二) 文件名规范 1.一个Java源文件只能存储个Java类. 2.文件名与Java类名相同. 3.一个类文件的代码行 ...

  2. 使用java代码编写脚本,把oracle建表语句变成hive建表语句

    使用java代码编写脚本,把oracle建表语句变成hive建表语句 java代码 测试oracle.sql 生成hive创表语句 java代码 import java.io.File; import ...

  3. Java代码编写猜拳小游戏

    Java代码编写猜拳小游戏 import java.util.Random; import java.util.Scanner;public class Guess {public static vo ...

  4. 猜数字小游戏(java代码编写)

    猜数字小游戏(java代码编写) 给大家一个用java代码编写的猜数字小游戏 // 导入随机数包import java.util.Random;// 导入从键盘接收数据的函数import java.u ...

  5. java代码如何与界面联系在一起_如何在Visual Studio Code 中编写Java代码

    本文将展示如何在Visual Studio Code中用Java编写和运行一个简单的Hello World程序. 首先您必须在本地开发环境中安装Java SE开发工具包(JDK) Visual Stu ...

  6. mfc倾斜文本输入_文本检测知识梳理(持续更新)

    最近在做作业批改场景的OCR相关算法研发工作,打算梳理一下文本检测的相关知识,也欢迎大家留言讨论. 目前主流的基于深度学习的目标检测方法大体分为两类:one-stage和two-stage: 1.Tw ...

  7. JAVA代码编写的30条建议

    列举了大量有用的建议,帮助大家进行低级程序设计,并提供了代码编写的一般性指导: (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起, ...

  8. 写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项

    写java代码时的注意事项 Java 8引入的Optional类一直是该语言版本引入的最具争议的功能之一. 尽管我喜欢这个新的Java类的东西比不喜欢的东西多,但在Java方法中将其用作return类 ...

  9. java代码自动生成的插件_如何使用插件生成自定义Java 8代码

    java代码自动生成的插件 大多数程序员讨厌的一件事就是编写样板代码. 无休止的时间花费在设置实体类和配置数据库连接上. 为了避免这种情况,您可以让Speedment Open Source之类的程序 ...

最新文章

  1. js阿拉伯数字转成汉字
  2. iOS viewDidUnload方法
  3. pikachu漏洞靶机之xss漏洞post提交方式
  4. Redis学习笔记之入门基础知识——简介
  5. SPOJ GSS2 Can you answer these queries II (线段树离线) - xgtao -
  6. java.util.concurrent.ExecutorService 接口 源码
  7. centos关闭邮件提醒
  8. 是兄弟就来砍我!“贪玩蓝月”母公司实控人被捕:曾是中国最年轻富豪
  9. 拓端tecdat|约会数据动态可视化分析:R语言使用ggplot和ganimate制作的动画图
  10. C语言小游戏 |100行代码实现扫雷
  11. Ubuntu 下搭建 GCC 交叉编译工具链
  12. Python数学建模 空间插值
  13. C语言 将大写字母转换为小写字母
  14. Android开发 之 OpenGL ES系列(5--3D立体图形)
  15. lilypond 符号_LilyPond演奏优美的音乐
  16. (补基础)数据分析系列:假设检验的基础知识
  17. MaximalRectangle
  18. 【正则】字符串按一定规则做替换
  19. 光敏电阻规格型号的含义解读研究总结
  20. linux连接多个显示器,如何在Linux Ubuntu中使用多个和外部显示器 | MOS86

热门文章

  1. cf1693C. Keshi in Search of AmShZ(div1)【最短路,反向建图】
  2. 二进制安装K8S集群-上
  3. Magento 1.4 EAV 属性中的新东西
  4. QT Desinger设计程序主界面 PyUIC生成.py
  5. 机器学习:二分类到多分类-ovr,ovo,mvm,sofmax
  6. 云队友丨在注意力稀缺的时代,专注是你成败的关键筹码
  7. html5技术之拉米牌游戏项目实战,国内首部HTML5技术之拉米牌游戏项目实战
  8. excel查找出不来了_Excel查找明明存在的数据却查不到,是什么原因?|excel表格数据为什么搜查不到...
  9. 程序员脱发自救:用计算机视觉技术安全植发
  10. 组合游戏 - SG函数和SG定理