p2p网站建设要点开源php建站系统
p2p网站建设要点,开源php建站系统,一米设计公司,分类信息网站系统文章目录目录1.什么是用户行为数据#xff1f;1.1用户行为分类2.用户行为数据如何使用#xff1f;2.1 用户活跃度和物品流行度的分布2.2 用户活跃度和物品流行度的关系2.3 协同过滤算法3.实验设计和算法评测4.基于邻域的的推荐算法4.1 基于用户的协同过滤算法4.2 基于物品的协…
文章目录目录1.什么是用户行为数据1.1用户行为分类2.用户行为数据如何使用2.1 用户活跃度和物品流行度的分布2.2 用户活跃度和物品流行度的关系2.3 协同过滤算法3.实验设计和算法评测4.基于邻域的的推荐算法4.1 基于用户的协同过滤算法4.2 基于物品的协同过滤算法4.3 userCF和itemCF的比较5.基于隐语义模型的推荐算法6.基于图模型的推荐算法目录
1.什么是用户行为数据
用户行为数据在网站上最简单的存在形式为日志。很多互联网业务会把多种原始日志按照用户行为汇总成会话日志其中会话表示一次用户行为和对应的服务。如电子商务网站记录的用户行为包括网页浏览、购买、点击、评分和评论等。
1.1用户行为分类
1.按照反馈的明确性分
显示反馈行为 对某些物品的喜欢、不喜欢对某条事物的评论隐性反馈行为 指的是那些不能明确反应用户喜好的行为。代表性的为页面浏览行为。用户浏览一个页面并不代表用户喜欢这个页面展示的物品可能是因为页面链接显示在首页用户更容易点击它隐性反馈虽然不明确但数据量更大。在很多网站中可能只有隐性反馈而没有显性反馈。
下面是一个各代表网站中的一些对比
2.按照反馈的方向分
正反馈 用户的行为倾向于喜欢负反馈 用户的行为倾向于不喜欢 2.用户行为数据如何使用
2.1 用户活跃度和物品流行度的分布
长尾分布 1 物品流行度的长尾分布 2 用户活跃度的长尾分布
2.2 用户活跃度和物品流行度的关系
一般的不活跃的用户要么是新用户要么是只来过网站一两次的老用户。一般的新用户倾向于浏览热门的物品因为他们对网站不熟悉只能点击热门物品 而老用户会逐渐开始浏览冷门的物品 2.3 协同过滤算法
协同过滤算法仅仅基于用户行为数据设计的推荐算法经协同过滤算法的深入研究又提出了很多方法比如基于邻域的方法neghborhood-based、隐语义模型latent factor model、基于图的随机游走算法random walk on graph
广泛应用并最著名的是基于邻域的方法主要包含下面两种算法
1 基于用户的协同过滤算法给用户推荐和他兴趣相似的其他用户喜欢的物品2 基于物品的协同过滤算法给用户推荐和他之前喜欢的物品相似的物品
3.实验设计和算法评测 def SplitData(data,M,k,seed):test []train []random.seed(seed)for user, item in data:if random.randint(0,M) k:test.append([user,item])else:train.append([user,item])return train,test召回率描述有多少比例的用户—物品评分记录包含在最终的推荐列表中而精确率描述最终 的推荐列表中有多少比例是发生过的用户—物品评分记录。下面两段代码给出了召回率和准确率 的计算方法
def Recall(train ,test ,N):hit 0all 0for user in train.keys():tu test[user]rank GetRecommendation(user,N)for item,pui in rank:if item in tu:hit 1all len(tu)return hit/(all * 1.0)def Precision(train, test, N): hit 0 all 0 for user in train.keys(): tu test[user] rank GetRecommendation(user, N) for item, pui in rank: if item in tu: hit 1 all N return hit / (all * 1.0) def Coverage(train, test, N): recommend_items set()all_items set() for user in train.keys():for item in train[user].keys(): all_items.add(item) rank GetRecommendation(user, N) for item, pui in rank: recommend_items.add(item) return len(recommend_items) / (len(all_items) * 1.0)4.基于邻域的的推荐算法
4.1 基于用户的协同过滤算法 性能分析指标 准确率和召回率 可以看到推荐系统的精度指标准确率和召回率并不和参数K成线 性关系。在MovieLens数据集中选择K80左右会获得比较高的准确率和召回率。因此选 择合适的K对于获得高的推荐系统精度比较重要。当然推荐结果的精度对K也不是特别 敏感只要选在一定的区域内就可以获得不错的精度。 流行度 可以看到在3个数据集上K越大则UserCF推荐结果就越热门。这是因为K决定 了UserCF在给你做推荐时参考多少和你兴趣相似的其他用户的兴趣那么如果K越大参 考的人越多结果就越来越趋近于全局热门的物品。 覆盖率 可以看到在3个数据集上K越大则UserCF推荐结果的覆盖率越低。覆盖率的 降低是因为流行度的增加随着流行度增加UserCF越来越倾向于推荐热门的物品从 而对长尾物品的推荐越来越少因此造成了覆盖率的降低。
为了避免全部推送的都是热门的产品我们需要对热门的产品进行惩罚
4.2 基于物品的协同过滤算法 4.3 userCF和itemCF的比较 UserCF的推荐更社会化反映了用户所在的 小型兴趣群体中物品的热门程度而ItemCF的推荐更加个性化反映了用户自己的兴趣传承 在新闻网站中用户的兴趣不是特别细化绝大多数用户都喜欢看热门的新闻。即使是个性 化也是比较粗粒度的比如有些用户喜欢体育新闻有些喜欢社会新闻而特别细粒度的个性 化一般是不存在的。比方说很少有用户只看某个话题的新闻主要是因为这个话题不可能保证 每天都有新的消息而这个用户却是每天都要看新闻的。因此个性化新闻推荐更加强调抓住 新闻热点热门程度和时效性是个性化新闻推荐的重点而个性化相对于这两点略显次要。因 此UserCF可以给用户推荐和他有相似爱好的一群其他用户今天都在看的新闻这样在抓住热 点和时效性的同时保证了一定程度的个性化。这是Digg在新闻推荐中使用UserCF的最重要 原因。 UserCF适合用于新闻推荐的另一个原因是从技术角度考量的。因为作为一种物品新闻的更 新非常快每时每刻都有新内容出现而ItemCF需要维护一张物品相关度的表如果物品更新很 快那么这张表也需要很快更新这在技术上很难实现。绝大多数物品相关度表都只能做到一天 一次更新这在新闻领域是不可以接受的。而UserCF只需要用户相似性表虽然UserCF对于新 用户也需要更新相似度表但在新闻网站中物品的更新速度远远快于新用户的加入速度而且 对于新用户完全可以给他推荐最热门的新闻因此UserCF显然是利大于弊。 但是在图书、电子商务和电影网站比如亚马逊、豆瓣、Netflix中ItemCF则能极大地发 挥优势。首先在这些网站中用户的兴趣是比较固定和持久的。一个技术人员可能都是在购买 技术方面的书而且他们对书的热门程度并不是那么敏感事实上越是资深的技术人员他们看 的书就越可能不热门。此外这些系统中的用户大都不太需要流行度来辅助他们判断一个物品的 好坏而是可以通过自己熟悉领域的知识自己判断物品的质量。因此这些网站中个性化推荐的 任务是帮助用户发现和他研究领域相关的物品。因此ItemCF算法成为了这些网站的首选算法。 此外这些网站的物品更新速度不会特别快一天一次更新物品相似度矩阵对它们来说不会造成 太大的损失是可以接受的。 同时从技术上考虑UserCF需要维护一个用户相似度的矩阵而ItemCF需要维护一个物品 相似度矩阵。从存储的角度说如果用户很多那么维护用户兴趣相似度矩阵需要很大的空间 同理如果物品很多那么维护物品相似度矩阵代价较大。 在早期的研究中大部分研究人员都是让少量的用户对大量的物品进行评价然后研究用 户兴趣的模式。那么对于他们来说因为用户很少计算用户兴趣相似度是最快也是最简单 的方法。但在实际的互联网中用户数目往往非常庞大而在图书、电子商务网站中物品的 数目则是比较少的。此外物品的相似度相对于用户的兴趣一般比较稳定因此使用ItemCF是 比较好的选择。当然新闻网站是个例外在那儿物品的相似度变化很快物品数目庞大 相反用户兴趣则相对固定都是喜欢看热门的所以新闻网站的个性化推荐使用UserCF算法的 更多。 新闻网站的个性化推荐使用UserCF算法的 更多
5.基于隐语义模型的推荐算法
LFMlatent factor model隐语义模型的核心思想是通过隐含特征(latent factor)联系用户兴趣和物品采取基于用户行为统计的自动聚类。 隐含语义分析技术的分类来自对用户行为的统计代表了用户对物品分类的看法。隐含语义分析技术和ItemCF在物品分类方面的思想类似如果两个物品被很多用户同时喜欢那么这两个物品就很有可能属于同一个类。隐含语义分析技术允许我们指定最终有多少个分类这个数字越大分类的粒度就会越细反正分类粒度就越粗。隐含语义分析技术会计算出物品属于每个类的权重因此每个物品都不是硬性地被分到某一个类中。隐含语义分析技术给出的每个分类都不是同一个维度的它是基于用户的共同兴趣计算出来的如果用户的共同兴趣是某一个维度那么LFM给出的类也是相同的维度。隐含语义分析技术可以通过统计用户行为决定物品在每个类中的权重如果喜欢某个类的用户都会喜欢某个物品那么这个物品在这个类中的权重就可能比较高。 LFM通过如下公式计算用户u对物品i的兴趣这个公式中p(u,k)和q(i,k)是模型的参数其中p(u,k)度量了用户u的兴趣和第k个隐类的关系而q(i,k)度量了第k个隐类和物品i之间的关系。这两个参数是从数据集中计算出来的。要计算这两个参数需要一个训练集对于每个用户u训练集里都包含了用户u喜欢的物品和不感兴趣的物品通过学习这个数据集就可以获得上面的模型参数。推荐系统的用户行为分为显性反馈和隐性反馈。LFM在显性反馈数据也就是评分数据上解决评分预测问题并达到了很好的精度。不过这里主要讨论的是隐性反馈数据集这种数据集的特点是只有正样本用户喜欢什么物品而没有负样本用户对什么物品不感兴趣。对负样本采样时应该遵循以下原则 对每个用户要保证正负样本的平衡数目相似。 对每个用户采样负样本时要选取那些很热门而用户却没有行为的物品。下面的Python代码实现了负样本采样过程 def RandomSelectNegativeSample(self, items):ret dict()for i in items.keys():ret[i] 1n 0for i in range(0, len(items) * 3):item items_pool[random.randint(0, len(items_pool) - 1)]if item in ret:continueret[item] 0n 1if n len(items):breakdef LatentFactorModel(user_items, F, N, alpha, lambda):[P, Q] InitModel(user_items, F)for step in range(0,N):for user, items in user_items.items():samples RandSelectNegativeSamples(items)for item, rui in samples.items():eui rui - Predict(user, item)for f in range(0, F):P[user][f] alpha * (eui * Q[item][f] - lambda * P[user][f])Q[item][f] alpha * (eui * P[user][f] - lambda * Q[item][f])alpha * 0.9def Recommend(user, P, Q):rank dict()for f, puf in P[user].items():for i, qfi in Q[f].items():if i not in rank:rank[i] puf * qfireturn rank综上在LFM中重要的参数有4个隐特征的个数F学习速率alpha正则化参数lambda负样本/正样本比例 ratio。通过实验发现ratio参数对LFM的性能影响最大。
6.基于图模型的推荐算法 如上用户A对物品a,b,d有行为。 表示成二分图之后给用户u推荐物品可以转化为度量用户顶点vuvu没有边直连的物品节点在图上的相关性相关性越高的物品在推荐列表中权重越高。顶点的相关性主要体现在如下方面两个顶点之间的路径数 两个顶点之间路径的长度两个顶点之间的路径经过的点相关性高的一对顶点有如下特征两个顶点之间有很多路径相连连接两个顶点之间的路径长度都比较短连接两个顶点之间的路径不会胫骨出度较大的顶点利用随机游走的personalRank算法来为用户推荐物品 假定要给用户u进行个性化推荐可以从用户u对应的节点vuvu节点重新游走如果继续游走那么从当前节点指向的节点按照均匀分布随机选择一个节点作为游走下次经过的节点。 这样重复之后每个物品节点被访问的概率收敛到一个数最终的推荐列表中物品的权重就是物品节点的访问概率。 缺点时间复杂度方面有明显的缺点在为每个用户推荐的时候都需要在整个二分图上迭代直到整个图上的PR(v)收敛耗时。解决减少迭代次数但是会影响精度 从矩阵论出发重新设计算法讲PR转换成为矩阵的形式令M为用户物品二分图的转移概率矩阵即 M(v,v,)1|out(v)|M(v,v,)1|out(v)|只需要计算一次(1−αMT)−1(1−αMT)−1即可。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88068.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!