Andrew机器学习课程笔记(5)—— 推荐系统、大数据下的机器学习

推荐系统

推荐系统的基本思路很简单,教程中用了线性回归的方法。

以电影推荐为例,假设已知电影的标签(爱情类、战争类等,X),又知道用户对不同类别的电影的喜爱度(Y),据此即可训练出一个模型。以后对一部新电影,提取其标签后便可用该模型预测用户的喜爱度,从而进行推荐(图1-1)。


图1-1. 电影推荐的一个例子(图片来源:教程视频)

图1-1中x1和x2为每部电影在不同类别(例举2种)的权重,4个用户对其进行评分(0-5),问号的部分表示用户没看过,即推荐系统需要预测的部分。


上式即为训练的目标函数,r(i,j)=1表示仅对用户评价过的条目进行累加,显然,sita向量就是最终的模型了。

当然,实际应用没这么简单,本节主要探讨以下两个问题:协同过滤均值归一化

协同过滤

实际训练中我们也许并不知道某部电影在不同类型上的打分(x),同时也不知道用户参数(sita)(当然,只要知道其中一个值便可训练得到另一个值)。

一个容易想到的方法是:首先随机初始化一组sita值或x值,然后以其为标准训练出一组x值或sita值,然后重复直到收敛

教程给出的协同过滤方法更直接:将sita和x均视为未知,随机初始化后代入改进过的优化函数(式1.2)使用梯度下降法计算


需要注意的是,1.2式中电影类别特征向量维数与特征数一样(之前会在特征向量第一位加上固定的1)。教程表示这是为了保证迭代的灵活性,但我觉得影响应该不大。

这样得到的模型便可用于预测了,同时,通过计算电影类别向量的距离,还可实现同类电影的推荐。

均值归一化

考虑这样一种情况:当前用户一部电影都没看过:


图1-2. Eve对所有电影都没打分的情况(图片来源:教程视频)

对该用户进行训练时,1.2式仅剩下了最后一个对sita进行正则化的部分,可想而知,最终得到的该用户sita向量为0向量。

为了解决这个问题,教程建议首先对所有的打分进行均值归一化(原始值-均值


图1-3. 均值归一化(图片来源:教程视频)

预测时将模型得到的值再加上均值即得到最终得分。这样一来,对于Eve,模型得到的预测就是均值了。

对于某部电影没有一个人打分的情况(图1-3 Y阵某行全为问号),也可用类似的方法处理(按列求均值,实际意义就是某用户对所有电影的期望)

基于大数据集的机器学习

正如andrew所说,在很多情况下机器学习算法的表现可能并不在于算法的选择,而在于训练样本的大小。深度学习之所以好用,与它依赖的大样本集是分不开的。

但是在决定使用大数据集来训练之前,还是需要判断增大样本集是否能有效提升目前的工作,毕竟大数据意味着高耗时

判断标准很简单,在本系列第2节有讨论过:通过误差曲线观察目前模型是过拟合还是欠拟合。显然过拟合的模型是需要增大训练集的

这部分主要讨论以下三个问题:随机梯度下降算法在线学习MapReduce

随机梯度下降法

之前线性回归里用到的是批量梯度下降法,每一次参数的更新都需要计算所有样本梯度之和,它的好处是可以确保梯度方向以更高概率指向全局最优

但对于大数据集,这种方法将非常耗时。随机梯度下降法每次参数的更新只考虑当前一个样本


图2-1. 批量梯度下降和随机梯度下降(图片来源:教程视频)

随机梯度下降法首先随机排列所有样本,然后对每个样本计算修正后的sita。一般repeat的次数在1~10

因为每次修正只考虑当前样本,所以总体上来看,随机梯度法的收敛比批量梯度法要“更曲折”


图2-2. 批量梯度法(红线)和随机梯度法(紫线)的一种可能表现(图片来源:视频教程)

批量梯度下降每次更新完参数后计算所有样本的误差,求和得到本次迭代误差。那么随机梯度法呢?一种可行的方法是:更新完参数后,计算该样本的误差并保存,当收集了最近N个误差后对其取平均得到最近的一个误差值(可以想象,如果N较小,得到的曲线波动会较大)。

还有两种改进版本的梯度下降法:小批量梯度下降法变学习率梯度下降法

小批量梯度下降法介于批量梯度法和随机梯度法之间,每次更新参数考虑当前N个样本(1<N<全部样本)

变学习率梯度法不在固定学习率,而是随着迭代的次数慢慢减小学习率(显微镜先粗调再细调的道理),学习率公式一般为:常量1 / (迭代次数+常量2)

在线学习

在线学习针对训练数据可以流式更新的情况(比如网站)。

其训练方法与随机梯度下降法类似,每次针对当前一条数据进行训练。不同的是,他不再保存历史数据,因为新数据总是源源不断的过来,而且新数据的特征往往与历史数据不一样(不同时期人们的兴趣不一样)。

MapReduce

实现很复杂(可以看看hadoop),但其核心就是数据的并行计算。

具体到机器学习,当算法比较耗时的运算可以以累加的形式组合时(并联和串联的关系)便可考虑MapReduce。举个栗子:


图2-3. 小批量梯度法用MapReduce(图片来源:教程视频)

如图2-3,MapReduce将总共400次的梯度计算分配给了4个计算单元(可以是4台计算机也可以是1台计算机的4个核),待每个计算单元完成后再汇总便得到了最终的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值