主成分分析(PCA)
1.主成分分析法是降维的最常使用的算法。
2.在PCA中,要做的是找到一个方向向量(Vector direction),当把所有的数据都投射到该向量上时,希望投射距离均方差能尽可能地小。
3.方向向量是一个经过原点的向量,而投射误差是从特征向量向该方向向量作垂线的长度。
4.主成分分析最小化的是投射距离误差(Projected Error)。
主成分分析问题
1.PCA将n个特征降维到k个,可用来进行数据压缩。
(1).如果100维的向量最后可以用10维来表示,那么压缩率为90%。
(2).同样图像处理领域的KL变换使用PCA 做图像压缩。
(3).但PCA 要保证降维后,还要保证数据的特性损失最小。
2.PCA 技术的一大好处是对数据进行降维的处理。
(1).对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。
(2).同时最大程度的保持了原有数据的信息。
这里要注意线性回归的误差是预测值向x轴作垂线,主成分分析是预测值向模型作垂线
奇异值分解(SVD)
1.计算协方差矩阵A:
A = Sigma
∑
=
1
n
X
′
X
′
T
\sum = \frac{1}{n}X'X'^T
∑=n1X′X′T
(1) 当 X, Y 的联合分布像上图那样时,大致上有: X 越大 Y 也越大, X 越小 Y 也越小,这种情况,称为“正相关”。
(2) 当 X, Y 的联合分布像上图那样时,大致上有: X 越大 Y 越小, X 越小 Y 也越小,这种情况,称为“负相关”。
(3) 当 X, Y 的联合分布像上图那样时,大致上有:既不是X 越大Y 也越大,也不是 X 越大 Y 也越小,这种情况,称为“不相关”。
2.计算协方差矩阵A的特征向量矩阵U
要满足AU = US
A :协方差矩阵
S :特征值矩阵
U :特征向量矩阵
数据降维与重建
1.如果希望将数据从n维降至k维,只需要从U中选取前K个向量,获得一个n×k维度的矩阵,我们用Ureduce表示。
2.然后通过如下计算获得要求的新特征数据集Z:Z = XUreduce
应用PCA的建议
1.压缩
减少内存及磁盘的数据需求
加速学习算法
2.可视化
3.注意PCA不是处理过拟合的一个好方法,处理过拟合应使用正则化代替
代码实现
import matplotlib.pyplot as plt
# 降维
from sklearn.decomposition import PCA
from sklearn.datasets import load_breast_cancer
# 读取数据(调用乳腺癌数据集)
data = load_breast_cancer()
x = data.data
y = data.target
print(y)
# 加一个降维后的维度
pca = PCA(n_components=2)
# 训练模型并返回一个降维后的模型
X_new = pca.fit_transform(x)
# 画图
plt.title('癌症数据集分布')
plt.scatter(X_new[y == 0, 0], X_new[y == 0, 1],label=data.target_names[1])
plt.scatter(X_new[y == 1, 0], X_new[y == 1, 1],label=data.target_names[0])
plt.legend()
plt.show()