台湾大学林轩田机器学习技法课程学习笔记15 -- Matrix Factorization
来源:互联网 发布:长篇小说投稿 知乎 编辑:程序博客网 时间:2024/06/04 19:57
上节课我们主要介绍了Radial Basis Function Network。它的原理就是基于距离相似性(distance-based similarities)的线性组合(linear aggregation)。我们使用k-Means clustering算法找出具有代表性的k个中心点,然后再计算与这些中心点的distance similarity,最后应用到RBF Network中去。
LinearNetwork Hypothesis
回顾一下,我们在机器学习基石课程的第一节课就提到过,机器学习的目的就是让机器从数据data中学习到某种能力skill。我们之前举过一个典型的推荐系统的例子。就是说,假如我们手上有许多不同用户对不同电影的排名rank,通过机器学习,训练一个模型,能够对用户没有看过的某部电影进行排名预测。
一个典型的电影推荐系统的例子是2006年Netflix举办的一次比赛。数据包含了480189个用户和17770部电影,总共1亿多个排名信息。该推荐系统模型中,我们用
下面我们来进一步看看这些抽象的特征,
一种最简单的encoding方式就是binary vector encoding。也就是说,如果输入样本有N个,就构造一个维度为N的向量。第n个样本对应向量上第n个元素为1,其它元素都是0。下图就是一个binary vector encoding的例子。
经过encoding之后,输入
总共有N个用户,M部电影。对于这样的数据,我们需要掌握每个用户对不同电影的喜爱程度及排名。这其实就是一个特征提取(feature extraction)的过程,提取出每个用户喜爱的电影风格及每部电影属于哪种风格,从而建立这样的推荐系统模型。可供选择使用的方法和模型很多,这里,我们使用的是NNet模型。NNet模型中的网络结构是
说到这里,有一个问题,就是上图NNet中隐藏层的tanh函数是否一定需要呢?答案是不需要。因为输入向量x是经过encoding得到的,其中大部分元素为0,只有一个元素为1。那么,只有一个元素
由于中间隐藏层的转换函数是线性的,我们把这种结构称为Linear Network(与linear autoencoder比较相似)。看一下上图这个网络结构,输入层到隐藏层的权重
如果是单个用户
Basic Matrix Factorization
刚刚我们已经介绍了linear network的模型和hypothesis。其中Vx可以看作是对用户x的一种特征转换
推导完linear network模型之后,对于每组样本数据(即第n个用户第m部电影),我们希望预测的排名
上式中,灰色的部分是常数,并不影响最小化求解,所以可以忽略。接下来,我们就要求出
我们的目标是让真实排名与预测排名尽可能一致,即
上面的表格说明了我们希望将实际排名情况R分解成两个矩阵(V和W)的乘积形式。V的维度是
那么,Matrix Factorization的目标就是最小化
当
当
这种算法叫做alternating least squares algorithm。它的处理思想与k-Means算法相同,其算法流程图如下所示:
alternating least squares algorithm有两点需要注意。第一是initialize问题,通常会随机选取
在上面的分析中,我们提过Matrix Factorization与Linear Autoencoder的相似性,下图列出了二者之间的比较。
Matrix Factorization与Linear Autoencoder有很强的相似性,都可以从原始资料汇总提取有用的特征。其实,linear autoencoder可以看成是matrix factorization的一种特殊形式。
Stochastic Gradient Descent
我们刚刚介绍了alternating least squares algorithm来解决Matrix Factorization的问题。这部分我们将讨论使用Stochastic Gradient Descent方法来进行求解。之前的alternating least squares algorithm中,我们考虑了所有用户、所有电影。现在使用SGD,随机选取一笔资料,然后只在与这笔资料有关的error function上使用梯度下降算法。使用SGD的好处是每次迭代只要处理一笔资料,效率很高;而且程序简单,容易实现;最后,很容易扩展到其它的error function来实现。
对于每笔资料,它的error function可表示为:
上式中的err是squared error function,仅与第n个用户
很明显,
计算完任意一个样本点的SGD后,就可以构建Matrix Factorization的算法流程。SGD for Matrix Factorization的算法流程如下所示:
在实际应用中,由于SGD算法简单高效,Matrix Factorization大多采用这种算法。
介绍完SGD for Matrix Factorization之后,我们来看一个实际的应用例子。问题大致是这样的:根据现在有的样本资料,预测未来的趋势和结果。显然,这是一个与时间先后有关的预测模型。比如说一个用户三年前喜欢的电影可能现在就不喜欢了。所以在使用SGD选取样本点的时候有一个技巧,就是最后T次迭代,尽量选择时间上靠后的样本放入到SGD算法中。这样最后的模型受这些时间上靠后的样本点影响比较大,也相对来说比较准确,对未来的预测会比较准。
所以,在实际应用中,我们除了使用常规的机器学习算法外,还需要根据样本数据和问题的实际情况来修改我们的算法,让模型更加切合实际,更加准确。我们要学会灵活运用各种机器学习算法,而不能只是照搬。
Summary of Extraction Models
从第12节课开始到现在,我们总共用了四节课的时间来介绍Extraction Models。虽然我们没有给出Extraction Models明确的定义,但是它主要的功能就是特征提取和特征转换,将原始数据更好地用隐藏层的一些节点表征出来,最后使用线性模型将所有节点aggregation。这种方法使我们能够更清晰地抓住数据的本质,从而建立最佳的机器学习模型。
下图所示的就是我们介绍过的所有Extraction Models,除了这四节课讲的内容之外,还包括之前介绍的Adaptive/Gradient Boosting模型。因为之前笔记中都详细介绍过,这里就不再一一总结了。
除了各种Extraction Models之外,我们这四节课还介绍了不同的Extraction Techniques。下图所示的是对应于不同的Extraction Models的Extraction Techniques。
最后,总结一下这些Extraction Models有什么样的优点和缺点。从优点上来说:
easy:机器自己完成特征提取,减少人类工作量
powerful:能够处理非常复杂的问题和特征提取
另一方面,从缺点上来说:
hard:通常遇到non-convex的优化问题,求解较困难,容易得到局部最优解而非全局最优解
overfitting:模型复杂,容易造成过拟合,需要进行正则化处理
所以说,Extraction Models是一个非常强大的机器学习工具,但是使用的时候也要小心处理各种可能存在的问题。
总结
本节课主要介绍了Matrix Factorization。从电影推荐系统模型出发,首先,我们介绍了Linear Network。它从用户ID编码后的向量中提取出有用的特征,这是典型的feature extraction。然后,我们介绍了基本的Matrix Factorization算法,即alternating least squares,不断地在用户和电影之间交互地做linear regression进行优化。为了简化计算,提高运算速度,也可以使用SGD来实现。事实证明,SGD更加高效和简单。同时,我们可以根据具体的问题和需求,对固有算法进行一些简单的调整,来获得更好的效果。最后,我们对已经介绍的所有Extraction Models做个简单的总结。Extraction Models在实际应用中是个非常强大的工具,但是也要避免出现过拟合等问题。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程
- 台湾大学林轩田机器学习技法课程学习笔记15 -- Matrix Factorization
- 机器学习技法课程学习笔记15 -- Matrix Factorization
- coursera机器学习技法笔记(15)——Matrix Factorization
- 台湾大学林轩田机器学习技法课程学习笔记1 -- Linear Support Vector Machine
- 台湾大学林轩田机器学习技法课程学习笔记2 -- Dual Support Vector Machine
- 台湾大学林轩田机器学习技法课程学习笔记3 -- Kernel Support Vector Machine
- 台湾大学林轩田机器学习技法课程学习笔记4 -- Soft-Margin Support Vector Machine
- 台湾大学林轩田机器学习技法课程学习笔记5 -- Kernel Logistic Regression
- 台湾大学林轩田机器学习技法课程学习笔记6 -- Support Vector Regression
- 台湾大学林轩田机器学习技法课程学习笔记7 -- Blending and Bagging
- 台湾大学林轩田机器学习技法课程学习笔记8 -- Adaptive Boosting
- 台湾大学林轩田机器学习技法课程学习笔记9 -- Decision Tree
- 台湾大学林轩田机器学习技法课程学习笔记10 -- Random Forest
- 台湾大学林轩田机器学习技法课程学习笔记11 -- Gradient Boosted Decision Tree
- 台湾大学林轩田机器学习技法课程学习笔记12 -- Neural Network
- 台湾大学林轩田机器学习技法课程学习笔记13 -- Deep Learning
- 台湾大学林轩田机器学习技法课程学习笔记14 -- Radial Basis Function Network
- 台湾大学林轩田机器学习技法课程学习笔记16(完结) -- Finale
- Java继承知识点总结(加面试题实例)
- 简单使用JTable读取数据库的表
- Rotate List leetcode java
- java中集合工具类Collections的使用
- 集训8.16最小生成树讲解
- 台湾大学林轩田机器学习技法课程学习笔记15 -- Matrix Factorization
- 用Tensorflow训练的AI玩flappy bird小游戏
- poj 1061 青蛙的约会
- jQuery ajax()请求数据工作笔记
- Java简单实现多线程复制文件
- offset家族
- 【MFC学习】菜单资源
- 个人总结php笔试题五
- save could not be completed.Reason:Some characters cannot be mapped using 'ISO-8859-1'character enco