运行结果如下:

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

ig信息增益 java_【Python 编程】实现文本分类中的信息增益算法相关推荐

  1. 文本分类的14种算法

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 之前介绍了14种文本分类中的常用算法,包括8种传统算法:k临近.决策树.多层感知器.朴素贝叶斯 ...

  2. 文本分类的14种算法总结

    文本分类的14种算法总结 之前介绍了14种文本分类中的常用算法,包括8种传统算法:k临近.决策树.多层感知器.朴素贝叶斯(包括伯努利贝叶斯.高斯贝叶斯和多项式贝叶斯).逻辑回归和支持向量机:4种集成学 ...

  3. 【NLP】基于python fasttext的文本分类

    背景 文本分类中的深度学习算法比较多,各种算法也由于其复杂度适应不同的场景.这次介绍的fasttext也是一个结构比较简单模型.结构虽然简单,但效果不错,还快.并且除了python有相关实现的包外,在 ...

  4. 文本分类的14种算法(2)

    文本分类的14种算法(2): 部分常用文本分类算法 决策树 决策树从根结点开始,根据待分类数据的某一特征的取值对其进行划分,分配到相应子结点.像这样递归进行,直到到达叶结点.那么如何判定最优特征呢? ...

  5. EMNLP 2021 | 多标签文本分类中长尾分布的平衡策略

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | 黄毅 作者简介:黄毅,本文一作,目前为罗氏集团的数据科学家 ...

  6. 文本分类中的文本特征表示

    Introduce 文本话题分析文本分类的一个应用领域,主要是针对文本表现的主题的划分.目前,针对文本话题分类的研究还是很热的,主要包括微博,知乎等大型话题社区,论坛类网站.之前知乎针对该问题在著名的 ...

  7. paddle2.0高层API实现自定义数据集文本分类中的情感分析任务

    paddle2.0高层API实现自定义数据集文本分类中的情感分析任务 本文包含了: - 自定义文本分类数据集继承 - 文本分类数据处理 - 循环神经网络RNN, LSTM - ·seq2vec· - ...

  8. 公开课报名 | 那些年,我们在文本分类中遇到的坑

    文本分类问题是企业在 NLP 领域中处理文本数据时经常会遇到的一个问题,很多时候,我们需要将文本信息进行分类,或提相关的接口以供外部进行文本上传,在针对于用户所上传的文档信息就需要进行文档内容的分类, ...

  9. label-embedding在文本分类中的应用

    ©PaperWeekly 原创 · 作者|蔡杰 学校|北京大学硕士生 研究方向|QA 最近在做文本分类相关的工作,目标是想提高分类器泛化新样本的能力,当有新样本产生的时候能够不需要重新训练分类器.所以 ...

最新文章

  1. 在安装one_gadget遇到 one_gadget requires Ruby version >= 2.4. 的问题解决
  2. C# 模拟鼠标移动与点击
  3. linux 网络地址
  4. 容器技术标准化大统一,首个开放容器标准 OCI 1.0 正式发布
  5. 源于十年来的点滴积累——《变革中的思索》印行出版
  6. [tf] Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initial
  7. 实战案例:场景测试之ATM机取款业务测试
  8. 不知道这十项 Linux 常识,别说自己是运维工程师!
  9. Spring Boot从入门到精通-项目搭建
  10. 传智播客 C/C++学习笔记 一级指针易错模型分析_重点
  11. springboot基于Javaweb的超市管理系统毕业设计源码281024
  12. 百度翻译vs谷歌翻译
  13. 电动车登记上牌系统源码免费分享
  14. Python基础知识之7
  15. 如何短时间突击 Java面试?附刷题神器
  16. ASP.NET Core 2.0 : 八.图说管道,唐僧扫塔的故事
  17. Life Long Learning论文初探————Online Fast Adaptation and Knowledge Accumulation(OSAKA)
  18. pkpm弹性时程分析计算书怎么出_【原创总结】结构菜鸟浅谈为何进行弹性时程分析(附操作详图)...
  19. 计算机p是什么单位是什么,功率的计算公式及单位
  20. 关于The C10K problem的一些资料

热门文章

  1. 文件处理命令(二)目录处理命令
  2. 培养气质的98个好习惯
  3. 姚重华曾获得过计算机领域最高的奖项图灵奖,微软研究员泰克获计算领域最高奖项图灵奖...
  4. 马尔可夫预测matlab编程,MATLAB马尔科夫链预测法
  5. C#--WinForm--表格数据控件DataGridView--绑定模式
  6. ETCD数据库源码分析——Cluster membership changes日志
  7. 在不受支持的 Mac 上安装 macOS Big Sur 11 正式版
  8. 8.dfs--王子救公主(遍历迷宫,王子和公主访问过同一位置,即成功救公主)
  9. 你真的了解DBA这份工作吗?
  10. 图模型在反欺诈中的应用