|
7 | 7 |
|
8 | 8 | ``` |
9 | 9 | 奇异值分解(SVD, Singular Value Decomposition): |
10 | | - 提取信息的一种方法,可以把 SVD 看成是从噪声数据中抽取相关特征。从生物信息学到金融学,SVD 是提出信息的强大工具。 |
| 10 | + 提取信息的一种方法,可以把 SVD 看成是从噪声数据中抽取相关特征。从生物信息学到金融学,SVD 是提取信息的强大工具。 |
11 | 11 | ``` |
12 | 12 |
|
13 | 13 | ## SVD 场景 |
|
19 | 19 |
|
20 | 20 |  |
21 | 21 |
|
22 | | -> 推荐引擎 |
| 22 | +> 推荐系统 |
23 | 23 |
|
24 | 24 | 1. 利用 SVD 从数据中构建一个主题空间。 |
25 | | -2. 再在该空间下计算其相似度。(从高维-低维空间的转化,在低维空间来计算相似度,SVD提升了推荐引擎的效率。) |
| 25 | +2. 再在该空间下计算其相似度。(从高维-低维空间的转化,在低维空间来计算相似度,SVD 提升了推荐系统的效率。) |
26 | 26 |
|
27 | 27 |  |
28 | 28 |
|
|
32 | 32 |
|
33 | 33 | 例如:`32*32=1024 => 32*2+2*1+32*2=130`(2*1表示去掉了除对角线的0), 几乎获得了10倍的压缩比。 |
34 | 34 |
|
| 35 | + |
| 36 | + |
35 | 37 | ## SVD 原理 |
36 | 38 |
|
37 | 39 | ### SVD 工作原理 |
38 | 40 |
|
39 | 41 | > 矩阵分解 |
40 | 42 |
|
41 | 43 | * 矩阵分解是将数据矩阵分解为多个独立部分的过程。 |
42 | | -* 矩阵分解可以将原始矩阵表示成新的易于处理的形式,这种新形式时两个或多个矩阵的乘积。(类似代数中的因数分解) |
| 44 | +* 矩阵分解可以将原始矩阵表示成新的易于处理的形式,这种新形式是两个或多个矩阵的乘积。(类似代数中的因数分解) |
43 | 45 | * 举例:如何将12分解成两个数的乘积?(1,12)、(2,6)、(3,4)都是合理的答案。 |
44 | 46 |
|
45 | 47 | > SVD 是矩阵分解的一种类型,也是矩阵分解最常见的技术 |
46 | 48 |
|
47 | | -* SVD 将原始的数据集矩阵Data分解成三个矩阵U、∑、\\(V^T\\) |
| 49 | +* SVD 将原始的数据集矩阵 Data 分解成三个矩阵 U、∑、V |
48 | 50 | * 举例:如果原始矩阵 \\(Data_{m*n}\\) 是m行n列, |
49 | | - * \\(U_{m*m}\\) 表示m行m列 |
50 | | - * \\(∑_{m*n}\\) 表示m行n列 |
51 | | - * \\(V^T_{n*n}\\) 表示n行n列。 |
| 51 | + * \\(U_{m*n}\\) 表示m行n列 |
| 52 | + * \\(∑_{m*k}\\) 表示m行k列 |
| 53 | + * \\(V_{k*n}\\) 表示k行n列。 |
| 54 | + |
| 55 | +\\(Data_{m*n} = U_{m\*k} \* ∑_{k\*k} \* V_{k\*n}\\) |
| 56 | + |
| 57 | + |
| 58 | + |
| 59 | +具体的案例:(大家可以试着推导一下:https://wenku.baidu.com/view/b7641217866fb84ae45c8d17.html ) |
52 | 60 |
|
53 | | - |
| 61 | + |
54 | 62 |
|
55 | | -* 上述分解中会构建出一个矩阵∑,该矩阵只有对角元素,其他元素均为0(近似于0)。另一个惯例就是,∑的对角元素是从大到小排列的。这些对角元素称为奇异值,它们对应原始矩阵 Data 的奇异值。 |
56 | | -* 奇异值与特征值(PCA 数据中重要特征)是有关系的。这里的奇异值就是矩阵 \\(Data * Date^T\\) 特征值的平方根。 |
| 63 | +* 上述分解中会构建出一个矩阵∑,该矩阵只有对角元素,其他元素均为0(近似于0)。另一个惯例就是,∑的对角元素是从大到小排列的。这些对角元素称为奇异值。 |
| 64 | +* 奇异值与特征值(PCA 数据中重要特征)是有关系的。这里的奇异值就是矩阵 \\(Data * Data^T\\) 特征值的平方根。 |
57 | 65 | * 普遍的事实:在某个奇异值的数目(r 个=>奇异值的平方和累加到总值的90%以上)之后,其他的奇异值都置为0(近似于0)。这意味着数据集中仅有 r 个重要特征,而其余特征则都是噪声或冗余特征。 |
58 | 66 |
|
59 | 67 | ### SVD 算法特点 |
60 | 68 |
|
61 | 69 | ``` |
62 | | -优点:简化数据,去除噪声,提高算法的结果 |
| 70 | +优点:简化数据,去除噪声,优化算法的结果 |
63 | 71 | 缺点:数据的转换可能难以理解 |
64 | 72 | 使用的数据类型:数值型数据 |
65 | 73 | ``` |
66 | 74 |
|
67 | | -## 推荐引擎 |
| 75 | +## 推荐系统 |
68 | 76 |
|
69 | 77 | ### 推荐系统 概述 |
70 | 78 |
|
|
87 | 95 | > 基于物品的相似度和基于用户的相似度:物品比较少则选择物品相似度,用户比较少则选择用户相似度。【矩阵还是小一点好计算】 |
88 | 96 |
|
89 | 97 | * 基于物品的相似度:计算物品之间的距离。【耗时会随物品数量的增加而增加】 |
| 98 | +* 由于物品A和物品C 相似度(相关度)很高,所以给买A的人推荐C。 |
90 | 99 |
|
91 | 100 |  |
92 | 101 |
|
93 | 102 | * 基于用户的相似度:计算用户之间的距离。【耗时会随用户数量的增加而增加】 |
| 103 | +* 由于用户A和用户C 相似度(相关度)很高,所以A和C是兴趣相投的人,对于C买的物品就会推荐给A。 |
94 | 104 |
|
95 | 105 |  |
96 | 106 |
|
|
111 | 121 | * `相似度= 0.5 + 0.5*( float(inA.T*inB) / la.norm(inA)*la.norm(inB))` |
112 | 122 | * 如果夹角为90度,则相似度为0;如果两个向量的方向相同,则相似度为1.0。 |
113 | 123 |
|
114 | | -> 推荐引擎的评价 |
| 124 | +> 推荐系统的评价 |
115 | 125 |
|
116 | | -* 采用交叉测试的方法。 |
| 126 | +* 采用交叉测试的方法。【拆分数据为训练集和测试集】 |
117 | 127 | * 推荐引擎评价的指标: 最小均方根误差(Root mean squared error, RMSE),也称标准误差(Standard error),就是计算均方误差的平均值然后取其平方根。 |
118 | 128 | * 如果RMSE=1, 表示相差1个星级;如果RMSE=2.5, 表示相差2.5个星级。 |
119 | 129 |
|
|
126 | 136 | 3. 对这些物品的评分从高到低进行排序,返回前N个物品。 |
127 | 137 |
|
128 | 138 |
|
129 | | -### 项目案例: 餐馆菜肴推荐引擎 |
| 139 | +### 项目案例: 餐馆菜肴推荐系统 |
130 | 140 |
|
131 | 141 | #### 项目概述 |
132 | 142 |
|
|
0 commit comments