互信息 java_计算互信息以选择Java中的训练集

情境

我正在尝试对Java GUI应用程序中的数据集实施监督学习.将为用户提供要检查的项目或“报告”的列表,并将基于一组可用标签为它们加标签.一旦监督学习完成,则将标记的实例提供给学习算法.这将尝试根据用户希望查看其余项目的顺序来订购其余项目.

为了从用户的时间中获得最大收益,我想预选报告,这些报告将提供有关整个报告集合的最多信息,并让用户为它们添加标签.据我了解,要进行计算,有必要找到每个报告的所有相互信息值的总和,并按该值对它们进行排序.来自监督学习的带标签的报告随后将用于形成贝叶斯网络,以查找每个剩余报告的二进制值的概率.

在这里,一个人为的示例可能有助于解释,并且当我无疑使用了错误的术语时可以消除混乱:-)考虑一个示例,其中应用程序向用户显示新闻故事.它根据显示的用户偏好选择要首先显示的新闻故事.具有相关性的新闻故事的特征是原籍国,类别或日期.因此,如果用户将一个来自苏格兰的新闻报道标记为有趣,则它告诉机器学习者,来自苏格兰的其他新闻报道对用户来说很有可能会增加.类似类别(例如“体育”)或日期(例如2004年12月12日).

可以通过为所有新闻故事选择任何顺序(例如按类别,按日期)或随机排序它们,然后随着用户的前进来计算偏好来计算该偏好.我想做的就是让用户查看少量特定新闻故事并说出他们是否对它们感兴趣(监督学习部分),从而在这种排序上获得“领先”.要选择向用户显示哪些故事,我必须考虑整个故事集.这就是相互信息的来源.对于每个故事,我想知道当用户对故事进行分类时,它可以告诉我多少其他故事.例如,如果有大量源自苏格兰的故事,我希望让用户对(至少)其中一个进行分类.与其他相关功能(例如类别或日期)相似.目的是查找报告的示例,这些示例在分类后可提供有关其他报告的最多信息.

问题

因为我的数学有点生疏,而且我是机器学习的新手,所以在将“相互信息”的定义转换为Java实现时遇到了一些麻烦.维基百科将共同信息的等式描述为:

但是,我不确定在什么都没有分类并且学习算法还没有计算出任何东西时,是否可以真正使用它.

在我的示例中,假设我有很多此类的新的,未标记的实例:

public class NewsStory {

private String countryOfOrigin;

private String category;

private Date date;

// constructor, etc.

}

在我的特定情况下,字段/功能之间的相关性基于精确匹配,因此,例如,日期和10年的日期差在其不等式上是等效的.

相关因子(例如,日期比类别更相关吗?)不一定相等,但它们可以是预定义的且恒定的.这是否意味着函数p(x,y)的结果是预定义值,还是我混淆了各项?

问题(最终)

给定这个(虚假的)新闻报道示例,我该如何去实现相互信息计算?库,javadoc,代码示例等都是欢迎信息.同样,如果这种方法从根本上来说是有缺陷的,那么解释这种情况的原因将是同样有价值的答案.

PS.我知道诸如Weka和Apache Mahout之类的库,因此仅提及它们对我而言并没有真正的用处.我仍在搜索这两个库的文档和示例,以专门查找相互信息.真正可以帮助我的是指向这些库在相互信息帮助下的资源(代码示例,javadoc).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值