简单介绍:为了使降维后尽可能的保存更多的数据,应使降维后的数据与初始数据的"距离"越小越好,故有下图的推导式
先修知识:线性代数及拉格朗日乘子法
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
图片来源于 袁博老师 的 数据挖掘:理论与算法