diff --git a/docs/14.利用SVD简化数据.md b/docs/14.利用SVD简化数据.md index 4f8f81cf..0f769b5a 100644 --- a/docs/14.利用SVD简化数据.md +++ b/docs/14.利用SVD简化数据.md @@ -21,14 +21,14 @@ > 推荐引擎 1. 利用SVD从数据中构建一个主题空间。 -2. 再在该空间下计算其相似度。 +2. 再在该空间下计算其相似度。(从高维-低维空间的转化,在低维空间来计算相似度,SVD提升了推荐引擎的效率。) * ![主题空间案例1](/images/14.SVD/SVD_推荐系统_主题空间案例1.jpg) * 上图右边标注的为一组共同特征,表示美式BBQ 空间;另一组在上图右边未标注的为日式食品 空间。 > 图像压缩 - +例如:`32*32=1024 => 32*2+2*1+32*2=130`(2*1表示去掉了除对角线的0), 几乎获得了10倍的压缩比。 ## SVD矩阵分解 @@ -98,12 +98,20 @@ 3. 对这些物品的评分从高到低进行排序,返回前N个物品。 * 现在我们来观测代码实现。 -## 利用SVD提升推荐引擎的性能 +> 补充:基于内容(content-based)的推荐 -> 利用SVD提高推荐效果 -* 将矩阵降维 +1. 通过各种标签来标记菜肴 +2. 将这些属性作为相似度计算所需要的数据 +3. 这就是:基于内容的推荐。 > 构建推荐引擎面临的挑战 + +* 问题 * 1)在大规模的数据集上,SVD分解会降低程序的速度 * 2)存在其他很多规模扩展性的挑战性问题,比如矩阵的表示方法和计算相似度得分消耗资源。 -* 3)如何在缺乏数据时给出好的推荐(冷启动问题,解决方案就是将推荐看成是搜索问题) +* 3)如何在缺乏数据时给出好的推荐-称为冷启动【简单说:用户不会喜欢一个无效的物品,而用户不喜欢的物品又无效。】 + +* 建议 +* 1)在大型系统中,SVD分解(可以在程序调入时运行一次)每天运行一次或者其频率更低,并且还要离线运行。 +* 2)在实际中,另一个普遍的做法就是离线计算并保存相似度得分。(物品相似度可能被用户重复的调用) +* 3)冷启动问题,解决方案就是将推荐看成是搜索问题,通过各种标签/属性特征进行`基于内容的推荐`。