python代码讲解-PCA主成分分析 原理讲解 python代码实现

1. 用途:

通俗来说: 考察一个人的智力情况,就直接看数学成绩就行(存在:数学、语文、英语成绩) 。就是找出一个最主要的特征,然后进行分析。

数据压缩 (Data Compression) ,将高维数据变为低维数据。

可视化数据 (3D->2D等)

2. 2D-->1D,nD-->kD

如下图所示,所有数据点可以投影到一条直线,是投影距离的平方和(投影误差)最小

1408690-20191111084359094-731325533.png

注意数据需要归一化处理

思路是找1个向量u,所有数据投影到上面使投影距离最小

那么nD-->kD就是找k个向量687474703a2f2f6c617465782e636f6465636f67732e636f6d2f6769662e6c617465783f253234253234253742752535452537422532383125323925374425374425324325374275253545253742253238322532392537442537442532302535436c646f7473253230253742752535452537422532386b253239253744253744253234253234,所有数据投影到上面使投影误差最小

eg:3D-->2D,2个向量687474703a2f2f6c617465782e636f6465636f67732e636f6d2f6769662e6c617465783f25323425323425374275253545253742253238312532392537442537442532432537427525354525374225323832253239253744253744253234253234就代表一个平面了,所有点投影到这个平面的投影误差最小即可

3. 降维原理(数学推导)

1408690-20191111084555809-1026823566.png

1408690-20191111084736575-1253667866.png

1408690-20191111084759773-680101979.png

1408690-20191111084857636-885873231.png

1408690-20191111090142100-304956027.png

# 归一化数据

def featureNormalize(X):

'''(每一个数据-当前列的均值)/当前列的标准差'''

n = X.shape[1]

mu = np.zeros((1,n));

sigma = np.zeros((1,n))

mu = np.mean(X,axis=0)

sigma = np.std(X,axis=0)

for i in range(n):

X[:,i] = (X[:,i]-mu[i])/sigma[i]

return X,mu,sigma

1408690-20191111090238723-1553847053.png

Sigma = np.dot(np.transpose(X_norm),X_norm)/m # 求Sigma

(3)求?的特征值和特征向量。

eigVals,eigVects = np.linalg.eig(np.mat(Sigma))

1408690-20191111090359739-1533294713.png

>>> x = np.array([3, 1, 2])

>>> np.argsort(x)

array([1, 2, 0]) # index,1 = 1; index,2 = 2; index,0 = 3

>>> y = np.argsort(x)

>>> y[::-1]

array([0, 2, 1])

>>> y[:-3:-1]

array([0, 2]) # 取出 -1, -2

>>> y[:-6:-1]

array([0, 2, 1])

eigValInd = argsort(eigVals)

# print 'eigValInd1=', eigValInd

# -1表示倒序,返回topN的特征值[-1 到 -(topNfeat+1) 但是不包括-(topNfeat+1)本身的倒叙]

eigValInd = eigValInd[:-(topNfeat+1):-1]

# print 'eigValInd2=', eigValInd

# 重组 eigVects 最大到最小

redEigVects = eigVects[:, eigValInd]

(5)求降维后的数值

lowDDataMat = meanRemoved * redEigVects

1408690-20191111141751747-693802543.png

1408690-20191111141824336-913936269.png

1408690-20191111141841473-1549929015.png

1408690-20191111090740036-36070764.png

1408690-20191111090650785-1763492919.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值