当前位置: 首页 > 科技观察

推荐算法合集(补充)——邻居选择与算法扩展

时间:2023-03-19 10:29:50 科技观察

【.com原创稿件】一、简介通过以上几篇稿件,可以进一步了解推荐算法的种类和优缺点。很多,之前手稿的内容有些缺失,之前描述的算法内容的深度还达不到专业推荐系统开发者的水平。为此,在本文中,我将补充上述缺失的内容,在上一个基础上提升一个层次,在推荐系统算法上更上一层楼。2.协同过滤算法(CF)扩展2.1相似度度量扩展在前面的协同过滤算法中,解释了邻居推荐中使用的相似度度量方法,包括皮尔逊相关系数(PearsonCorrelation)和改进的余弦向量相似度(AdjuestedCosine)。皮尔逊相关系数是基于用户的邻居推荐算法中常用的度量公式,其推荐效果最好。改进的余弦向量相似度是基于项目的邻居推荐算法中最常用的相似度度量计算公式,效果最好。另外,还有两个不常用的度量公式,因为它们的推荐效果不是很好,所以在前面的内容中没有介绍,在实际应用中也不推荐使用。但是有必要了解一下。(1)均方差(MeanSquaredDifference),用用户u和用户v在同一物品上的差的平方和均值的倒数来表示两个人的相似度,但有个缺点是不能表示负关联关系。(2)斯皮尔曼相关性(SpearmanCorrelation),它利用用户对物品评分的排名来计算两个用户之间的相似度。但缺点是在计算排名时,消耗比较大,当用户评分的可选值只有几个时,会产生大量的平行排名,也会造成推荐效果不佳.2.2两个特例?第一种情况是在最近邻推荐算法的应用中,当两个用户对物品进行评分时,如果评分的物品数量比较少,并且评分的物品的分数比较一致,我们自然会认为这两个用户是比较相似。基于项目的邻居推荐算法也是如此。但实际上,此时两个用户的兴趣爱好其实可能完全不同。因此,为了解决这个问题,可以通过给相似度加上重要性权重,进行相似度缩放来进行相似度转换。这样,处理后的相似度可以更接近于实际的用户相似度。接下来,我们将扩展重要性权威和相似度缩放这两种方法。(1)重要性权重:当两个用户或物品之间具有共同评分的物品和用户数小于给定阈值时,降低相似重要性的权重。阈值的选择一般通过交叉验证的方法进行。在实际场景中,一般当阈值大于等于25时,往往会得到较好的预测结果。(2)相似度缩放:当给定收缩因子对用户或物品的相似度进行收缩变换时,当最终的共同得分数远大于收缩因子时,物品的相似度几乎没有变化;在实际场景中,当收缩因子为100时,效果不错。下面是通过重要性权重和相似度缩放两种方式计算出的相似度公式:另一种情况是,当两个用户对item给出一致的好恶时,可能不如他们给出的方差更大的分数更有信息性和有用性。这时候可以将相似度计算公式转换为用户频率反比(InverseUserFrequency),为每个item分配一个权重。权重公式如下:当将相似度计算公式通过逆用户频率进行转换时,得到的皮尔逊相关系数成为频率加权的皮尔逊相关系数(Frequencey-WeightedPearsonCorrelation),对应的公式如下:-weightedPearsoncorrelationcoefficient2.3邻居选择问题?协同过滤在之前的手稿算法中提到过,它通过选择当前用户的邻居用户组来完成对当前用户的推荐。但是不知道各位读者有没有想过,邻居的选择是不是凭空随机选择的?没有办法选择邻居吗?答案是肯定的。不过之前并没有深入,因为之前相关的知识点太多了,容易混淆。在这里,我们对邻居的选择进行详细说明:在基于邻居的推荐算法中,邻居数量的选择以及邻居的选择规则将对推荐系统的最终效果产生重要影响。在实际应用场景中,基于邻居的推荐算法中邻居的选择方式一般有以下几种:(1)首先过滤掉预选的邻居,过滤方式包括Top-N过滤、阈值过滤和负数过滤.这些过滤器基本上通过名字就知道过滤方式。Top-N过滤无非就是选择前N个物品或用户;阈值过滤无非是设置一个参数,超过或低于这个参数就会被过滤掉;而负数过滤无非就是过滤掉负数。类别。(2).从预先选择的邻居列表中获取集合k个邻居;如果选择的k数太小,预测精度会很低。当k增大时,预测精度会得到一定程度的提升,但达到某个参数值(实际场景中通常为50)太多了,因为有一些重要的关联被不重要的关联削弱了,会导致会导致预测精度下降,因此k的推荐值在25~50之间。但在实际应用场景中,最优的k值需要通过训练集和测试集的交叉验证得到。k-NearestNeighbor(KNN)的具体选择步骤是对类别属性未知的数据集的每个点依次进行如下操作:(1)首先计算已知类别数据集中的每个点与当前点,(2)按照距离从大到小排序;(3)选择距离当前点最近的k(预设)个点;(4)确定前k个点的类别出现频率,根据出现频率最高的k个点当前点的类别作为当前点的预测类别。3.协同过滤算法中K-means算法的SVD矩阵分解中,分解或未分解的评分矩阵过于丰富,即评分数过多,算法的时间复杂度会太高,不适合实时性受到严重影响。这时候就会采用前面提到的K-means算法,不过在之前的手稿中只是随便提到,并没有过多的阐述。那么这里就介绍一下K-means算法。K-mans算法的步骤和思路其实还是比较容易理解的,就是对数据集中的每个点进行分类和组织。将同一属性类别的点归为一类。该算法接收端的输入是未标记的数据集,然后通过聚类算法将数据集的每个点分成不同的组,这也是一种无监督学习算法。具体步骤大致分为以下几个步骤:(1)先随机选取k个点(先预设k的值,一般取小的值比较好)作为聚类的中心点;(2)计算每个点到选中的k个簇中心点的距离,按照每个点与其他中心点的距离排序,将点划分到距离最近的簇中,所有点的类别依次划分;(3)重新计算每个簇的中心点;(4)重复上述步骤2和3,直到聚类中心点位置不变或达到预先设定的迭代次数。4.SGDstochasticgradientdescent4.1SGD的含义之前的手稿中也提到了SGD随机梯度下降算法。该算法一般用于不断调整参数,以减少函数或结果的损失和误差。即给定一个损失函数,然后用梯度下降算法最小化损失函数。所谓梯度下降的理解是,首先对于每个函数像面,在每个方向上都有导数,也就是函数在每个方向上的斜率。在表面各个方向的导数中,导数最大的方向也代表了梯度的方向。因此,梯度下降就是沿着梯度的反方向更新权值,从而有效地找到全局最优解。4.2一个小理解案例?这里有一个例子,可以让其他人更容易理解SGD随机梯度下降。就是把你放在一座山上的任何地方,让你通过一定的方法,以最快的速度到达山顶或山脚下。其实这个方法可以使用SGD随机梯度下降法。先求每个方向的导数,即斜率,再求斜率或导数最大的方向,即梯度。沿着梯度方向走一步,然后计算梯度方向,依此类推。通过梯度下降法,可以让自己在每一步都处于当前位置趋势最大的方向,从而以最快的速度下降到山底或上升到山顶。通过这个原理,可以以最快的速度降低损失函数值或误差。5.推荐系统扩展-攻击在实际应用中,由于推荐系统的推荐或多或少会影响用户的购买行为,因此在带来经济利益的同时,不能假定所有参与评分推荐的用户都是诚实和公平的的。也就是说,森林大了,各种鸟都有。在众多提供推荐或评分建议的用户中。肯定有一些恶意用户。它们会影响推荐系统的推荐效果,以至于推荐系统中最终的推荐列表往往或很少包含某类商品。这种问题称为推荐系统攻击。当然,所有的推荐系统都会遇到这种推荐攻击,也有一些相应的解决方案:(1)尽可能提高那些稳定或高可靠用户的评分权重,即一些长期购买或会员用户等;(2)过滤掉异常数据,比如前后得分差异较大的数据,因为当异常数据大量存在时,会对推荐结果产生不好的影响。6.推荐系统的实现6.1推荐系统实现的意义对于任何一个推荐系统的开发者来说,无论讨论多少理论知识,都只是一个基础。重点是用代码实现一个推荐系统。毕竟,理论来源于实践。只有当你真正设计了一个推荐系统或者完成了一个推荐功能之后,你才能真正掌握之前推荐系统的理论知识。进一步升华理论知识,过渡到实际应用,也是任何公司对程序员的基本编码能力要求。有很多方法或框架可以用来设计推荐系统或完成推荐功能模拟。使用该框架可以帮助开发者快速生成推荐功能模块,从整体上更好地掌握自己设计的推荐系统的功能。而且,从目前的开发市场来看,框架是大多数开发者必备的条件之一。因为只有开发领域的技术高手才能真正意义上的摆脱框架,但也没有必要摆脱它,因为框架的使用也是“站在巨人的肩膀上”,而可以借鉴和借鉴前人的经验或技巧。.6.2框架分类在推荐系统中使用的框架中,比较常用的框架主要分为两类,一类广泛应用于学术研究领域,一类在企业开发领域普遍使用。LibMF、SVDFeature等在学术界应用广泛,Mahout、SpamMLib、Waffles等在企业开发中普遍应用。而且,开发语言的选择也不同。学术界普遍更注重理论和开发,使用的语言更倾向于C、C++和Python,而企业开发会更注重语言的流行度和效率,所以更喜欢JAVA、Scala或蟒蛇。可以看出,Python语言在这个领域会更受欢迎。因此,很多高校新开设了学习Python语言的必修课,企业也更青睐会使用Python的学生和员工。现在的发展势头非常强劲,很多人说有可能赶上开发语言流行冠军——JAVA,坐上榜首的位置,虽然现在还没有实现。为此,在本系列结束后,我会在后面开始一个Python语言的进阶系列。在掌握Python的基础上,实现一个推荐系统会比较容易。7.综上所述,推荐算法合集的理论知识系列就彻底结束了。了解并掌握Python技术后,完成推荐系统或推荐功能的设计,完成实战模拟练习。本系列推荐算法的内容非常多,读者只有在理解这些内容的基础上才能继续对推荐进行更好的延伸和扩展。而对于推荐系统的设计来说,这条路永远是没有尽头的,需要不断完善。为应对时代发展,推荐系统越来越倾向于与人工智能等热点领域相结合,进一步提升推荐的效果和稳定性。因此,推荐系统遇到深度学习势不可挡,也是推荐系统完成新的突破或蜕变的未来。方向在哪里。希望未来深度学习技术能够真正充当推荐系统的两只翅膀,让推荐系统继续腾飞。因此,它对于深度学习或人工智能领域的学习也是必不可少的。以后我会简单总结一下深度学习的知识,为读者在深度学习技术方面打下基础。【原创稿件,合作网站转载请注明原作者和出处为.com】