Coursera ML笔记 -----week9-2 推荐系统

欢迎点击作者原文地址

推荐系统

我们想要建立一个推荐系统,有这么两种方法:
1. 基于内容的推荐系统content-based recommendations
2. 协同过滤 collaborative filter

基于内容的推荐系统

我们想做的是我们能够根据用户以往对于电影的评分,来给用户推荐电影。

要实现上面的这个推荐系统,我们要做到两件事情:
1. 建立起一个用户对电影评分的模型
2. 根据用户评分的模型从用户没有看过的电影里面推荐合适的电影给用户

我们在建立用户对电影评分模型的时候,其实是在做两件事情:
1. 判断电影是什么类型的电影(基于内容),也就是获取样本数据 x
2. 在过去的历史中,用户对这一类型的电影给出了什么样的评价,也就是获取用户对不同类型电影的偏好,获取对每个类型评分的权重θ,
(在我们给出的例子而言,我们的样本数据 x 已经直接给出,但是如果我们自己想要获取这样子的数据,我们应该怎么对电影的数据进行处理?)

我们先从单个用户的角度来尝试解决问题,很明显,我们可利用线性回归做预测的手段来对用户没有看过的电影做出评分预测。
我们将评分看作是y,基于内容构建特征向量 (x0,x1,x2) ,其中 x0=1 ,求出对应的 θ
设(电影为行,用户为列)
nu 是用户的数量
nm 是电影的总数
m(j) 是第 j 个用户看的电影数量
r(i,j)表示第 j 个用户是否看过第i部电影
y(i,j) 表示第 j 个用户对第i部电影的评分( r(i,j)=1 )
x(i) 是电影 i 的特征向量,表示第i部电影的电影类型
θ(j) 是用户 j 的参数向量,表示第j个用户对电影的偏好,

那么, 用户 j 对电影x(i)的评分预测就是: (θ(j))Tx(i)
损失函数就是:

J(θ(j))=12m(j)i:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2m(j)i=1n(θ(j)k)212i:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2i=1n(θ(j)k)2

我们的optimization objective就是:
minθ(j)J(θ(j))

推广到多个用户的情况,我们的optimization objective 就是:

minθ(1),...,θ(nu)J(θ(1),...,θ(nu))=minθ(1),...,θ(nu)12j=1nui:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2j=1nui=1n(θ(j)k)2

通过上式,我们利用梯度下降法就可以得到 θ(1),...,θ(nu)
θ(j)k:=θ(j)kαi:r(i,j)=1((θ(j))Tx(i)y(i,j))x(i)k  (for k=0)

θ(j)k:=θ(j)kαi:r(i,j)=1((θ(j))Tx(i)y(i,j))x(i)k+λθ(j)k  (for k0)

至此,我们的模型就已经建立完毕。

那么,对于用户没有看过的电影,我们就可以用我们的模型去对电影进行评价,根据每一个用户对该电影的预测评分的高低来决定要不要推荐这部电影给某个用户。

但是我们基于内容的推荐系统有一个很重要的前提就是,我们能够根据内容来提取出特征,也就是获取 x 。但如果很难提取或者提取的成本太大我们要怎么办,这就要用到另外一种方法——协同过滤了。

协同过滤

协同过滤的最大一个特点就是,它可以自动地找到合适的特征!并且在升级款的协同过滤中,xRn,θRn,前面所用到的 x0 和对应的 θ0 都被去掉了,因为如果特征向量中真的有 xi=1 的需求,那么协同过滤会自己去发现这样子的特征,不用我们再硬性制定。

我们这里提到的协同过滤有两个版本:基础款和升级款

基础款

对单部电影,给定 θ(1),...,θ(nu) ,学习参数 x(i)

minx(i)12j:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2k=1n(x(i)k)2

对于所有电影而言,给定 θ(1),...,θ(nu) ,学习参数 x(1),...,x(nm)
minx(1),...,x(nm)12i=1nmj:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2i=1nmk=1n(x(i)k)2

这就是协同过滤,每一个用户在给电影打分时,都有助于算法去寻找到更有效的特征,从而给提升每一个用户的推荐体验。

和前面基于内容的推荐系统相比较,很显然
基于内容的推荐系统是 x(1),...,x(nm) 已知,估计特征 θ(1),...,θ(nu)
协同过滤是 θ(1),...,θ(nu) 已知,估计参数 x(1),...,x(nm)

也就是说我们知道了 θ ,就可以估计 x 。知道了x,也就可以估计 θ
那么在给用户推荐时,我们就有这样子的一个流程:
随机初始化 θ ,然后求 x ,然后求好一点的θ,继续求好一点的 x … … 也就是random initial θxθxθx...

升级款

基础款的协同过滤是要不断来回折腾的,有没有什么办法能够不这么费力呢?这就引入了我们的升级款的协同过滤,能够同时调整 x θ

J(x(1),...,x(nm),θ(1),...,θ(nu))=12(i,j):r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2j=1nui=1n(θ(j)k)2+λ2i=1nmk=1n(x(i)k)2

minx(1),...,x(nm)θ(1),...,θ(nu)J(x(1),...,x(nm),θ(1),...,θ(nu))

其中 xRn,θRn

于是我们就有了以下的协同过滤算法:
1. 随机小值初始化x^{(1)},…,x^{(n_m)},\theta^{(1)},…,\theta^{(n_u)}
2. 利用梯度下降法(或其他方法),最小化损失函数 J(x(1),...,x(nm),θ(1),...,θ(nu))
j=1,...,nu,i=1,...,nm

x(i)k:=x(i)kαj:r(i,j)=1((θ(j))Tx(i)y(i,j))θ(j)k+λx(i)kθ(j)k:=θ(j)kαi:r(i,j)=1((θ(j))Tx(i)y(i,j))x(i)k+λθ(j)k

3. 用户 j 对于电影i的评分预测是: (θ(j))Tx(i)

协同过滤的向量实现

YRnm×nu
预测评分结果:

XΘT=(θ(1))T(x(1))(θ(1))T(x(2))(θ(1))T(x(nm))(θ(2))T(x(1))(θ(2))T(x(2))(θ(2))T(x(nm))(θ(nu))T(x(1))(θ(nu))T(x(2))(θ(nu))T(x(nm))

其中
X=(x(1))T(x(2))T(x(nm))T,Θ=(θ(1))T(θ(2))T(θ(nu))T

另外,我们将矩阵 XΘT 叫做Low Rank Matrix (Factorization)

类似产品推荐

主要以产品特征向量之间的距离 x(i)x(j)2 为依据,距离越小,相似度越高!

均值归一化

在进行推荐时,我们可能碰到这样子的一个情况:对于一个新的用户,他没有对任何电影进行评分,我们应该如何进行推荐?
对一个新用户来讲,他的 θ 也是由 minJ 来计算,但是因为这个用户的 r(i,j)=0 ,那么 J 的第一项是没有意义的,那么θ主要就由 λ2nuj=1ni=1(θ(j)k)2 这项决定,也就是要有 minnk=1θ2k 。从而 θk=0 ,此时对于任意一部电影,有 (θ(j))Tx(i)=0 。那这是什么意思呢,就是该用户对所有类型的电影都一视同仁,没有偏好。我们说这样子的人不是不存在,但是我们更多地是希望能够具有一般性。所以,我们要用到均值归一化的手段来对数据 Y 进行预处理。

  1. 我们对评分矩阵Y的每一行取均值 μ ,也就是求每一部电影的所有评分的均值(基于看过的用户数量平均)。

    • Yμ 代替原来的 Y ,代入J进行 Θ,X 的计算。
    • 预测评分: (θ(j))Tx(i)+μ
    • 不过上面的这个步骤略繁琐了,一句话概括就是:用当前看过该电影的用户的评分均值来做为新用户对该电影的预测!

### 回答1: Coursera-ml-andrewng-notes-master.zip是一个包含Andrew Ng的机器学习课程笔记和代码的压缩包。这门课程是由斯坦福大学提供的计算机科学和人工智能实验室(CSAIL)的教授Andrew Ng教授开设的,旨在通过深入浅出的方式介绍机器学习的基础概念,包括监督学习、无监督学习、逻辑回归、神经网络等等。 这个压缩包中的笔记和代码可以帮助机器学习初学者更好地理解和应用所学的知识。笔记中包含了课程中涉及到的各种公式、算法和概念的详细解释,同时也包括了编程作业的指导和解答。而代码部分包含了课程中使用的MATLAB代码,以及Python代码的实现。 这个压缩包对机器学习爱好者和学生来说是一个非常有用的资源,能够让他们深入了解机器学习的基础,并掌握如何运用这些知识去解决实际问题。此外,这个压缩包还可以作为教师和讲师的教学资源,帮助他们更好地传授机器学习的知识和技能。 ### 回答2: coursera-ml-andrewng-notes-master.zip 是一个 Coursera Machine Learning 课程的笔记和教材的压缩包,由学生或者讲师编写。这个压缩包中包括了 Andrew Ng 教授在 Coursera 上发布的 Machine Learning 课程的全部讲义、练习题和答案等相关学习材料。 Machine Learning 课程是一个介绍机器学习的课程,它包括了许多重要的机器学习算法和理论,例如线性回归、神经网络、决策树、支持向量机等。这个课程的目标是让学生了解机器学习的方法,学习如何使用机器学习来解决实际问题,并最终构建自己的机器学习系统。 这个压缩包中包含的所有学习材料都是免费的,每个人都可以从 Coursera 的网站上免费获取。通过学习这个课程,你将学习到机器学习的基础知识和核心算法,掌握机器学习的实际应用技巧,以及学会如何处理不同种类的数据和问题。 总之,coursera-ml-andrewng-notes-master.zip 是一个非常有用的学习资源,它可以帮助人们更好地学习、理解和掌握机器学习的知识和技能。无论你是机器学习初学者还是资深的机器学习专家,它都将是一个重要的参考工具。 ### 回答3: coursera-ml-andrewng-notes-master.zip是一份具有高价值的文件,其中包含了Andrew Ng在Coursera上开授的机器学习课程的笔记。这份课程笔记可以帮助学习者更好地理解掌握机器学习技术和方法,提高在机器学习领域的实践能力。通过这份文件,学习者可以学习到机器学习的算法、原理和应用,其中包括线性回归、逻辑回归、神经网络、支持向量机、聚类、降维等多个内容。同时,这份笔记还提供了很多代码实现和模板,学习者可以通过这些实例来理解、运用和进一步深入研究机器学习技术。 总的来说,coursera-ml-andrewng-notes-master.zip对于想要深入学习和掌握机器学习技术和方法的学习者来说是一份不可多得的资料,对于企业中从事机器学习相关工作的从业人员来说也是进行技能提升或者知识更新的重要资料。因此,对于机器学习领域的学习者和从业人员来说,学习并掌握coursera-ml-andrewng-notes-master.zip所提供的知识和技能是非常有价值的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值