美文网首页
PCA实例及代码

PCA实例及代码

作者: morie_li | 来源:发表于2019-02-15 15:08 被阅读0次

在模型学习的过程中,训练集的维度较多会引起训练时间的增大,且得到的模型结构庞大,故需减少特征数量,但同时能够避免信息的丢失。将特征数量从几百上千降低到几十的过程就是数据降维。
主成分分析(Principal Component Analysis, PCA)是数据降维的一种,实现方法一般有两种:一种用特征值分解去实现,一种用奇异值分解去实现

特征值分解:
推导详情见http://blog.codinglabs.org/articles/pca-tutorial.html
算法步骤(设有m条n维数据):
1.将原始数据按列组成n行m列矩阵X
2.将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3.求出协方差矩阵C=1mXX𝖳
4.求出协方差矩阵的特征值及对应的特征向量
5.将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6.Y=PX即为降维到k维后的数据

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import loadmat

def normalize(data): 
        m, n = data.shape
        mean = np.mean(data, axis=0)
        std = np.std(data, axis=0)
        data = (data - mean)/std
        #归一化
        return data 
        
def PCA(data, k):
        m, n = data.shape
        data = normalize(data)
        Coef = data.T * data/m
        U, S, V = np.linalg.svd(Coef) 
        #奇异值分解
        UReduce = U[:, 0:k]
        #取前k维值
        Z = data * UReduce
        return Z

if __name__ == '__main__':
        data = np.mat([[1,2,3,4,5],[6,7,8,9,10]])
        data_pca = PCA(data, 1)
        print data, data_pca

应用实例

import numpy as np
import matplotlib.pyplot as plt

def normalize(data):
        m, n = data.shape
        mean = np.mean(data, axis=0)
        std = np.std(data, axis=0)
        data = (data - mean)/std
        return data

def PCA(data, k):
        m, n = data.shape
        data = normalize(data)
        Coef = data.T * data/m
        U, S, V = np.linalg.svd(Coef)
        UReduce = U[:, 0:k]
        Z = data * UReduce
        return XNorm, Z, U, UReduce, S, V

#数据恢复
def recover(UReduce, Z):
       return Z * UReduce.T

import pca
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import loadmat

#处理图片
def display(images, width, height):
        m, n = images.shape
        rows = int(np.floor(np.sqrt(m)))
        cols = int(np.ceil(m / rows))
        #图像拼接
        dstImage = images.copy()
        dstImage = np.zeros((rows * height, cols * width))
        for i in range(rows):
            for j in range(cols):
                idx = cols * i + j
                image = images[idx].reshape(height, width)
                dstImage[i * height:i * height + height,
                        j * width: j * width + width] = image
        plt.imshow(dstImage.T, cmap='gray')
        plt.axis('off')
        plt.show()

if __name__ == '__main__':
        data = loadmat('ex7faces.mat')
        X = np.mat(data['X'],dtype=np.float32)
        m, n = X.shape
        #展示原图
        display(X[0:100, :], 32, 32)
        XNorm, Z, U, UReduce, S, V = PCA(X, k=100)
        XRec = recover(UReduce, Z)
        #显示修复后的图,可以看出,PCA 损失了一部分细节
        display(XRec[0:100, :], 32, 32)

相关文章

  • PCA实例及代码

    在模型学习的过程中,训练集的维度较多会引起训练时间的增大,且得到的模型结构庞大,故需减少特征数量,但同时能够避免信...

  • pca算法介绍及简单实例

    1.pca算法 主成分分析(Principal components analysis,PCA)是一种分析、简化数...

  • 主成分分析(PCA)代码实例

    姓名:张国帅 学号:19021110506 【嵌牛导读】 本文介绍主成分分析(PCA)代码实例 【嵌牛鼻子】主成分...

  • PCA

    PCA PCA KPCA 代码详见:https://github.com/AresAnt/ML-DL PCA: P...

  • 机器学习相关有用的代码及好玩的实例代码。

  • kmeans实例及代码

    聚类和决策树一样,属于无监督学习。也就是说数据样本只有特征x,没有给定y。聚类的目的是找到样本特征潜在的类别,将同...

  • PCA与LDA做数据降维

    1 PCA 主成分分析 理论 PCA(Principal Component Analysis) 具体使用代码 2...

  • iOS 实例方法和类方法中的self与self.class有什么

    问题:下面代码中self及self.class区别在哪? 实例方法实例方法.png self:指的是当前实例对象 ...

  • 【数据可视化】在 React 及 Webpack 中使用 Hig

    实例代码及运行过程 请通过这个链接下载实例代码包:https://pan.baidu.com/s/1o7IZfiM...

  • Python-数据类型及其操作方法

    数字类型 代码实例: 字符串类型 代码实例: 列表 代码实例: 元组 代码实例 字典: 代码实例 集合 代码实例:

网友评论

      本文标题:PCA实例及代码

      本文链接:https://www.haomeiwen.com/subject/eapkxqtx.html