• 协同过滤


    1. 假定已知电影分为K种类型

    为每个电影定义K个特征$mathbf x^{(i)}$,$x_k^{(i)}$表示电影i有多么符合类型k。现在假设所有电影的这些特征值都已知。

    同时为某用户定义K个系数$mathbf heta$,$mathbf heta^Tmathbf x^{(i)}$表示预测出的他对电影i的评分。

    现在要做的是选择$mathbf heta$来线性拟合他对所有电影已有的评分。

    这个系数$mathbf heta$我们可以看成是“偏好度”。对线性回归来说,数字越大表示越偏好。

    2. 把上面的问题反过来,已知每个人对电影类型的偏好向量$mathbf heta^{(j)}$,但是不知道某个电影的类型$mathbf{x}$。

    $mathbf ( heta^{(j)})^Tmathbf x$依然表示预测出对某个电影的评分。

    那么问题就变成了选择$mathbf x$来线性拟合所有人对这部电影的评分。

    3. 一个简单的算法:先随机初始化每个电影的特征$mathbf x^{(i)}$,然后反复调用1,2步,整个系统就会收敛到一个合适的状态。

    4. 改进这个算法:我们把所有电影的特征$mathbf x^{(i)}$和所有用户对特征的偏好$mathbf heta^{(j)}$作为一个整体来拟合所有已有的评分项。这个不再是一个典型的线性回归,但是依旧是采用梯度下降。同时我们可以抛弃常量项$ heta_0^{(i)}$和$x_0^{(j)}$,因为系统会自动学习出一个特征用来代替这些常量。

    5. 一些结论:

    (1)如果用户j未对电影i评分,我们可以用学习出来的$mathbf ( heta^{(j)})^Tmathbf x^{(i)}$来预测这个评分

    (2)$||x^{(i)}-x^{(i')}||$表示两部电影的相似度

    (3)$|| heta^{(j)}- heta^{(j')}||$表示个人偏好的相似度

    6. 实际操作过程中,对于一个用户没有做过任何评分,那么从cost等式看出,最后学习出来的$ heta$将为全0。所以算法要做调整,使得在学出全0的情况下也是合理的。那么我们把每个用户对电影的评分减去所有人对这个电影的平均评分,拿这个结果(Y)去训练整个系统,训练完做预测的时候,把预测值加回对应平均值。 

  • 相关阅读:
    php数据类型
    php输出语句
    php学习知识点框架
    php变量
    php语法
    php 的开发工具
    搭建php环境的几种方法
    redis 的单机安装
    三、其他主机安装zabbix-agent加入到zabbix
    内核参数优化
  • 原文地址:https://www.cnblogs.com/milaohu/p/6354158.html
Copyright © 2020-2023  润新知