# 💡 Summary
## 从线代角度通俗讲SVD
### 最核心的思想
**任何矩阵都可以看成是一个"线性变换"**,SVD就是把这个变换拆解成三步:
```Java
原始变换 = 旋转1 × 拉伸 × 旋转2
A = U × Σ × V^T
```
### 几何直观理解
假设有个矩阵A,它把向量x变成向量y:
```Java
A
x ----→ y
```
**SVD说**:这个变换A可以分解成:
1. **V^T(旋转1)**:先把坐标系旋转到"最佳角度"
2. **Σ(拉伸)**:在这个角度下,只需要沿着坐标轴拉伸/压缩
3. **U(旋转2)**:再旋转到目标坐标系
```Java
V^T Σ U
x ------→ 旋转 ------→ 拉伸 ------→ y
```
### 为什么要这么分解?
**因为"拉伸"是最简单的变换!**
- 旋转 + 拉伸 + 旋转 = 任意复杂变换
- 拉伸只是每个维度乘个数,超简单
### 画个图理解
想象一个单位圆:
```Java
原始圆 --A变换--> 椭圆
用SVD分解:
圆 --V^T旋转--> 圆 --Σ拉伸--> 椭圆(轴对齐) --U旋转--> 椭圆(最终)
```
- **V的列**:输入空间的"最佳方向"(右奇异向量)
- **U的列**:输出空间的"最佳方向"(左奇异向量)
- **Σ的对角元素**:每个方向拉伸多少倍(奇异值)
### 关键性质
|性质|说明|
|---|---|
|**U和V都是正交矩阵**|保持长度和角度,只旋转不拉伸|
|**Σ是对角矩阵**|只有对角线有值,表示各方向的拉伸比例|
|**奇异值从大到小排列**|σ₁ ≥ σ₂ ≥ σ₃ ≥... ≥ 0|
### 降维的几何意义
如果某个奇异值很小(σₖ ≈ 0),说明:
- 这个方向几乎被"压扁"了
- 这个维度不重要
- **可以扔掉**,不影响整体效果
```Java
保留前k个最大的奇异值
= 保留最重要的k个"拉伸方向"
= 低秩近似
```
### 和特征值分解的关系
|特征值分解|SVD|
|---|---|
|只适用于方阵|适用于任意矩阵|
|A = QΛQ^(-1)|A = UΣV^T|
|有时不存在|永远存在|
|特征向量不一定正交|U和V一定正交|
### 推荐系统的线代解释
用户-电影评分矩阵A:
```Java
A[用户×电影] = U[用户×风格] × Σ[风格×风格] × V^T[风格×电影]
```
**线代含义**:
- 每个用户是"风格空间"中的一个点(U的行)
- 每部电影是"风格空间"中的一个点(V的行)
- 评分 = 用户向量和电影向量的内积(经过Σ加权)
**本质**:找到一个低维"风格空间",在这个空间里用户和电影的关系最清晰!
# 🧩 Cues
# 🪞Notes