目前生活中我们用的互联网产品就会都会涉及到推荐系统,比如逛淘宝时浏览商品时推荐系统会记下用户的喜好,然后推荐同类型或者觉得你感兴趣的商品给你;浏览新闻时根据你历史浏览的内容推荐同类型内容的新闻给你,这就是通俗意义上的推荐系统。
一、基于内容的推荐系统1、问题描述
假使我们是一个电影供应商,我们有 5 部电影和 4 个用户,我们要求用户为电影打分。前三部电影是爱情片,后两部则是动作片,我们可以看出 Alice 和 Bob 似乎更倾向与爱情片, 而 Carol 和 Dave 似乎更倾向与动作片。并且没有一个用户给所有的电影都打过分。我们希望构建一个算法来预测他们每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据。
下面引入一些标记:
nu 代表用户的数量
nm 代表电影的数量
r(i, j) 如果用户 j 给电影 i 评过分则 r(i, j) = 1
y^(i, j)^ 代表用户 j 给电影 i 的评分
mj代表用户 j 评过分的电影的总数
2、推荐系统算法
如下示我们引入两个变量x1表示电影的浪漫程度(爱情片),x2表示电影的动作程度(动作片)
下面我们要基于这些特征来构建一个推荐系统算法。 假设我们采用线性回归模型,我们可以针对每一个用户都训练一个线性回归模型,如θ(1)是第一个用户的模型的参数。 于是,我们有以下的第一个公式(加上正则化参数)当然这个公式是针对第一个用户的模型,如果我们预测所有用户的模型,那么我们就有下面的第二个公式。这样根据第二个公式我们分别求解θ(n)的偏导数就可以用梯度下降法更新我们的模型。
上面的模型是我们知道了电影的类型给出特征值x1和x2,如果我们相反过来并不知道这两个参数的值而是知道每个用户的权限值θ(i)呢?
我们根据用户的θ(i)同样可以用我们的代价函数来求解这个模型,这样的方法我们也称为协同过滤
协同过滤算法使用步骤如下:
初始 x(1), x(2), . . . x(m), θ(1), θ(2), . . . θ(m))为一些随机小值
使用梯度下降算法最小化代价函数
在训练完算法后,我们预测(θ(j))Tx(i)为用户 j 给电影 i 的评分
1、低秩矩阵分解
我们有五部电影,以及四位用户,那么 这个矩阵 Y 就是一个 5 行 4 列的矩阵,它将这些电影的用户评分数据都存在矩阵里就可以推出右边矩阵的评分。
用户在看某部电影 i 的时候,如果你想找 5 部与电影非常相似的电影,为了能给用户推荐 5 部新电影,你需要做的是找出电影 j,在这些不同的电影中与我们要找的电影 i 的距离最小,这样你就能给你的用户推荐几部不同的电影了。
均值归一化(mean Normalization)我们之前学习回归算法的时候就学过这个模型,由于不同特征值间的差值太大,我们常常需要将特征值进行缩放,其中一种方法就是均值归一化,公式是:(x - u)/(max - min)
我们还可以用这种方法求解下面的未知变量的值,对结果 Y 矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值,对于未知变量,我们的新模型会认为她给每部电影的评分都是该电影的平均分。
参考资料 《吴恩达机器学习》16 推荐系统
16.推荐系统 Recommender System
吴恩达机器学习笔记(十六)-推荐系统
吴恩达机器学习—推荐系统