专栏首页绿巨人专栏机器学习实战 - 读书笔记(14) - 利用SVD简化数据

机器学习实战 - 读书笔记(14) - 利用SVD简化数据

前言

最近在看Peter Harrington写的“机器学习实战”,这是我的学习心得,这次是第14章 - 利用SVD简化数据。 这里介绍,机器学习中的降维技术,可简化样品数据。

基本概念

  • 降维(dimensionality reduction)。 如果样本数据的特征维度很大,会使得难以分析和理解。我们可以通过降维技术减少维度。 降维技术并不是将影响少的特征去掉,而是将样本数据集转换成一个低维度的数据集。 降维技术的用途
  • 使得数据集更易使用;
  • 降低很多算法的计算开销;
  • 去除噪声;
  • 使得结果易懂。

问题:如何向用户推荐他喜欢的商品

推荐系统的应用场景

一个系统里有很多商品,也有用户信息,以及用户对商品的打分情况。例如:

表1

用户

商品1

商品2

商品3

商品4

商品5

...

商品d

user 1

0

0

2

5

3

...

0

user 2

0

0

3

4

2

...

0

user 3

0

0

2

5

4

...

0

user 4

5

4

0

0

0

...

0

user 5

3

5

0

0

0

...

0

...

...

...

...

...

...

...

...

user n

0

0

4

5

3

...

0

这些数据有以下特点:

  1. 商品很多
  2. 用户很多,一般情况下比商品多。
  3. 用户不会对所有商品打分,没有打分的记为0,打分的记为1~5。

解决问题的思路

如果要对一个用户U推荐一个U没有买过的商品:

对于当前用户U的每个没有买过的商品A:
    对于系统中每个商品B,并且U给B打过分:
        根据A和B的打分数据,获取一个降维数据集。*1
        在降维数据集上,计算A和B的相似度Similarity。*2
        Rating = U给B的打分
        TotalSimilarity += Similarity
        TotalRating += Similarity * Rating
    A.Rating = TotalRating / TotalSimilarity
按照A.Rating从大到小排序。
打分高的商品作为推荐商品。

注:比如电影,一般用户不会看已经看过的电影,所以"没有买过的商品"在这是有特殊的意义。 也可以将这个条件根据实际的情况换成其它过滤条件。

根据上面的思路,我们还需要解决2个关键问题:

  1. 如何降维。
  2. 如何计算两个矢量(也可以看成2个点)的相似度。

如何计算2个矢量的相似度(Similarity)

先解决简单的问题。相似度是一个0到1的值。可以选择下面的方法来计算。

方法1:计算欧氏距离相似度。

两个点离得越近,越相似。

求两个点的距离D
Similarity = 1 / (1 + D)

方法2:计算皮尔逊相关系数(Pearson correlation)的相似度。

统计方法中求两组数据的相关度,

这两个点的correlationValue
Similarity = correlationValue / 2 + 0.5

方法3:计算角度的相似度。

计算两个点的角度,求余弦值([-1, 1]), 角度越接近0,越相似。

求两个点的角度的余弦值cosineValue.
Similarity = cosineValue / 2 + 0.5

如何降维

方法1: 只看对商品A和商品B都有打分的数据。

对于商品A和商品B,可以看作为两列数据,我们在这两列中,找出两个数据都不为0的行。 比如:表1中商品1和商品2,只要看4,5两行数据就可以。

  • 这个方法的问题是
    • 每次计算都需要寻找相关数据。对性能的优化不够。

方法2: 奇异值分解(Singular Value Decomposition,SVD)

矩阵Data_{{m} \times {n}},假设m < n。 奇异性分解可以将一个矩阵Data_{{m} \times {n}}分解成3个矩阵U_{{m} \times {m}}, \Sigma_{{m} \times {n}}, V^T_{{n} \times {n}}U,V^T都是单式矩阵(unitary matrix),\Sigma是一个对角矩阵(rectangular diagonal matrix),也就是说只有在对角线上才有值。 比如: \begin{bmatrix} 15 & 0 & 0 \\ 0 & 11 & 0 \\ 0 & 0 & 0.2 \\ 0 & 0 & 0 \\ \end{bmatrix} 这里主要介绍\Sigma,我们只关心它的对角线上的数据。 首先这个对角线上的数据最多有m个(假设m < n)。 而且这个数组是按照从大到小的顺序排列的。 \Sigma的对角线上的数据被称为奇异数(Singular Values)。 奇异数的一个特点是可以用来计算一个降维的SmallData_{{m} \times {k} (k < m)}来代替原数据集Data_{{m} \times {n}}。 一个计算k的方法是:

\Sigma中找到前k的数据,使得其\textstyle \sum_{i=1}^k s_i^2 刚好大于 0.9 \times \textstyle \sum_{i=1}^m s_i^2

这时: SmallData_{{m} \times {k}} = Data^T U_{{m} \times {k}} \Sigma_{{k} \times {k}}^I \\ where \\ \qquad k < m \\ \qquad W^I : 矩阵W的逆矩阵

总结

  • 我们可以使用SmallData_{{m} \times {k}}作为降维后的数据集。
  • SVD降维技术的应用可以是离线的。(也就是说可以事先做好。)

将SVD降维技术应用到数据近似压缩上

求近似数据集: NewData_{{m} \times {n}} = U_{{m} \times {k}} \Sigma_{{k} \times {k}} V^T_{{k} \times {n}} \\ where \\ \qquad NewData_{{m} \times {n}} \approx Data_{{m} \times {n}} \\ \qquad k < m

由于NewData_{{m} \times {n}}是计算出来的, 所以可以只保存U_{{m} \times {k}}, \Sigma_{{k} \times {k}}的奇异值, V^T_{{k} \times {n}}做为压缩数据。

核心公式

  • 相似度计算 - 欧氏距离
from numpy import *
def distanceSimilarity(A, B):
    return 1.0 / (1.0 + linalg.norm(A - B))
  • 相似度计算 - 皮尔逊相关系数(Pearson correlation)
from numpy import *
def correlationSimilarity(A, B):
    if len(A) < 3 : return 1.0
    return 0.5 + 0.5 * corrcoef(A, B, rowvar = 0)[0][1]
  • 相似度计算 - 余弦相似度

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据

    绿巨人
  • 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)

    绿巨人
  • 读书笔记: 范畴论

    一个范畴是一个带标签的有向图,其节点为对象(object),带有标签的有向边为箭头(arrow or morphism)。

    绿巨人
  • 移动与云技术时代下的数据管理怎么搞

    一项简单的元数据标准化战略足以改善决策制定、数据治理以及数据安全性等众多令人头痛的难题。 ? 移动、云计算与大数据等新兴事物皆作出了美好的承诺,宣称将帮助企业在...

    静一
  • “Python太慢了、Golang糟透了":那些关于软件工程的”宗教“辩论

    “Python太慢了、Golang糟透了、MongoDB是最好的”:那些关于软件工程的”宗教“辩论

    IT大咖说
  • 大数据hadoop入门之hadoop家族详解

    大数据这个词也许几年前你听着还会觉得陌生,但我相信你现在听到hadoop这个词的时候你应该都会觉得“熟悉”!越来越发现身边从事hadoop开发或者是正在学习ha...

    用户3392176
  • 手把手教你从零搭建深度学习项目(可下载PDF版)

    昱良
  • 人人都可以做深度学习应用:入门篇

    导语 2016年,继虚拟现实(VR)之后,人工智能(AI)的概念全面进入大众的视野。谷歌,微软,IBM等科技巨头纷纷重点布局,AI 貌似将成为互联网的下一个风口...

    腾讯Bugly
  • 人人都可以做深度学习应用:入门篇

    一、人工智能和新科技革命 2017年围棋界发生了一件比较重要事,Master(Alphago)以60连胜横扫天下,击败各路世界冠军,人工智能以气势如虹的姿态出现...

    小时光
  • 重磅:如何不花钱就成为数据科学家?

    大数据文摘

扫码关注云+社区

领取腾讯云代金券