zoukankan      html  css  js  c++  java
  • 1.4:降维

    PCA

    主成分分析(Principal Component Analysis,PCA)是最常用的一种降维方法,通常用于高维数据集的探索与可视化,还可以用作数据压缩预处理等。

    目标 

    PCA可以把具有相关性的高维变量合成为线性无关低维变量,称为主成分。主成分能够尽可能保留原始数据的信息。

    相关术语

    • 方差
    • 协方差
    • 协方差矩阵
    • 特征向量和特征值

     原理

    矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。
    推导过程详见周志华《机器学习》。

    sklearn.decomposition.PCA

    主要参数

    • n_components:指定主成分的个数,即降维后数据的维度
    • svd_solver :设置特征值分解的方法,默认为‘auto’,其他可选有‘full’, ‘arpack’, ‘randomized’。(可参考官网API,此处不详述)

    应用:PCA实现高维数据可视化

    目标

    已知鸢尾花数据是4维的,共三类样本。使用PCA实现对鸢尾花数据进行降维,实现在二维平面上的可视化。

     实例程序编写

     

     

     

     1 import matplotlib.pyplot as plt
     2 from sklearn.decomposition import PCA
     3 from sklearn.datasets import load_iris
     4  
     5 data = load_iris()
     6 y = data.target
     7 X = data.data
     8 pca = PCA(n_components=2)
     9 reduced_X = pca.fit_transform(X)
    10  
    11 red_x, red_y = [], []
    12 blue_x, blue_y = [], []
    13 green_x, green_y = [], []
    14  
    15 for i in range(len(reduced_X)):
    16     if y[i] == 0:
    17         red_x.append(reduced_X[i][0])
    18         red_y.append(reduced_X[i][1])
    19     elif y[i] == 1:
    20         blue_x.append(reduced_X[i][0])
    21         blue_y.append(reduced_X[i][1])
    22     else:
    23         green_x.append(reduced_X[i][0])
    24         green_y.append(reduced_X[i][1])
    25  
    26 plt.scatter(red_x, red_y, c='r', marker='x')
    27 plt.scatter(blue_x, blue_y, c='b', marker='D')
    28 plt.scatter(green_x, green_y, c='g', marker='.')
    29 plt.show()

    NMF

    非负矩阵分解(Non-negative Matrix Factorization ,NMF)是在矩阵中所有元素均为非负数约束条件之下的矩阵分解方法。NMF能够广泛应用于图像分析文本挖掘语音处理等领域。
    基本思想:给定一个非负矩阵V,NMF能够找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和H的乘积近似等于矩阵V中的值。 

     

     目标

    第一种:最小化W矩阵H矩阵的乘积和原始矩阵之间的差别,目标函数如下: 

     本公式基于欧式距离

    第二种:基于KL散度的优化目标,损失函数如下:

     

     W和H的求法,严格来说,是它们的迭代算法。本课程不作详述,具体参考链接:

    sklearn.decomposition.NMF

    主要参数有:
    • n_components:用于指定分解后矩阵的单个维度k;
    • init:W矩阵和H矩阵的初始化方式,默认为‘nndsvdar’。其它参数参考官网API进行学习。

     应用:NMF人脸数据特征提取

    目标

    已知Olivetti人脸数据共400个,每个数据是64*64大小。由于NMF分解得到的W矩阵相当于从原始矩阵中提取的特征,那么就可以使用NMF对400个人脸数据进行特征提取

     

     实例程序编写

     

     

     

     1 from numpy.random import RandomState
     2 import matplotlib.pyplot as plt
     3 from sklearn.datasets import fetch_olivetti_faces
     4 from sklearn import decomposition
     5  
     6  
     7 n_row, n_col = 2, 3
     8 n_components = n_row * n_col
     9 image_shape = (64, 64)
    10  
    11  
    12 ###############################################################################
    13 # Load faces data
    14 dataset = fetch_olivetti_faces(shuffle=True, random_state=RandomState(0))
    15 faces = dataset.data
    16  
    17 ###############################################################################
    18 def plot_gallery(title, images, n_col=n_col, n_row=n_row):
    19     plt.figure(figsize=(2. * n_col, 2.26 * n_row)) 
    20     plt.suptitle(title, size=16)
    21  
    22     for i, comp in enumerate(images):
    23         plt.subplot(n_row, n_col, i + 1)
    24         vmax = max(comp.max(), -comp.min())
    25  
    26         plt.imshow(comp.reshape(image_shape), cmap=plt.cm.gray,
    27                    interpolation='nearest', vmin=-vmax, vmax=vmax)
    28         plt.xticks(())
    29         plt.yticks(())
    30     plt.subplots_adjust(0.01, 0.05, 0.99, 0.94, 0.04, 0.)
    31  
    32      
    33 plot_gallery("First centered Olivetti faces", faces[:n_components])
    34 ###############################################################################
    35  
    36 estimators = [
    37     ('Eigenfaces - PCA using randomized SVD',
    38          decomposition.PCA(n_components=6,whiten=True)),
    39  
    40     ('Non-negative components - NMF',
    41          decomposition.NMF(n_components=6, init='nndsvda', tol=5e-3))
    42 ]
    43  
    44 ###############################################################################
    45  
    46 for name, estimator in estimators:
    47     print("Extracting the top %d %s..." % (n_components, name))
    48     print(faces.shape)
    49     estimator.fit(faces)
    50     components_ = estimator.components_
    51     plot_gallery(name, components_[:n_components])
    52  
    53 plt.show()

     

  • 相关阅读:
    Richardson成熟度模型:关于REST的不同风格
    领域驱动设计
    dubbo初探
    pom使用异常问题
    [转]解决BootStrap validator验证的图标错位问题
    万恶的360浏览器
    利用Barcode4j实现输出ean13条形码到文件、流的工具类
    使用hibernate中的hql进行分页设置setMaxResults(int a)出错,索引1越界,hql执行不了等等问题
    Mysql 5.6以上版本zip安装方法
    Hibernate5生成的映射文件导致findByExample无法正确查询到结果
  • 原文地址:https://www.cnblogs.com/nishida-rin/p/12270848.html
Copyright © 2011-2022 走看看