Transcript abc5341680

关键词行业分类算法设计
——基于信息熵的加权KNN算法
CIKE
算法概要
1、文本预处理
2、采用信息熵计算词的分类权重
3、加权KNN分类
文本预处理
本算法采用结巴分词工具对关键字进行中文分
词
 网址:http://www.oschina.net/p/jieba
 seg_list = jieba.cut("我来到北京清华大学
",cut_all=True) print "Full Mode:", "/
".join(seg_list) #全模式
 Output:
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/
华大/ 大学

结巴分词
seg_list = jieba.cut("我来到北京清华大学
",cut_all=False) print "Default Mode:", "/
".join(seg_list) #精确模式
 Output:
【精确模式】: 我/ 来到/ 北京/ 清华大学
并行分词:python自带的multiprocessing模块

结巴分词
通过比对两种分词模式下结果的效果,最后采
用的是全分词的模式进行文档的分词
 去停用词:在采用结巴分词对文档分词后,利
用停用词表,以及之后我们自定义增加的一些
停用词模式(如:“哪**”等)对文本中停用词
进行了去除。

采用信息熵计算词的分类权重
在文本向量化时,考虑到 :
1 北京 酒店
2 广州 酒店
3 北京 医院
虽然1和2,1和3都是有一个词是一样的,用普通的方法(如:TF
等)计算他们的相似度都是很接近的。
然而1和2明显应该属于同一类,1和3明显不属于同一类。
原因在于像“北京”这样的在每个类中出现的可能性几乎一样的词
语不能给我们的分类带来任何的信息量我们应该降低它在求相
似度时的权重,而像“酒店”这样在某些类中出现次数比较大的词
语会给我们分类带来比较多的信息量,我们应该增加它的权重。
计算词的熵值


熵值计算公式:(如下熵值越大越不具区分度)
Eg:假设存在四个分类A,B,C,D分别含有(10,12,8,20)个词;词w在A,B,
C,D出现的次数分别为(A:2,B:3,C:1,D:4)。考虑到每个类的大小不均匀,我
们通过引入类的大小改进了熵的计算。
加权熵值的计算为:
𝑛
𝑝 𝑤, 𝑖
𝑝 𝑤, 𝑖
𝐸𝑛𝑡𝑟𝑜𝑝𝑦 𝑤 =
log(
)=
𝑝 𝑤, 𝑖
𝑝 𝑤, 𝑖
𝑖=0
(2
2/10
3
1
4
)*log( 2
+ + +
10 12 8 20
∗ log
2/10
3
1
4
)+
+ + +
10 12 8 20
3/12
2 3 1 4
+ + +
10 12 8 20
∗ log
3
12
2 3 1 4
+ + +
10 12 8 20
+
1
8
2 3 1 4
+ + +
10 12 8 20
1/8
4/20
4/20
+
∗ log(
)
2
3 1 4
2
3 1 4
2
3 1 4
10 + 12 + 8 + 20
10 + 12 + 8 + 20
10 + 12 + 8 + 20
归一化
在采用信息熵对文档向量化之后,由于类间不平衡,有
的类样本数量比较大,有的类样本比较小,我们首先对
熵值进行归一化后再作为每个词的分类权值。
1
𝐸𝑛𝑡𝑟𝑜𝑝𝑦𝑛𝑜𝑟𝑚 (𝑤) =
1 + 𝑒 𝑒𝑛𝑡𝑟𝑜𝑝𝑦 𝑤 −𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙𝑑
经试验发现:归一化阈值取1.0
最后的词的权重表中,几乎所有权重接近0的都是地名、
没处理好的停用词之类的,符合我们的观察。
KNN分类
1)建立索引提高速度
2)KNN算法思想
3)相似度度量
建立索引提高速度
1.
2.
3.
4.
建立缓存
建立索引:Word1<doc1,doc2,doc3,…>
测试集输入doc:word1,word2,word3…;通过
索引表,只需要在索引表中查找对应的文档
向量。
通过建立的索引只需要比较索引对应的文档
的相似度即可,极大的提高分类速度(特别
适用于短文本分类)
KNN算法思想
思路:如果一个样本在特征空间中的k个最相似
(即特征空间中最邻近)的样本中的大多数属于某
一个类别,则该样本也属于这个类别。KNN算
法中,所选择的邻居都是已经正确分类的对象。
该方法在定类决策上只依据最邻近的一个或者
几个样本的类别来决定待分样本所属的类别。
KNN方法虽然从原理上也依赖于极限定理,但
在类别决策时,只与极少量的相邻样本有关。
KNN算法
算法步骤:
1)计算输入测试集的文档与训练集文档的相似
度,相似度的度量经试验Cos和Jaccard之后发现
Jaccard较好:
𝐴∩𝐵
𝑤∈(𝐴∩𝐵) 𝐸𝑛𝑡𝑟𝑜𝑝𝑦𝑛𝑜𝑟𝑚 (𝑤)
sim A, B =
=
𝐴∪𝐵
𝑤∈(𝐴∪𝐵) 𝐸𝑛𝑡𝑟𝑜𝑝𝑦𝑛𝑜𝑟𝑚 (𝑤)
2)找出训练集中最相似的K个文档
3)K个最相似的文档中,累加相同类的相似度值,
然后选取和最大的类作为文档的预测类别。
总结与发现
发现:通过对比赛数据的分析,发现很多关键词的
分类是有些错误。数据应该是通过某些规则生成出
来的。如:
“梦鸽出场费”因为有个“鸽”分到了农业类别
总结:文档特征化的质量直接影响着分类的效果。
我们采用信息熵对文档进行向量化后,采用拓展
性、通用性较好的KNN也同样可以达到较好的效
果。
展望:通过最优化函数对KNN分类中各个词的权重
进行学习将更好的拟合训练集特征以提高分类效
果。