文章转自公众号【机器学习炼丹术】,关注回复“炼丹”便可得到海量免费学习资料哦!算法
最近找工做的时候发现,机器学习算法工程师每每和推荐算法 相关联,以前对推荐算法并不了解,因此如今我也是零基础入门一下推荐算法。这篇文章是我我的的学习笔记。
app
协同过滤推荐算法是诞生最先,最为基础的推荐算法。 算法经过对用户历史行为数据的挖掘发现用户的偏好,基于不一样的偏好对用户进行群组划分并推荐品味类似的商品。机器学习
协同过滤算法分为两类:学习
其实我一开始对这个协同过滤 的概念不太了解,直到看了collaborative这个单词的释义,就是两个物体同时出现的频率。
大数据
基于用户的协同过滤算法是经过用户的历史行为数据 发现用户对商品或内容的喜欢,例如(商品的购买,收藏,内容评价或者分享内容等)。根据不一样用户对相同商品或者内容的态度和偏好程度计算用户之间的关系。在有相同喜爱的用户之间进行商品推荐。网站
换句话说 , 假如A和B用户都购买了一样的三本书,而且都给出了5星好评,那么就认为A和B是同一类用户。而后把A购买的另一本书推荐给B。编码
如今考虑一种最简单的状况,5个用户都购买了两种商品,而后并对商品进行打分,以下图:
spa
最简单的方法就是画图,加入用商品1的评分做为Y轴,商品2的评分做为X轴,那么就能够获得下面的散点图:
3d
常见的想法能够用欧几里得距离来衡量用户之间的类似度。blog
除了用欧氏距离来衡量,皮尔逊相关度是另外一种计算用户间关系的方法。如今考虑下面这一种更加复杂、也更加接近真实场景的数据:
其实呢?皮尔逊相关系数其实就是两个变量之间的协方差和标准差的比值:
再换一个写法,就是下面这个公式:
对于这个,并不陌生。皮尔逊相关系数在-1到1之间。0表示不相关,1表示极强正相关,-1表示极强负相关。
如今来简单计算一下上面例子中,用户A与用户B之间的皮尔逊相关系数。
\(\mu_A=(3.3+6.5+2.8+3.4+5.5)/5=4.3\)
\(\mu_B=(3.5+5.8+3.1+3.6+5.1)/5=4.22\)
\(\sum^n_{i=1}(X_i-\bar{X})(Y_i-\bar{Y})=7.49\)
\(\sum^n_{i=1}(X_i-\bar{X})^2=10.34\)
\(\sum^n_{i=1}(Y_i-\bar{Y})^2=5.428\)
\(r=\frac{7.49}{\sqrt{10.34}\sqrt{5.428}}=0.99978\)
剩下的Pearson相关系数以下:
假设咱们为用户C推荐商品,先检查类似度列表,发现用户C和D、E的pearson系数较高。因此认为这三个用户有相同的偏好,因此对C推荐D和E买过的商品。可是不能推荐商品1~5,由于这些用户C已经买过了。
如今咱们找到了用户D和E买过的其余的商品A,B,C,D,E,F。而后让用户D和E与用户C的类似度做为权重 ,计算他们给这些商品打分的加权分数。而后给C按照加权分数从高到低进行推荐。
已经讲完了基于用户的协同过滤算法。这个算法依靠用户的历史行为数据来计算类似度,因此是须要必定的数据积累 ,这其中涉及到冷启动问题。 对于新网站或者数据量较少的网站,通常会采用基于物品的协同过滤方法。
其实这个和基于用户的方法很想,就是把商品和用户互换。经过计算不一样用户对不一样物品的评分得到物品间的关系。而后根据物品间的关系对用户进行类似物品的推荐。
因此这里咱们一开始的数据能够写成这个样子:
而后计算出物品之间的相关系数:
假设咱们要给用户C推荐商品。
在基于用户的算法中,咱们的流程是:推荐给用户C->寻找与用户C相同爱好的用户->寻找这些用户购买的其余商品的加权打分。
如今基于物品的算法中,咱们的流程是。发现用户C购买了商品4和5,找到一样购买了4和5商品的其余用户123.而后找到其余用户123购买的新商品A、B、C
计算获得商品4和5与新商品ABC之间的相关度。
而后进行加权打分排序。
如上图,协同算法中,左边的\(m\times n\)的矩阵中,m表示样本的数量,n表示商品的数量。矩阵的数值表示用户对某一个商品的喜爱程度,分数越高表示越喜欢这个物品。0表示没有买过该商品。
【整个协同过滤包括两个过程】
【User-based & Item-based】
User-based的基本思想就是用户A喜欢物品a,用户B喜欢物品abc,用户C喜欢物品ac,那么使用以相关系数为衡量的最近邻算法,能够把用户C当成用户A的最近的邻居,而从推荐给A商品c。
Item-based的基本思想是现根据历史数据计算物品之间的类似性,而后把用户喜欢的相相似的物品推荐给用户。由于咱们知道喜欢a的用户也喜欢c,因此推断出物品a和c很是类似,这样能够给购买过商品a的用户推荐商品c。
【User-based缺陷】
而Item-based的话,能够预先在线下先计算冲不一样商品之间的类似度,而后把结果存在表中,推荐的时候直接查表。
这个就是差值平方的和的开方。
这个就是以前详细讲解的相关系数。
经过计算两个向量之间的夹角来计算物品的类似度。由于不一样的用户可能有不一样的性格,可能有一我的给什么东西打分都很高,另一我的给什么东西打分都低,这样的话使用Pearson系数会断定这两我的偏好不一样,而向量余弦会更加关注用户给不一样商品打分的相对状况。
(PS:其中分子为两个向量的内积,即两个向量相同位置的数字相乘。)
余弦的优点在于关注相对打分,可是这也是他的缺点。女生相对于篮球,更喜欢足球一些。男生也是如此。难道咱们能说男生女生的喜爱一致吗?咱们是不能推荐运动用品给这样的女生的。然而余弦类似度看不到这些,由于它只关注相对打分。
假设女生给篮球足球打分(1,2),男生打分(8,9)
【cosine】
\(\frac{1*8+2*9}{\sqrt{5}\sqrt{64+81}} \approx 0.9656\)
而Adjective Cosine是让数值减去物品打分的均值,让低于平均水平的打分变成负数。这下子向量的方向一下有一个巨大的改变。篮球的均分4.5,足球的均分5.5
【Adjecitve Cosine】
\(\frac{(1-4.5)*(8-5.5)+(2-4.5)*(9-5.5)}{\sqrt{(1-4.5)^2+(2-4.5)^2}\sqrt{(8-5.5)^2+(9-5.5)^2}} \approx -0.945\)
一会儿就把差距体现出来了。
能够看的出来,余弦类似度存在必定的问题,因此建议使用调整余弦类似度与Pearson。
【Adjective Cosine VS Pearson】
以前提到了预测过程(预测用户给为打分的商品的打分状况。)
对用户已经打分的物品的分数进行加权求和,而权值天然是各个物品与预测物品之间的类似度,而后再除以总权重值得和便可。