2020-10-19 21:18:53

This commit is contained in:
wizardforcel
2020-10-19 21:18:53 +08:00
parent a1aea5f19a
commit 003a199a02
226 changed files with 165 additions and 165 deletions

View File

@@ -1,7 +1,7 @@
# 第14章 利用SVD简化数据
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>
![利用SVD简化数据首页](http://data.apachecn.org/img/AiLearning/ml/14.SVD/svd_headPage.jpg "利用SVD简化数据首页")
![利用SVD简化数据首页](img/svd_headPage.jpg "利用SVD简化数据首页")
## SVD 概述
@@ -17,14 +17,14 @@
隐性语义索引: 矩阵 = 文档 + 词语
* 是最早的 SVD 应用之一,我们称利用 SVD 的方法为隐性语义索引LSI或隐性语义分析LSA
![LSA举例](http://data.apachecn.org/img/AiLearning/ml/14.SVD/使用SVD简化数据-LSI举例.png)
![LSA举例](img/使用SVD简化数据-LSI举例.png)
> 推荐系统
1. 利用 SVD 从数据中构建一个主题空间。
2. 再在该空间下计算其相似度。(从高维-低维空间的转化在低维空间来计算相似度SVD 提升了推荐系统的效率。)
![主题空间案例1](http://data.apachecn.org/img/AiLearning/ml/14.SVD/SVD_推荐系统_主题空间案例1.jpg)
![主题空间案例1](img/SVD_推荐系统_主题空间案例1.jpg)
* 上图右边标注的为一组共同特征,表示美式 BBQ 空间;另一组在上图右边未标注的为日式食品 空间。
@@ -32,7 +32,7 @@
例如: `32*32=1024 => 32*2+2*1+32*2=130`(2*1表示去掉了除对角线的0), 几乎获得了10倍的压缩比。
![SVD公式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/使用SVD简化数据-SVD公式.jpg)
![SVD公式](img/使用SVD简化数据-SVD公式.jpg)
## SVD 原理
@@ -54,11 +54,11 @@
$$Data_{m \ast n} = U_{m \ast k} \sum_{k \ast k} V_{k \ast n}$$
![SVD公式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/使用SVD简化数据-SVD公式.jpg)
![SVD公式](img/使用SVD简化数据-SVD公式.jpg)
具体的案例: (大家可以试着推导一下: https://wenku.baidu.com/view/b7641217866fb84ae45c8d17.html
![SVD公式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/SVD公式的测试案例.jpg)
![SVD公式](img/SVD公式的测试案例.jpg)
* 上述分解中会构建出一个矩阵 $$\sum$$ 该矩阵只有对角元素其他元素均为0(近似于0)。另一个惯例就是,$$\sum$$ 的对角元素是从大到小排列的。这些对角元素称为奇异值。
* 奇异值与特征值(PCA 数据中重要特征)是有关系的。这里的奇异值就是矩阵 $$Data \ast Data^T$$ 特征值的平方根。
@@ -97,12 +97,12 @@ $$Data_{m \ast n} = U_{m \ast k} \sum_{k \ast k} V_{k \ast n}$$
* 基于物品的相似度: 计算物品之间的距离。【耗时会随物品数量的增加而增加】
* 由于物品A和物品C 相似度(相关度)很高所以给买A的人推荐C。
![SVD公式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/使用SVD简化数据-基于物品相似度.png)
![SVD公式](img/使用SVD简化数据-基于物品相似度.png)
* 基于用户的相似度: 计算用户之间的距离。【耗时会随用户数量的增加而增加】
* 由于用户A和用户C 相似度(相关度)很高所以A和C是兴趣相投的人对于C买的物品就会推荐给A。
![SVD公式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/使用SVD简化数据-基于用户相似度.png)
![SVD公式](img/使用SVD简化数据-基于用户相似度.png)
> 相似度计算
@@ -146,7 +146,7 @@ $$Data_{m \ast n} = U_{m \ast k} \sum_{k \ast k} V_{k \ast n}$$
> 收集 并 准备数据
![SVD 矩阵](http://data.apachecn.org/img/AiLearning/ml/14.SVD/项目数据导入.jpg)
![SVD 矩阵](img/项目数据导入.jpg)
```python
def loadExData3():
@@ -177,9 +177,9 @@ recommend() 会调用 基于物品相似度 或者是 基于SVD得到推荐
* 1.基于物品相似度
![基于物品相似度](http://data.apachecn.org/img/AiLearning/ml/14.SVD/基于物品相似度.jpg)
![基于物品相似度](img/基于物品相似度.jpg)
![欧式距离的计算方式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/欧式距离的计算方式.jpg)
![欧式距离的计算方式](img/欧式距离的计算方式.jpg)
```python
# 基于物品相似度的推荐引擎
@@ -229,7 +229,7 @@ def standEst(dataMat, user, simMeas, item):
* 2.基于SVD(参考地址: http://www.codeweblog.com/svd-%E7%AC%94%E8%AE%B0/)
![基于SVD.png](http://data.apachecn.org/img/AiLearning/ml/14.SVD/基于SVD.png)
![基于SVD.png](img/基于SVD.png)
```python
# 基于SVD的评分估计