新生任务-1
一、推荐系统
1. 什么是推荐系统
推荐系统顾名思义就是为用户进行推荐的系统. 无论是商品、音乐、书籍 或 电影, 都能够通过这样的一个系统对使用者进行推荐.
像淘宝中给你推荐你可能感兴趣的商品, 抖音软件中你下一条即将播放的视频, 这些都算是推荐系统的实际运用场景.
2. 推荐系统的发展
关于推荐系统一词, 很多人的第一印象是亚马逊当年号称有 20% 的成交来源于推荐, 就像很多人讲大数据, 总是会提啤酒和尿布的故事(世界杯的时候, 丈夫会在购买啤酒的同时购买尿布).
在 PC 时代, 推荐系统更像是一个补充. PC 屏幕很大, 推荐的场景能出现在各种地方, 比如很多电商公司的看了又看、买了又买, 都是很大的推荐场景. 这个时候的技术, 和机器学习的关系并不大, 以数据挖掘为主.
推荐系统井喷式的发展是在移动互联网时代, 每个人只要拥有一个移动设备就能成为推荐系统的数据来源, 而且更具有说服力.
3. 推荐系统未来展望
在推荐系统中需要不断提升的应该是用户对推荐的事物的满意程度. 这应该算是推荐系统的终极目标, 但是满意程度只是一个感觉. 在推荐系统中也就只能通过对事物的评分来描述满意程度.
人是善变的生物, 对事物打分也不一定是绝对理智的行为. 这是不能被忽视的因素. 这也导致整个系统的复杂度将提升.
推荐系统最大的优点是千人千面, 最大的缺点是号称千人千面; 千人千面听着非常美好, 如果能做到, 那就可以用一个 super app 满足所有人的需求.
可惜现实是残酷的, 技术的发展远不如预期, 无论做再好的推荐系统, 目前的主流技术都是基于 behavior 的. 第一个问题就是用户的冷启动, 当用户不留下 behavior 时, 各大推荐系统都很难有好的表现. 此时应用也就只能推荐一些热门产品给用户.
再者, 我们放弃主动选择信息转而交给推荐系统这一行为, 很有可能导致我们走向信息茧房.
所谓信息茧房是指一个人会不断地看到自己所看过的、或者是感兴趣的东西, 长此以往, 他就会变得越来越不能包容其他事物, 越来越偏执, 犹如陷入蚕茧一般.
二、训练集、测试集和验证集
用一个不恰当的比喻来说明3种数据集之间的关系 :
训练集 : 学生的课本, 学生根据课本里的内容来掌握知识.
测试集 : 考试, 考的题是平常都没有见过, 考察学生举一反三的能力.
验证集 : 作业, 通过作业可以知道不同学生学习情况、进步的速度快慢.
传统上, 一般三者切分的比例是 6 : 2 : 2, 验证集并不是必须的. 当然也有 8 : 1 : 1 比例的划分
训练集直接参与了模型调参的过程, 显然不能用来反映模型真实的能力 ( 防止课本死记硬背的学生拥有最好的成绩, 即防止过拟合 )
验证集参与了人工调参 ( 超参数 ) 的过程, 也不能用来最终评判一个模型( 刷题库的学生不能算是学习好的学生 )
所以要通过最终的考试 ( 测试集 ) 来考察一个学 ( 模 ) 生 ( 型 ) 真正的能力 ( 期末考试 )
三、常规人工奇异值分解
先写出奇异值分解公式
\[ A = U \Sigma V^{\mathrm{T}} \]
其中 \(\Sigma = \begin{bmatrix} \sigma_1& & \\ & \cdots & \\ & & \sigma_r\end{bmatrix}\) \(U\) 和 \(V\) 是正交矩阵
常规求解方式是利用
\[ \begin{aligned} A^{\mathrm{T}}A &= V \Sigma^{\mathrm{T}} U^{\mathrm{T}} U \Sigma V^{\mathrm{T}} \\ &= V \Sigma^{\mathrm{T}}\Sigma V^{\mathrm{T}} \\ &= V \begin{bmatrix} \sigma_1^2& & & \\ & \sigma_2^2& & \\ & & \ddots & \\ & & & \sigma_r^2 \end{bmatrix} V^{\mathrm{T}} \end{aligned} \]
这个式子是正定矩阵 \(A^{\mathrm{T}}A\) 的正交分解.
该用例来自 MIT 线性代数课程
例 1 : 已知矩阵 \(A=\begin{bmatrix} 4& 4\\ -3& 3\end{bmatrix}\), 求其 \(SVD\) 分解
先计算 \(A^{\mathrm{T}}A\), 得到 (这里是求 V)
\[ A^{\mathrm{T}}A = \begin{bmatrix} 25& 7 \\ 7 & 25 \end{bmatrix} \]
求出特征值和特征向量, 并对特征向量使用施密特正交化
\[ \lambda_1 = 32, x_1 = \begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{bmatrix} \]
\[ \lambda_2 = 18, x_2 = \begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{-1}{\sqrt{2}} \end{bmatrix} \]
又根据 \(AA^{\mathrm{T}}\) 重复上述步骤 (这里是求 U)
\[ AA^{\mathrm{T}} = \begin{bmatrix} 32& 0 \\ 0 & 18 \end{bmatrix} \]
对应的特征值和特征向量是
\[ \lambda_1 = 32, x_1 = \begin{bmatrix} 0 \\ 1 \end{bmatrix} \]
\[ \lambda_2 = 18, x_2 = \begin{bmatrix} 0 \\ 1 \end{bmatrix} \]
直接代入就可以得到
\[ \begin{bmatrix} 4& 4 \\ 3& -3 \end{bmatrix} = \begin{bmatrix} 1& 0 \\ 0& 1 \end{bmatrix} \begin{bmatrix} \sqrt{32}& 0 \\ 0 & \sqrt{18} \end{bmatrix} \begin{bmatrix} \frac{1}{\sqrt{2}}& \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{-1}{\sqrt{2}} \end{bmatrix} \]
但是这样分解之后, 第 4 步计算出来的矩阵是 \(\begin{bmatrix} 4&4 \\ -3 & 3 \end{bmatrix}\) 和最开始的矩阵符号不一样, 这是因为特征向量的方向问题会对结果产生影响.
所以要使用原始公式 \(\sigma_iu_i = Av_i\) 确定了 \(v\) 和 \(\sigma\), 直接代入就能得到 \(u\). 通过下面的例子进行展开描述.
例 2 : 已知矩阵 \(A=\begin{bmatrix} 4& 3\\ 8& 6\end{bmatrix}\), 求其 \(SVD\) 分解
可知 \(A\) 的秩为 1, 行空间是一条直线, 零空间是与之垂直的一条直线
同时 \(A\) 的列空间是一条直线, 左零空间是与之垂直的一条直线
那么行空间方向上的基为 \(\begin{bmatrix} 0.8 \\ 0.6 \end{bmatrix}\), 零空间方向上的基 \(\begin{bmatrix} -0.6 \\ 0.8 \end{bmatrix}\)
列空间方向 : \(u_1 = 1/\sqrt{5}\begin{bmatrix} 1 \\ 2 \end{bmatrix}\), 左零空间方向 : \(1/\sqrt{5}\begin{bmatrix} 2 \\ -1 \end{bmatrix}\)
然后 \(SVD\) 就是将行空间与零空间上的基转换为列空间与左零空间上的基
所以就可以得到矩阵 \(U\) :
\[ U = \frac{1}{\sqrt{5}}\begin{bmatrix} 1& 2 \\ 2 & -1 \end{bmatrix} \]
类似的, 我们可以得到:
\[ V^{\mathrm{T}} = \begin{bmatrix} 0.8& 0.6 \\ 0.6 & -0.8 \end{bmatrix} \]
和之前利用 \(A^{\mathrm{T}}A\) 的特征值来求得对角矩阵 \(\Sigma\), 最后得到
\[ A = \frac{1}{\sqrt{5}}\begin{bmatrix} 1& 2 \\ 2 & -1 \end{bmatrix} \begin{bmatrix} \sqrt{125}& 0 \\ 0 & 0 \end{bmatrix} \begin{bmatrix} 0.8& 0.6 \\ 0.6 & -0.8 \end{bmatrix} \]