推荐系统(Recommender Systems)
推荐系统根据浏览用户过去买过什么书,或过去评价过什么电影来判断并推荐新产品给用户。
这些系统会为像亚马逊和网飞这样的公司带来很大一部分收入。
因此,对推荐系统性能的改善,将对这些企业的有实质性和直接的影响。
对机器学习来说,特征是很重要的,你所选择的特征,将对你学习算法的性能有很大的影响。因此,在机器学习中有一种大思想,它针对一些问题,可能并不是所有的问题,而是一些问题,有算法可以为你自动学习一套好的特征。推荐系统就是一个例子。
例子: 我们有 5 部电影和 4 个用户, 我们要求用户为电影打分。
基于内容的推荐系统(Content Based Recommendations)
在一个基于内容的推荐系统算法中,假设对于希望推荐的东西有一些数据,这些数据是有关这些东西的特征。
在例子中,假设每部电影都有两个特征,如 x1代表浪漫程度,x2 代表动作程度。
下面我们要基于这些特征来构建一个推荐系统算法。
假设我们采用线性回归模型,可以针对每一个用户都训练一个线性回归模型。
代价函数:
上面的代价函数只是针对一个用户的, 为了学习所有用户, 我们将所有用户的代价函数求和:
如果要用梯度下降法来求解最优解,我们计算代价函数的偏导数后得到梯度下降的更新公式为:
在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。
相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。
首先,用户要对拥有特征的电影进行评分,此时就可以学习出用户的偏好参数。
之后,上线新电影时,用户对其观看并打分,此时针对这个新电影,就可以根据用户的偏好参数来自动学习出电影的特征。
—————————————————————————————————————————————————————————
协同过滤(Collaborative Filtering)
但是如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了。
协同过滤算法可以同时学习这两者。
优化目标改为同时针对 x 和 θ 进行:
对代价函数求偏导数的结果如下:
注:在协同过滤从算法中,我们通常不使用bias项,如果需要的话,算法会自动学得。
协同过滤算法使用步骤如下:
对于电影 x(i)和另一电影 x(j),依据两部电影特征向量之间的距离 ||x(i)-x(j)|| 的大小,可以判断它们是否为同一类电影。
小结:
—————————————————————————————————————————————————————————
举例子:
1.当给出一件产品时,你能否找到与之相关的其它产品。
2.一位用户最近看上一件产品,有没有其它相关的产品,你可以推荐给他。
我将要做的是:实现一种选择的方法,写出协同过滤算法的预测情况。
我们有关于五部电影的数据集,我将要做的是,将这些用户的电影评分,进行分组并存到一个矩阵中。
我们有五部电影,以及四位用户,那么这个矩阵 Y 就是一个 5 行 4 列的矩阵,它将这些电影的用户评分数据都存在矩阵里:
推出评分:
找到相关影片:
现在既然你已经对特征参数向量进行了学习,那么我们就会有一个很方便的方法来度量两部电影之间的相似性。
例如说:电影 i 有一个特征向量 x(i),你是否能找到一部不同的电影 j,保证两部电影的特征向量之间的距离 x(i)和 x(j)很小,那就能很有力地表明电影 i 和电影 j 在某种程度上有相似,至少在某种意义上,某些人喜欢电影 i,或许更有可能也对电影 j 感兴趣。
总结一下, 当用户在看某部电影 i 的时候,如果你想找 5 部与电影非常相似的电影,为了能给用户推荐 5 部新电影,你需要做的是找出电影 j,在这些不同的电影中与我们要找的电影 i 的距离最小,这样你就能给你的用户推荐几部不同的电影了。
通过这个方法, 希望你能知道, 如何进行一个向量化的计算来对所有的用户和所有的电影进行评分计算。 同时希望你也能掌握, 通过学习特征参数, 来找到相关电影和产品的方法。
实现细节:均值归一(Implementational Detail_ Mean Normalization)