PCA主成分分析

主成分分析

PCA:principal component analysis
主成分分析是最常用的一种降维分析
目的:降低数据的复杂性,找到最有用的特征
降维:

  • PCA
  • FA 因子分析 factor analysis
  • ICA 独立成分分析 independent component analysis

PCA概述:
将数据从原来的坐标系转换到新的坐标系,新坐标的选择和数据本身相关。第一个新坐标轴是原数据中方差最大的方向,第二个坐标选择和第一个坐标正交且具有最大方差的方向。

数据最大方差方向

方差最大,就是数据差异性最大
计算协方差矩阵&特征值分析

特征值分析

\[A\nu=\lambda \nu\]
特征值\(\lambda\)和特征向量\(\nu\)
可以使用Numpy中linalg模块的eig()

numpy.linalg.eig(a)
# Compute the eigenvalues and right eigenvectors of a square array.

from numpy import linalg as LA
w, v = LA.eig(np.diag((1, 2, 3)))
w; v
"""
array([ 1.,  2.,  3.])
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
"""

使用numpy实现PCA

"""
created dec,6 2018
@author  dengshuo
implement the pca with numpy
"""

# import packages
from numpy import *

# load the data
def loadDataSet(filename):
    fr=open(filename)
    lineStr=[line.strip().split('\t') for line in fr.readlines()]
    dataArr=[list(map(float,line)) for line in lineStr] 
    # 一般涉及到 map函数都要加上一个 list来实现
    return mat(dataArr)

def PCA(datamat,topNFeat=9999999):
    meanVal=mean(datamat,axis=0)
    # 数据全部减去平均值
    mean_reduce=datamat-meanval
    # 使用协方差矩阵
    cov_mat=cov(mean_reduce,rowvar=0)   # 参考 dash cov的手册
    eigVal,eigVector=linalg.eig(mat(cov_mat))
    # 将特征值进行排序,升序排序
    # 注意这个返回的 是其在原数组中下标
    eigValInOrder=argsort(eigVal)
    eigValInOrder=eigValInOrder[:-(topNFeat+1):-1]
    redEigVector=eigVector[:,eigValInOrder]
    # 将数据转换到原空间
    lowDataMat=mean_reduce*redEigVector
    reconMat=(lowDataMat*redEigVector.T)+meanVal
    return lowDataMat,reconMat

if __name__ == '__main__':
    t=loadDataSet('testSet.txt')
    print("{}".format(t))
全部评论

相关推荐

牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务