• 机器学习——推荐系统


    机器学习——推荐系统

    在各类音乐软件或各大购物网站里,通常会存在推荐系统。它可以根据每个用户的个人喜好为用户推荐相应的歌曲(商品),从而增加用户体验,并提高了产品的销量。因此,推荐系统是一个很值得学习的应用领域。

    一个例子

    如下图所示,这是4个用户对5部电影的评价,我们要求评价只能是0-5之间的数。可以看出,有一些已经打分了,有一些还没有。为了增加收入,电影供应商决定为这些观众推荐电影。于是,他们要预测观众对未看过电影的打分,并将得分高的电影推荐给观众。

    为了解决这个问题,我们需要引入一些符号
    (n_u) 表示用户(Users)的数量
    (n_m) 表示电影(Movies)的数量
    (r(i,j)) 表示用户i对电影j是否评价过。如果评价过,那么(r(i,j)=1)
    (y^{(i,j)}) 表示用户i对电影j的评分

    建立模型

    假设我们使用线性回归模型,那么对于每一个用户(j),我们定义一个用户参量( heta^{(j)})。对于每一个电影(i),我们定义一个特征向量(x^{(i)})
    于是,用户(j)对于电影(i)的评价为(( heta^{(j)})^Tx^{(i)})

    下面我们将分类讨论

    • 如果我们有电影参数,那么优化问题变成

    [min limits_{ heta^{(1)},ldots, heta^{(n_u)}} {1 over 2} sum limits_{j=1}^{n_u}sum limits_{i:r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+{lambda over 2} sum limits_{j=1}^{n_u}sum limits_{k=1}^{n}( heta_k^{(j)})^2 ]

    • 如果我们有用户参数,那么优化问题变成

    [min limits_{x^{(1)},ldots,x^{(n_m)}} {1 over 2} sum limits_{i=1}^{n_m}sum limits_{j:r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+{lambda over 2} sum limits_{i=1}^{n_m}sum limits_{k=1}^{n}(x_k^{(i)})^2 ]

    • 如果我们既没有完整的用户参数,也没有完整的电影参数,那么我们得协同学习两者

    [min limits_{ heta^{(1)},ldots, heta^{(n_u)};x^{(1)},ldots,x^{(n_m)}} {1 over 2} sum limits_{(i,j):r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+{lambda over 2} sum limits_{i=1}^{n_m}sum limits_{k=1}^{n}(x_k^{(i)})^2+{lambda over 2} sum limits_{j=1}^{n_u}sum limits_{k=1}^{n}( heta_k^{(j)})^2 ]

    具体的算法会使用梯度下降法,

    [x_k^{(i)}:=x_k^{(i)}-alpha(sum limits_{j:r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)}) heta_k^{(j)}+lambda x_k^{(i)}) ]

    [ heta_k^{(j)}:= heta_k^{(j)}-alpha(sum limits_{i:r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)})x_k^{(i)}+lambda heta_k^{(j)}) ]

    算法步骤

    • 随机初始化( heta^{(1)},ldots, heta^{(n_u)};x^{(1)},ldots,x^{(n_m)})为一些很小的值;

    • 使用梯度下降法最小化代价函数

    [J( heta^{(1)},ldots, heta^{(n_u)};x^{(1)},ldots,x^{(n_m)})={1 over 2} sum limits_{(i,j):r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+{lambda over 2} sum limits_{i=1}^{n_m}sum limits_{k=1}^{n}(x_k^{(i)})^2+{lambda over 2} sum limits_{j=1}^{n_u}sum limits_{k=1}^{n}( heta_k^{(j)})^2 ]

    • 训练结束后,预测用户(j)为电影(i)的评分为(( heta^{(j)})^Tx^{(i)})

    • 通过最后评分的高低,为用户推荐相应的电影

    另外,不同电影的相关程度我们可以用两个向量的夹角来表示

    [ ho ={leftlangle {x^{(i)},x^{(j)}} ight angle over {||x^{(i)}||||x^{(j)}||}} ]

  • 相关阅读:
    爬虫模块BeautifulSoup
    移动端开发概览【webview和touch事件】
    实战JS正则表达式
    相识HTML5 canvas
    运算符中的一些小技巧
    再看Ajax
    跨终端开发必备概念汇总
    谈谈工作,聊聊生活,想想以后
    页面元素坐标和偏移(clientX/pageX/screenX/layerX/offsetWidth/scrollWidth/clientWidth等)相关整理
    CSS3 Flexbox不迷路指南
  • 原文地址:https://www.cnblogs.com/connorzx/p/4739620.html
Copyright © 2020-2023  润新知