[吴恩达机器学习笔记]16推荐系统5-6协同过滤算法/低秩矩阵分解/均值归一化
16.推荐系统 Recommender System
以为有用的话,欢迎一块儿讨论相互学习~Follow Me
16.5 向量化:低秩矩阵分解Vectorization_ Low Rank Matrix Factorization
示例
当给出一件产品时,你可否找到与之相关的其它产品。
一位用户最近看上一件产品,有没有其它相关的产品,你能够推荐给他
协同过滤算法
我将要作的是:实现一种选择的方法,写出 协同过滤算法 的预测状况
咱们有关于五部电影的数据集,我将要作的是,将这些用户的电影评分,进行分组并存。咱们有五部电影,以及四位用户,那么 这个矩阵 Y 就是一个 5 行 4 列的矩阵,它将这些电影的用户评分数据都存在矩阵里:
使用 协同过滤算法 对参数进行学习,并使用公式\((\theta^{(n_u)})^{T}(x^{(n_m)})\) 对推荐的结果进行预测,获得一个预测值的矩阵,这个矩阵的预测结果和用户评分数据矩阵Y中数据一一对应:
低秩矩阵分解
你也能够将电影的特征按照样本的顺序1,2,3...\(n_m\) 按行排列成矩阵X,将用户的特征按照用户的顺序1,2,3...\(n_u\) 按行排列成矩阵\(\theta\) 按照\(X\theta^T\) 公式进行计算,也能够获得上述 评分预测矩阵 ,这种方法称为 低秩矩阵分解
电影推荐
通过以上操做,咱们会学习到电影的一些特征,也许这些特征不是人所能理解的,可是其真的在某种程度上反映了电影的不一样特色,例若有的反映了电影的 爱情度 ,动做度 ,喜剧度 等等
如今既然你已经对特征参数向量进行了学习,那么咱们就会有一个 很方便的方法 来度量两部电影之间的类似性。例如说:电影 i 有一个特征向量 \(x^{(i)}\) ,你是否能找到一部不一样的电影j,保证两部电影的 特征向量之间的距离 \(x^{(i)}\) 和 \(x^{(j)}\) 很小 ,那就能颇有力地代表电影 i 和电影 j在某种程度上有类似,至少在某种意义上,某些人喜欢电影 i,或许更有可能也对电影 j 感兴趣。 \[||x^{(i)}-x^{(j)}||^2\]
当用户在看某部电影 i 的时候,若是你想找 5 部与电影很是类似的电影,为了能给用户推荐 5 部新电影,你须要作的是找出电影 j,在这些不一样的电影中与咱们要找的电影 i 的距离最小的5部电影,这样你就能给你的用户推荐部不一样的可能喜欢电影了。
16.6 推行工做上的细节:均值归一化Implementational Detail_ Mean Normalization
示例引入
有一个没有给任何电影评分的用户Eve,加上以前的四个用户,假设电影的特征数为n=2,使用改进的 协同过滤算法(即向量为n维,没有截距项\(\theta_0= 1\) ) ,想经过 协同过滤算法 预测Eve用户的偏好特征\(\theta^{(5)}\) ,以下图所示:
因为Eve没有对任何一部电影评过度,因此r(i,j)=1的条件不知足,因此整个式子对\(\theta^{(5)}\) 的值有影响的只剩下 正则项 为了使整个式子最小,则会使正则化项尽量的为0,因此 \(\theta^{(5)}\) 最终的结果是0即\(\theta^{(5)}=\left[\begin{matrix}0\\0\end{matrix}\right]\) ,这样对于预测Eve用户的偏好特征是没有意义的.因此最后经过\((\theta^{(5)})^{T}x^{(i)}=0\) 计算Eve想要看电影的结果也是没有意义的,由于不管\(x^{i}\) 的值是何值,结果均为0.
用平均值代替新用户的值
如上分析所示,若是新用户在没有对任何电影进行评分的情况下使用协同过滤算法进行预测,最终 得不到任何有意义的结果 ,此时咱们想到,对于新用户,咱们可使用每部电影的评分平均值来代替
首先须要对结果 Y 矩阵进行均值归一化处理,将每个用户对某一部电影的评分减去全部 用户对该电影评分的平均值:
而后咱们利用这个新的 Y 矩阵来训练算法,若是咱们要用新训练出的算法来预测评分,则须要将平均值\(\mu\) 从新加回去 ,即计算\[(\theta^{(j)})^{T}x^{(i)}+\mu_i\] 为最终评分.对于 Eve,虽然\((\theta^{(5)})^{T}x^{(i)}\) 仍等于0,可是加上平均值后,咱们的新模型会认为她给每部电影的评分都是 该电影的平均分
欢迎关注本站公众号,获取更多信息