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()

     

  • 相关阅读:
    hive与hbase整合
    待重写
    hive DML
    【知识强化】第六章 总线 6.1 总线概述
    【知识强化】第五章 中央处理器 5.1 CPU的功能和基本结构
    【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念
    【知识强化】第四章 指令系统 4.2 指令寻址方式
    【知识强化】第四章 指令系统 4.1 指令格式
    【知识强化】第三章 存储系统 3.6 高速缓冲存储器
    【知识强化】第三章 存储系统 3.5 双口RAM和多模块存储器
  • 原文地址:https://www.cnblogs.com/nishida-rin/p/12270848.html
Copyright © 2011-2022 走看看