【Python 编程】实现文本分类中的信息增益算法
来源:互联网 发布:淘宝买家秀福利 网站 编辑:程序博客网 时间:2024/04/29 22:44
运行结果如下:
word-doc—count矩阵
分辨率 2 2
2 [1, 1]
用户名 1 1
2 [1, 1]
鼠标 0 1
1 [0, 1]
密码技术 1 1
2 [1, 1]
密码 2 2
2 [1, 1]
账号 2 2
2 [1, 1]
电脑 0 1
1 [0, 1]
火狐 1 1
2 [1, 1]
系统 5 3
2 [1, 1]
苹果 1 1
2 [1, 1]
软件 1 1
2 [1, 1]
用户 1 1
2 [1, 1]
宽度 1 1
2 [1, 1]
键盘 0 1
1 [0, 1]
word IG
分辨率 0.333333333333
用户 0.333333333333
鼠标 0.666666666667
密码技术 0.333333333333
系统 0.333333333333
账号 0.333333333333
电脑 0.666666666667
软件 0.333333333333
密码 0.333333333333
苹果 0.333333333333
火狐 0.333333333333
用户名 0.333333333333
宽度 0.333333333333
键盘 0.666666666667
sort word IG
鼠标 0.666666666667
键盘 0.666666666667
电脑 0.666666666667
账号 0.333333333333
用户名 0.333333333333
用户 0.333333333333
系统 0.333333333333
软件 0.333333333333
苹果 0.333333333333
密码技术 0.333333333333
密码 0.333333333333
宽度 0.333333333333
火狐 0.333333333333
分辨率 0.333333333333
文件c1内容为:
1 系统 5
1 账号 2
1 密码 2
1 分辨率 2
1 用户名 1
1 用户 1
1 软件 1
1 苹果 1
1 密码技术 1
1 宽度 1
1 火狐 1
文件C2内容为:
2 系统 3
2 账号 2
2 密码 2
2 分辨率 2
2 用户名 1
2 用户 1
2 软件 1
2 苹果 1
2 密码技术 1
2 宽度 1
2 火狐 1
2 电脑 1
2 鼠标 1
2 键盘 1
def IG_count(c1,c2):
list1 = []list2 = []
list3 = []
dict1 = dict()
ig_dict = dict()
class_count = 2
doc_count = 3
c1_file = open(c1,"r")
#c1_word_sets = c1_file.read()
for line in c1_file:
list1.append(line.split(" "))
c2_file = open(c2,"r")
for line in c2_file:
list1.append(line.split(" "))
#1、计算word-doc—count矩阵
"""
分辨率 [2, 2, 0] 2 2
用户名 [1, 1, 0] 1 1
鼠标 [0, 1] 0 1
密码技术 [1, 1, 0] 1 1
"""
for i in list1:
#print i[0],i[1],i[2]
if dict1.get(i[1]) == None:
list2 = list()
list2 = [0]
if i[2] == None:
list2.insert((int)(i[0]) - 1,0)
else:
list2.insert((int)(i[0]) - 1,(int)(i[2]))
dict1[i[1]] = list2
else:
if i[2] == None:
dict1[i[1]].insert((int)(i[0]) - 1,0)
else:
dict1[i[1]].insert((int)(i[0]) - 1,(int)(i[2]))
#2、计算每个Word的信息增益IG并保存到dit中
print "word-doc—count矩阵"
for dict_cont in dict1.viewkeys():
#print dict_cont,dict1[dict_cont][0],dict1[dict_cont][1]
t= class_count
entropy = class_count * 1/class_count * math.log(t,2);
wcount = 0 # // 出现word的文档的文档数量
category_doc_count = doc_count/class_count #每个类别中的文档数量
wcount_class = [0 for i in range(class_count)] #// 每个类别中出现单词word的文档数
pw = 0.0# // 出现word的文档占全部文档的比重
pcw = [0 for i in range(class_count)]# // 在单词word出现时各个类别中文档数占总文档数的比重
pcw_b = [0 for i in range(class_count)]#// 在单词word不出现时各个类别中文档数占总文档数的比重
#listabc = [0 for i in range(100)] or [0] * 100
for i in range(0,class_count):
for j in range(0,category_doc_count):
if dict1[dict_cont][j + i * category_doc_count] > 0 :
wcount_class[i] += 1
wcount += wcount_class[i]
print wcount, wcount_class
pw = 1.0 * wcount / doc_count;
for i in range(0,class_count):
pcw[i] = 1.0 * wcount_class[i] / wcount;
pcw_b[i] = 1.0 * (category_doc_count - wcount_class[i])/ (doc_count - wcount);
d1 = 0.0;
d2 = 0.0;
for i in range(0,class_count):
#print pcw[i],pcw_b[i]
if pcw[i] == 0:
t1 = 0
else:
t1 = math.log(pcw[i],2)
d1 += pcw[i] * t1;
if pcw_b[i] == 0:
t2 = 0
else:
t2 = math.log(pcw_b[i],2)
d2 += pcw_b[i] * t2;
ig = entropy + pw * d1 + (1.0 - pw) * d2;
ig_dict[dict_cont] = ig
#3、打印信息增益信息
print "word IG"
for dict_cont in ig_dict.viewkeys():
print dict_cont,ig_dict[dict_cont]
print "sort word IG"
word_dicts_list = sorted([(v, k) for k, v in ig_dict.items()], reverse=True)
for i in word_dicts_list:
print i[1],i[0]
c1_file.close()
c2_file.close()
IG_count(webpage_all_word_count_docno1,webpage_all_word_count_docno2)
算法参考:http://www.blogjava.net/zhenandaci/archive/2009/03/24/261701.html
Java实现从参考:http://www.cnblogs.com/zhangchaoyang/articles/2165482.html
- 【Python 编程】实现文本分类中的信息增益算法
- 特征选择--文本分类: 信息增益
- 【文本分类】 特征抽取之信息增益
- 【python 编程】文本分类KNN算法实现及结果输出
- 文本分类入门-特征选择方法之信息增益
- 文本分类的特征选择方法之信息增益
- 文本分类特征选择方法之信息增益
- 文本分类入门-特征选择方法之信息增益
- 通俗理解决策树算法中的信息增益
- 文本分类入门:特征选择算法之开方检验、信息增益;特征选择与特征权重计算的区别
- 文本特征选择算法:卡方检验和信息增益
- 基于信息增益的决策树归纳的Python实现【CD4.5算法】
- 分类算法属性选择度量--信息增益、增益率、Gini指标
- python实现文本分类
- 机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用
- 机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用
- 信息增益以及决策树算法-机器学习实战(python)
- 文本分类的python实现-基于SVM算法
- 第12周-项目2-教师兼干部类
- Python开发者最常犯的10个错误
- 【Error】Python:UnicodeDecodeError: ‘XXX' codec can't decode bytes in position... 解决方法
- World Final 1999 poj 1873 The Fortified Forest 状压枚举 凸包
- —3D中的方位与角位移,3D数学读书笔记—
- 【Python 编程】实现文本分类中的信息增益算法
- 博弈-威佐夫博弈
- eclipse打开文件位置插件
- OK6410 nboot+eboot启动WinCE6.0串口输出消息
- java虚拟机------垃圾回收
- OpenSSL for Android
- 金蝶K3工业老单中间层开发示例-2
- jquerymobile 页面跳转闪屏问题并且引入动画效果
- hdu 4328 最大子矩阵(DP)