Bootstrap

从0开始学习机器学习--Day31--基于内容的推荐算法

基于内容的推荐算法(Content based recommdation)

推荐系统,也就是我们常说的大数据推送,在我们平时所使用的软件或观看的视频平台上都有加装它,用于推送用户喜爱的数据。从机器学习上来讲,之前我们都是手动设计或构造特征来输入,而推荐系统则是会自动学习一系列合适的特征去输入,更加诠释了”机器学习“四个字。

让我们从一个电影评分的例子来引入这个算法:

电影评分数据特征

假设我们有四名用户A,B,C,D,三部爱情电影和两部动作电影,我们有这四位用户对其中几部电影的评分,想要预测他们对没看过电影的评分,在这里用n_{u}表示用户数量,n_{m}表示电影数量,r(i,j)=1表示用户j对电影i作了一次评分,y^{(i,j)}表示用户 j对电影i的评分是多少(如果r(i,j)=1),x_{1},x_{2}代表该电影是爱情片和动作片的概率,在这里我们可以用线性回归来预测用户对于未观看的电影评分是多少,其代价公式也跟线性回归一样是平方差,不同的是前面的系数里分母去掉了样本量(由于是常数不影响最小值的选取),以及由于不仅仅是对单个用户服务,是对所有用户做预测,所以额外作求和:

预测系统的代价函数

协同过滤(Collaborative filtering)

推荐算法之所以跟之前的算法不同,主要是其可以通过学习来选取输入的特征,也就是说其有通过参数倒推特征的能力。所以实际上,在不知道特征之前,算法可以先通过用户的喜好,也就是参数\theta来推导选取特征,有了一定的特征后再用来预测用户喜好。在这个过程中,用户对电影的评分协同了算法进行更好地优化,并过滤了无用的特征,从而能更更好地预测其评分。

如果将之前和现在的代价函数结合起来,输入特征和参数都是未知量,我们就可以同时预测出两者,区别是在保留第一项平方差的同时加上两者的正则项:\frac{1}{2}\sum_{(i,j):r(i,j)=1}^{}{((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^{2}}+\frac{\lambda}{2}\sum_{i=1}^{n_{m}}\sum_{k=1}^{n}{​{(x_{k}^{(i)})^{2}}}+\frac{\lambda}{2}\sum_{j=1}^{n_{u}}\sum_{k=1}^{n}{​{(\theta_{k}^{(j)})^{2}}},也写作J(x^{(1)},...,x^{(n_{m})},\theta^{(1)},...\theta^{(n_{u})}),这样就不用像之前一样需要反复迭代求出特征和参数的最小值。注意,此时不需要像之前一样加入x_{0}=1这一截距项,因为我们是在学习所有的特征,如果算法真的需要一个一直为1的特征,它可以通过自己学习去获得1这个数值。

有时候,我们可能会对问题直接运行这个算法得到结果,但可能不清楚其预测的过程中参照了什么用户特性,这时就可以通过低秩矩阵分解,将我们的预测值\theta^{T}x分解为\theta,x,这样我们就可以单独分析参数或特征,从而对市场有更清晰的认知,方便我们对算法进行调整。

视频参考:https://www.bilibili.com/video/BV1By4y1J7A5?spm_id_from=333.788.player.switch&vd_source=867b8ecbd62561f6cb9b4a83a368f691&p=100

;