最近看了几篇研究最大信息系数的文章,最大信息系数是一种度量两个变量之间关联关系的新方法。传统度量两个变量之间关系的指标包括皮尔逊相关系数和信息论中的互信息。皮尔逊相关系数在度量具有线性相关关系的两个变量时具有较好的效果,但若两个变量之间的关系不是线性时,不能进行准确地度量。互信息是信息论的鼻祖香农老先生在研究通信理论时引入的,后来研究者发现互信息这个度量在研究两个变量之间的关系具有非常强的作用,在统计学界广受欢迎。
本文在这里不去研究以上三个度量之间的区别。受传统用户最近邻模型在计算用户相似度时通常使用皮尔逊相似度计算方法启发,我想在我的研究中使用最大信息系数来计算用户之间的相关度,不过计算最大信息系数的过程还没完全理解透。幸好已经有前辈大牛在网上公开了各种代码。但是其中的Matlab代码一直是有问题的,Python代码是可以跑通的。因此本人在网上找了找Python做最近邻模型的协同过滤的代码也找到了一个前辈的代码(点击打开链接)。不过感觉这个结果跟我以前做的结果有点不同,仔细研读了几天,发现有几点与我的理解不同,这里将我的代码附上。说明:由于我对Python的语法很不熟悉所以在读取数据和最后输出格式方面几乎是复制这位前辈的代码。不过核心算法部分有两处改动,下面一一说明(涉及到另外一位作者的代码时,本文以原代码代替)。
1.在利用皮尔逊相关系数计算公式计算用户相似度时,原代码在计算用户的的评分均值是调用计算用户评分均值公式进行计算;然而计算用户相似度时针对的是两个用户都评价过的项目,故而此时的用户的评分均值应该是在用户对评分交集项目上取均值。文献[1]中的原文为"All the summations and averages in the formula are computed only over those articles that u1 and u2 both rated."。
2.在取前N