读了两天的机器学习方面的书,一般都觉得太高大上了,这次仔细翻开入门书,才顿觉之前大学必修课程——数值代数计算的重要性;当然还有之前参加美赛时候学习的matlab的曲线拟合不仅仅只是在建立模型时有用,在日常生活中同样适用。
才翻了近20页的书,不算特别多,不过还是蛮有感触的。
姑且不谈前几页谈的人工智能的作用之类,我们从实际算法开始说起。
根据都评价了的影片进行相似度评价:(比较两人的已作相同电影的评价相似度)
1. 欧几里得距离 similarity-distance
sim_distance = 1 / ( 1 + sqrt ( Σ (a - b)² ) )
2. 皮尔逊相关系数 similarity-pearson(解决欧几里得距离不能解决的用户起评分数不同,但是评价相同的问题)
sim_pearson = ( Σ ( a * b ) - Σ ( a ) * Σ ( b ) / n ) / sqrt ( ( Σ ( a² ) - Σ ² ( a ) / n ) * ( Σ( b² ) - Σ ² ( b ) / n ) )
以已看的电影所作出的评价为依据,找出评价最为相似的群体(个人),为用户推荐其他电影。
ranking = Σ ( sim_distance * grade ) / Σ ( sim_distance )
ranking = Σ ( sim_pearson * grade ) / Σ ( sim_pearson )
为了解决某些用户可能对部分电影特别青睐导致推荐有误,采用对不同相似度的用户进行加权操作,结果显示不论是皮尔逊相关系数亦或是欧几里得距离,最终的算法得到的结果是大抵相同的。
那么就足以解决相似度推荐的问题。
算法大多是使用python写的,且大量使用了python特有的字典(类似json数组或者是map容器)和列表,对于列表推导式,之前学习python基本语法时真的比较少接触,还是比较习惯写java/c++/php中的foreach、while操作。
今天就先整理这么多吧!