python信息熵函数 python 熵值法( 二 )


w =
0.16600.09810.17570.33480.2254
如何用 Python 中的 NLTK 对中文进行分析和处理最近正在用nltk 对中文网络商品评论进行褒贬情感分类,计算评论的信息熵(entropy)、互信息(point mutual information)和困惑值(perplexity)等(不过这些概念我其实也还理解不深...只是nltk 提供了相应方法) 。
我感觉用nltk 处理中文是完全可用的 。其重点在于中文分词和文本表达的形式 。
中文和英文主要的不同之处是中文需要分词 。因为nltk 的处理粒度一般是词,所以必须要先对文本进行分词然后再用nltk 来处理(不需要用nltk 来做分词 , 直接用分词包就可以了 。严重推荐结巴分词,非常好用) 。

文分词之后,文本就是一个由每个词组成的长数组:[word1, word2, word3…… wordn] 。之后就可以使用nltk
里面的各种方法来处理这个文本了 。比如用FreqDist 统计文本词频,用bigrams 把文本变成双词组的形式:[(word1, word2),
(word2, word3), (word3, word4)……(wordn-1, wordn)] 。
再之后就可以用这些来计算文本词语的信息熵、互信息等 。
再之后可以用这些来选择机器学习的特征,构建分类器,对文本进行分类(商品评论是由多个独立评论组成的多维数组,网上有很多情感分类的实现例子用的就是nltk 中的商品评论语料库,不过是英文的 。但整个思想是可以一致的) 。
另外还有一个困扰很多人的Python 中文编码问题 。多次失败后我总结出一些经验 。
Python 解决中文编码问题基本可以用以下逻辑:
utf8(输入) —— unicode(处理) —— (输出)utf8
Python 里面处理的字符都是都是unicode 编码,因此解决编码问题的方法是把输入的文本(无论是什么编码)解码为(decode)unicode编码,然后输出时再编码(encode)成所需编码 。

于处理的一般为txt 文档,所以最简单的方法,是把txt 文档另存为utf-8 编码 , 然后使用Python
处理的时候解码为unicode(sometexts.decode('utf8')),输出结果回txt 的时候再编码成utf8(直接用str()
函数就可以了) 。
python对数据进行聚类怎么显示数据分类将其整理成数据集为:
[ [1,0,"yes"],[1,1,"yes"],[0,1,"yes"],[0,0,"no"],[1,0,"no"] ]
算法过程:
1、计算原始的信息熵 。
2、依次计算数据集中每个样本的每个特征的信息熵 。
3、比较不同特征信息熵的大小,选出信息熵最大的特征值并输出 。
运行结果:
col : 0 curInfoGain : 2.37744375108 baseInfoGain : 0.0
col : 1 curInfoGain : 1.37744375108 baseInfoGain : 2.37744375108
bestInfoGain : 2.37744375108 bestFeature: 0
结果分析:
说明按照第一列,即有无喉结这个特征来进行分类的效果更好 。
思考:
1、能否利用决策树算法,将样本最终的分类结果进行输出?如样本1,2,3属于男性 , 4属于女性 。
2、示例程序生成的决策树只有一层 , 当特征量增多的时候,如何生成具有多层结构的决策树?
3、如何评判分类结果的好坏?
在下一篇文章中,我将主要对以上三个问题进行分析和解答 。如果您也感兴趣,欢迎您订阅我的文章,也可以在下方进行评论 , 如果有疑问或认为不对的地方,您也可以留言,我将积极与您进行解答 。
完整代码如下:
from math import log
"""
计算信息熵
"""
def calcEntropy(dataset):
diclabel = {} ## 标签字典,用于记录每个分类标签出现的次数
for record in dataset:
label = record[-1]
if label not in diclabel.keys():
diclabel[label] = 0

推荐阅读