机器学习实战学习笔记(十三)利用SVD简化数据

PS:该系列数据都可以在图灵社区(点击此链接)中随书下载中下载(如下)
在这里插入图片描述

1 SVD的应用

                                                 奇异值分解
优点:简化数据,去除噪声,提高算法的结果。
缺点:数据的转换可能难以理解。
适用数据类型:数值型数据。

1.1 隐形语义索引

  最早的SVD应用之一就是信息检索。我们称利用SVD的方法为隐性语义索引(Latent Semantic Index, LSI)隐性语义分析(Latent Semantic Analysis,LSA)

1.2 推荐系统

  SVD的另一个应用是推荐系统。简单版本的推荐系统能够计算项或者人之间的相似度。更先进的方法则先利用SVD从数据中构建一个主题空间,然后再在该空间下计算其相似度。考虑下图给出的矩阵,它是由餐馆的菜和品菜师对这些菜的意见构成的。品菜师可以采用1到5之间的任意一个整数来对菜评级。如果品菜师没有尝过某道菜,则评级为0。
在这里插入图片描述
  对上述矩阵进行SVD处理,会得到两个奇异值。我们可以把奇异值想象成一个新空间。与上图中给出矩阵的五维或者七维不同,我们最终的矩阵只有二维。这二维分别对应上右图给出的两个组,我们可以基于每个组的共同特征来命名这二维,比如我们得到美式BBQ和日式食品这二维。

2 矩阵分解

  SVD将原始的数据集矩阵Data分解成三个矩阵 U U U ∑ \sum V T V^T VT。如果原始矩阵Data是m行n列,那么 U U U ∑ \sum V T V^T VT就分别是m行m列、m行n列和n行n列。上述过程可以写成如下一行(下标为矩阵维数):
Data ⁡ m × n = U m × n ∑ m × n V n × n T \operatorname{Data}_{m \times n}=U_{m \times n} \sum_{m \times n} V_{n \times n}^{\mathrm{T}} Datam×n=Um×nm×nVn×nT
  上述分解中会构建出一个矩阵∑,该矩阵只有对角元素,其他元素均为0。另一个惯例就是,∑的对角元素是从大到小排列的。这些对角元素称为奇异值(Singular Value),它们对应了原始数据集矩阵Data的奇异值。奇异值就是矩阵 D a t a ∗ D a t a T Data * Data^T DataDataT特征值的平方根。
  在科学和工程中,一直存在这样一个普遍事实:在某个奇异值的数目(r个)之后,其他的奇异值都置为0。这就意味着数据集中仅有r个重要特征,而其余特征都是噪声或冗余特征。

3 利用Python实现SVD

  Numpy有一个称为linalg的线性代数工具箱:
在这里插入图片描述
  注意Sigma以行向量array([10., 0.])返回,而非矩阵形式,这是由于Sigma矩阵除了对角元素其他均为0,因此这种仅返回对角元素的方式能够节省空间。
  建立文件svdRec.py,编写如下代码并进行测试:

import numpy as np

def loadExData():
    return [[1, 1, 1, 0, 0],
            [2, 2, 2, 0, 0],
            [1, 1, 1, 0, 0],
            [5, 5, 5, 0, 0],
            [1, 1, 0, 2, 2],
            [
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值