PCA数学推导及简单代码

简单介绍:为了使降维后尽可能的保存更多的数据,应使降维后的数据与初始数据的"距离"越小越好,故有下图的推导式

先修知识:线性代数及拉格朗日乘子法

PCA后的效果:

python实现:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

cov = np.array([[1,0.8],[0.8,1]]);   #协方差
mu = np.array([0,0]);    #均值
X = np.random.multivariate_normal(mu,cov,10000);  
plt.scatter(X[:,0],X[:,1],s=5)  #画出初始的图

#PCA(只做投影)
D,V = np.linalg.eig(cov)  #特征向量V 特征值D
index = np.argsort(-D)  #按特征值从大到小排序
SelectVec = np.matrix(V.T[index[:1]])
newX = X * SelectVec.T
group = np.linspace(-6,6,50)
plt.hist(newX,group)

references:

http://www.cs.princeton.edu/picasso/mats/PCA-Tutorial-Intuition_jp.pdf

https://www.bilibili.com/video/av23323921/?p=14

图片来源于 袁博老师 的 数据挖掘:理论与算法

发布了4 篇原创文章 · 获赞 0 · 访问量 810

猜你喜欢

转载自blog.csdn.net/qq_36234688/article/details/84675562