机器学习(3.1)--PCA降维基本原理

PCA(Principal components analysis)也称主成分分析,是机器学习中降维的一种方法
为什么要降维
在真实的数据中有各种问题, PCA的思想是将n维特征映射到m维上(m
1、如多余的数据,商店的客流量与营业额,很明显这两组的数据相关度比较高
     ,简单的理解就是把上述客流量与营业额合并成一个维度
2、由于信道不理想的,怎么滤去传输过程中的噪音

   ,简单的理解就是减少特征数


本文将以一个2维数据来说明PCA的计算过程,PCA的具体步骤
1、求平均值(dataAvg)
2、求每个值与平均值的差(dataAdjust)
3、求协方差矩阵
4、求协方差矩阵的特征值与特征向量

5、将特征值从大到小排序,选择最大的M个,取的这M个特征向量。

同时另一个实验性的例子通过鸢尾花的特征作为数据,来查看降维后的效果
点击查看 机器学习(3.2)--PCA降维鸢尾花数据降维演示

# -*- coding:utf-8 -*-  
import numpy as np

#建立十个样本的二维数组
data=[[2.5,2.4]      ,[0.5,0.7]      ,[2.2,2.9]      ,[1.9,2.2]      ,[3.1,3.0]
      ,[2.3,2.7]      ,[2,1.6]      ,[1,1.1]      ,[1.5,1.6]      ,[1.1,0.9]]
data=np.array(data).astype(np.float)  

#1、求平均值(dataAvg)
dataAvg=np.average(data,axis=0)# x的均值是1.81,y的均值是1.91
#print(dataAvg) 

#2、求每个值与平均值的差(dataAdjust)
dataAdjust=data-dataAvg# X-avg(x)  与y-avg(y)的值
#print(dataAdjust) 

#3、求协方差矩阵
#计算任意两组数据协方差函数,
def covariance(getDataAdjust,index1,index2):
    x=getDataAdjust[:,index1:index1+1]
    y=getDataAdjust[:,index2:index2+1]
    n=x.shape[0]
    return (x*y).sum()/(n-1)

#计算协方差矩阵,
'''
在二维数据中这个矩阵就是
[[cov(x,x),cov(x,y)]
,[cov(y,x),cov(y,y)]]

同理在三维数据这个矩阵就是
[[cov(x,x),cov(x,y),cov(x,z)]
,[cov(y,x),cov(y,y),cov(y,z)
,[cov(z,x),cov(z,y),cov(z,z)
]]
'''
CovMatrix=[[covariance(dataAdjust,0,0),covariance(dataAdjust,0,1)]
           ,[covariance(dataAdjust,1,0),covariance(dataAdjust,1,1)]]
print('协方差矩阵为:')
print(CovMatrix)


#4、求协方差矩阵的特征值与特征向量,如果不知道什么是特征值与特征向量,可以查查线性代数
e1,e2 = np.linalg.eig(CovMatrix)
print('------------------------')
print('协方差矩阵的特征值:')
print(e1) #[0.0490834  1.28402771] ,这里的两个值,当要降到M维(本例只能降到1维),即取最大的值,这里是1.28402771
print('------------------------')
print('协方差矩阵的特征向量:')
print(e2)

#5、将特征值从大到小排序,选择最大的M个,取的这M个特征向量。这里只是取数,没有计算步骤
#[[-0.73517866 -0.6778734 ]     因数为上述特征值最大的取1.28402771,为第2个,所以,这里我们取每个元素数组的第2个,即e2[:,1:]
# [ 0.6778734  -0.73517866]]
#取出的值应该是[-0.6778734, -0.73517866]

#做矩阵乘法,将dataAdjust 乘以上述 e2[:,1:] 得出的结果即为降维后的值
finalDataX=np.matmul(dataAdjust,e2[:,1:])
print('------------------------')
print('降维后的数据:')
print(finalDataX)
本例使用二维数据,降维前,降维后都是数字,很多东西并不是直观,
可以参考,机器学习(3.2)--PCA降维鸢尾花数据降维演示

你可能感兴趣的:(python,机器学习,python,机器学习,PCA,降维)