cfm代码大全,cf代码查询

前面我们简单介绍了基于内容的推荐系统CB和基于协同过滤的推荐系统CF,让我们看一下CF的一些实际例子。

让我们看一下元数据。数据很简单:userId(用户ID)、itemId(商品ID)、score(用户得分),用\’,\’分隔。

计算时,使用以下相似度计算公式。这个公式其实和cos相似度的公式是一样的。

在:

Wi,j 表示标记为i 和j 的两个项目的相似度

U(i,j) 表示同时评估i 和j 的用户集合

ruj 表示用户u 对项目i 的评分

是平滑参数

事实上,使用这个你可以将分子和分母乘法的后半部分作为常数丢弃,并且不会影响结果。那么计算的时候只能看到前半部分。分析表明,每个用户的分母相同,是i的所有用户得分的平方和乘以所有用户的得分。对于j i 的评估的平方和,分子是i 和j 的乘积。如果我们将分母分开,我们可以看到它实际上是所有用户评分的平方和除以i。将所有用户对i 的评分平方和(相当于统一标准化)乘以您对i 的评分,再乘以对i 的所有用户评分的平方和。由此看来,代码的实现就非常容易了。

这是一个简单的例子来解释如何应用这个公式。

假设我们要计算item1 和item2 之间的相似度。现在我们已经知道了同时对两个项目进行评分的所有用户A、B 和C 的相似度计算过程。首先,我们对分数进行标准化并求出平方和:所有用户对item1 的评分为2^2+1^2+4^2=20,所有用户对item2 的评分平方和为5^2+3^2+2^2=38 。将所有分数归一化、相乘、求和,最终相似度为:

所以我们首先对所有分数进行归一化,然后找到i 和j 的所有分数的集合并计算i 和j 之间的相似度。

下面是基于这个思想的代码实现。此代码是用Python 编写的MapReduce 任务。

标准化和成对匹配过程map1.py#! /usr/bin/env python # -*-coding: utf-8 -*-import sysimport math item_score_dic={}user_item_score_list=[]for line in stdin: ss=line .strip( ) .split(\’,\’) if len(ss) !=3: 继续user=ss[0].strip() item=ss[1].strip() 分数=float(ss[ 2].strip ()) user_item_score_list .append((user,item,score)) 分数=pow(score,2) if item_score_dic.has_key(item): item_score_dic[item] +=分数else: item_score_dic[item]=user_item_score_list: UI 分数user, item, Score=uis if item_score_dic.has_key(item): Score_sqr=math.sqrt(item_score_dic[item]) print (\’\\t\’.join([user,item,score/score_sqr]))reduce1.py

#! /usr/bin/env python# -*-coding: utf-8 -*-import sys current_user=Noneitem_score_list=[] sys.stdin: line ss=line.strip().split(\’\\t\’ ) if len ( ss) !=3: 继续user=ss[0].strip() item=ss[1].strip() 分数=float(ss[2].strip()) 如果不是current_user: current_user=user 如果current_user !=user:对于i 在范围内(0,len(item_score_list) – 1): 对于j 在范围(i + 1,len(item_score_list)): item_a,score_a=item_score_list [i] item_b,score_b=item_score_list [j] print(\’ \\ t\’.join([item_a, item_b, Score_a * Score_b])) print(\’\\t\’.join([item_b, item_a, Score_a * Score_b])) item_score_list=[] current_user=用户item_score_list 附加((item, Score)) for i in range(0, len(item_score_list) – 1): for j in range(i + 1, len(item_score_list)): item_a, Score_a=item_score_list[ i] item_b, Score_b=item_score_list[j] 打印(\’\\t\’.join([item_a, item_b, Score_a * Score_b])) print(\’\\t\’.join([item_b, item_a, Score_a * Score_b])) item1 和item2 相似配对map2 的总相位.py#! /usr/bin/env python# -*-coding: utf-8 -*-import sys for line in sys .stdin: ss=line.strip().split(\’\\t\’) if len(ss) !=3: 继续item_a=ss[0].strip() item_b=ss[1].strip() Score=ss[ 2].strip() print(\’%s#%s\\t%% item_a, item_b,分数)reduce2.py

#! /usr/bin/env python# -*-coding: utf-8 -*-import sys current_items=Nonesum=0.0 for line in sys.stdin: ss=line.strip().split(\’\\t\’) if len (ss) !=2: 继续item_item=ss[0].strip() 分数=float(ss[1].strip()) if current_items: current_items=item_item if current_items !=item_item: item_a, item_b=current_items.split (\’ # \’) print(\’\\t\’.join(item_a, item_b, sum)) sum=0.0 current_items=item_item sum +=得分item_a, item_b=current_items.split(\’#\’)print(\’\\t\’ .join( item_a , item_b, sum)) 以上是该算法的代码实现过程。该算法的一个缺点是当数据量非常大时,项目对的数量变得非常大。由于很容易耗尽内存,因此实际应用需要随机选择一定量的数据进行计算,而不是将所有数据添加到计算中。如果您觉得有用,请推荐给您的朋友并分享。 “努力提升自己。”

本文和图片来自网络,不代表火豚游戏立场,如若侵权请联系我们删除:https://www.huotun.com/game/664257.html

(0)
上一篇 2024年6月3日
下一篇 2024年6月3日

相关推荐

  • 和平精英最难段位? 和平精英段位符号?

    和平精英最难段位? 和平精英最难的段位,可能就是无敌战神了 首先上战神的玩家技术方面绝对是大佬级别的,同时他们基本都是有固定队友的,队友直接默契度很强,在打法上配合很强,分工明确,每人都会有自己特别强的一面,同时每个人意识比其他段位的高上很多,不会出现因为意识不够导致灭亡的情况,同时战神段位挂也比较多,演技还强 和平精英段位符号? 平底锅p911s686 u…

    游戏快讯 1小时前
  • 和平精英怎么卡出一拳超人?

    和平精英怎么卡出一拳超人? 无法实现卡出一拳超人原因是和平精英游戏中并没有添加一拳超人这个角色。可能是因为一拳超人版权问题,或者是游戏开发商没有计划添加这个角色。所以无法通过卡出来实现。如果你想使用类似一拳超人的角色,可以选择游戏中已经存在的英雄角色,或者自定义绑定键位达到类似操作的效果。 和平精英一拳超人代码? 没有的除非你写的是外挂,法律可不允许。 和平…

    游戏快讯 2小时前
  • 和平精英所有出场特效?

    和平精英所有出场特效? 游戏《和平精英》中,玩家在达到钻石段位和皇冠段位就能获得专属入场特效了。钻石段位入场特效为进入游戏时有闪光和金色光芒。 皇冠段位入场特效为进入游戏时有转身动作和耀眼光芒 和平精英车皮出场顺序? 在《和平精英》中,车皮是一种在游戏中装饰车辆的道具,它可以通过购买、活动等方式获得。下面是车皮的出场顺序: 1. 沙漠迷彩 2. 中国年 3.…

    游戏快讯 4小时前
  • 和平精英新皮肤哪个好看?

    和平精英新皮肤哪个好看? 花朵主题的飞行器 本次新增的飞行道具直观上和曾经推出过的小魔女扫杆飞行器有点像。但明显这次花朵主题的飞行器是多玫瑰花而不是扫杆。视觉上还是很有特色的。 最后推测这套皮肤的登场日期。考虑到以往被爆料和登陆正式服都不会相隔很长时间,估计最快本周末就会有消息公布,也可能要等到下周末。总之,如此华丽好看的皮肤是安排在路上了。 和平精英新皮肤…

    游戏快讯 5小时前
  • 和平精英大菠萝换弹时间?

    和平精英大菠萝换弹时间? 和平精英游戏中,大菠萝换弹时间是指换填弹匣的动作所需时间。在游戏中,大菠萝换弹时间并不是固定的,而是受到不同武器影响。一般来说,换弹时间较短的武器可以更快地完成这一动作,而换弹时间较长的武器则需要更多时间。因此,在游戏中,玩家需要根据所使用的武器类型来合理安排换弹时间,以确保在关键时刻不会因为换弹过程而暴露在敌人的攻击范围内。 和平…

    游戏快讯 6小时前