130 likes | 469 Vues
—— 基于信息熵的加权 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:
E N D
——基于信息熵的加权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( 计算词的熵值
在采用信息熵对文档向量化之后,由于类间不平衡,有的类样本数量比较大,有的类样本比较小,我们首先对熵值进行归一化后再作为每个词的分类权值。在采用信息熵对文档向量化之后,由于类间不平衡,有的类样本数量比较大,有的类样本比较小,我们首先对熵值进行归一化后再作为每个词的分类权值。 经试验发现:归一化阈值取1.0 最后的词的权重表中,几乎所有权重接近0的都是地名、没处理好的停用词之类的,符合我们的观察。 归一化
1)建立索引提高速度 2)KNN算法思想 3)相似度度量 Knn分类
建立缓存 建立索引:Word1<doc1,doc2,doc3,…> 测试集输入doc:word1,word2,word3…;通过索引表,只需要在索引表中查找对应的文档向量。 通过建立的索引只需要比较索引对应的文档的相似度即可,极大的提高分类速度(特别适用于短文本分类) 建立索引提高速度
思路:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。 Knn算法思想
算法步骤: 1)计算输入测试集的文档与训练集文档的相似度,相似度的度量经试验Cos和Jaccard之后发现Jaccard较好: 2)找出训练集中最相似的K个文档 3)K个最相似的文档中,累加相同类的相似度值,然后选取和最大的类作为文档的预测类别。 KNN算法
发现:通过对比赛数据的分析,发现很多关键词的分类是有些错误。数据应该是通过某些规则生成出来的。如:发现:通过对比赛数据的分析,发现很多关键词的分类是有些错误。数据应该是通过某些规则生成出来的。如: “梦鸽出场费”因为有个“鸽”分到了农业类别 总结:文档特征化的质量直接影响着分类的效果。我们采用信息熵对文档进行向量化后,采用拓展性、通用性较好的KNN也同样可以达到较好的效果。 展望:通过最优化函数对KNN分类中各个词的权重进行学习将更好的拟合训练集特征以提高分类效果。 总结与发现