机器学习实战---读书笔记:第14章 利用SVD简化数据

#!/usr/bin/env python
# encoding: utf-8

from numpy import *

'''
<<机器学习实战>> --读书笔记 第14章 利用SVD简化数据

关键:
1 奇异值分解
SVD, Singular Value Decomposition
含义: 是提取信息的方法
应用: 隐性予以索引,推荐引擎,图像压缩
优点:简化数据,去除噪声,提高算法的结果
缺点: 数据的转换可能难以理解
适用数据类型: 数值型数据
原理: 利用SVD实现,能够用小得多的数据集来表示原始数据集,去除了噪声和荣誉信息。
      可以把SVD看成是从有噪声的数据中抽取相关特征。

2 隐性语义索引
隐性语义索引: Latent Semantic Indexing, LSI
隐性语义分析: Latent Semantic Analysis, LSA
LSI中: 矩阵是由文档和词语组成的,矩阵上应用SVD时,会构建出多个奇异值,这些奇异值代表了文档中的主题或概念。

3 推荐系统
SVD的另一个应用就是推荐系统。
原理:先利用SVD从数据中构建出一个主题空间,然后再该空间下计算其相似度。
SVD是矩阵分解的一种类型。

4 矩阵分解
矩阵分解可以将原是矩阵表示成两个或多个矩阵的乘积。
最常见的矩阵分解技术就是SVD。SVD将原始的数据集矩阵Data分解成
三个矩阵U,Sigma, V的转置,
如果原始矩阵Data是m行n列,那么U是m行m列,Sigma是m行n列,V的转置是n行n列。
上述分解中会构建出一个矩阵Sigma,该矩阵只有对角元素,其他元素均为0.
Sigma的对焦元素是从大到小排列的。这些对角元素称为奇异值(Singular Value),
它对应原始数据集矩阵Data的奇异值。
PCA主成分分析得到的是矩阵的特征值。

奇异值是矩阵Data * Data的转置特指值的平方根。
在某个奇异值的的数目(r个)之后,其他的奇异值都设置为0.
这意味着数据集中仅有r个重要特征,而其余特征则都是噪声或冗余特征。

5 利用Python实现SVD
Numpy中有一个称为linalg的线性代数工具
'''
def getSVDResult(data):
    U, Sigma, VT = linalg.svd(data)
    return U, Sigma, VT


def loadDataSet():
    data = [[1, 1], [7, 7] ]
    return data

def process():
    data = loadDataSet()
    # 注意: Sigma是一个矩阵,表示的是对角元素
    U, Sigma, VT = getSVDResult(data)
    print "U:\n {U}\nSigma:\n {Sigma}\nVT:\n {VT}".format(
            U=U, Sigma=Sigma, VT=VT)


if __name__ == "__main__":
    process()

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/87305291
今日推荐