一、降维—数据压缩
这样做的问题在于,降维的算法只负责减少维数,新产生的特征的意义就必须由我们自 己去发现了。
降维的算法有很多,比如奇异值分解(SVD)、主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA)。
二、主成分分析—PCA
主成分分析(PCA)是最常见的降维算法
在PCA中,要做的是找到一个方向向量(Vector direction),当把所有的数据都投射到该向量上时,希望投射距离均方差能尽可能地小。
方向向量是一个经过原点的向量,而投射误差是从特征向量向该方向向量作垂线的长度。
主成分分析最小化的是投射距离误差(Projected Error) 。
线性回归与PCA误差的对比
三、主成分分析算法—奇异值分解(SVD)
奇异值分解(SVD)
1、 计算 “协方差矩阵”A:
X’是X矩阵经特征均值缩放、转置的矩阵
2、计算协方差矩阵A的特征向量矩阵U:
U,S,V = svd(A)
AU=US (特征值S, 特征向量U,协方差矩阵A)
**向X1轴的投射距离方差最小,则在X1轴上投射形成的数据分布方差越大,**表示数据的区分度越高,也就是蕴含的信息量是越大。
特征值=在坐标轴X1上投射分布方差
特征向量=坐标轴X1
向旋转后的X1轴的投射距离方差最小,则投射形成的数据分布方差越大,表示数据的区分度越高,也就是蕴含的信息量是越大。
特征值=在旋转后的坐标轴X1上投射分布方差,
特征向量=旋转后的坐标轴X1
四、PCA—优缺点
PCA 优缺点:
1、是对数据进行降维的处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。
2、PCA是完全无参数限制的。在计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。
3、第2点同时也可以看作是缺点。如果用户对观测对象有一定的先验知识,掌握数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。
常见错误思维
使用主要成分分析的情况是,将其用于减少过拟合(减少了特征的数量)。这样做非常不好,不如尝试正则化处理。
原因在于主要成分分析只是近似地丢弃掉一些特征,它并不考虑任何与结果变量有关的信息,因此可能会丢失非常重要的特征。然而当我们进行正则化处理时,会考虑到结果变量,不会丢掉重要的数据。
五、PCA的调库实现
#调库
import matplotlib.pyplot as plt
#sklearn中自带的癌症数据集
from sklearn.datasets import load_breast_cancer
from sklearn.decomposition import PCA
#中文、负号显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#读取数据
data = load_breast_cancer()
X = data.data
y = data.target
#把1改为恶性 把0改为良性
target_name = ['恶性' if i=='malignant' else '良性' for i in data.target_names]
#创建模型
pca = PCA(n_components=2) #代表降维后维度为2
X_new = pca.fit_transform(X) #计算模型并将X降维. 返回shape
print('特征向量',pca.components_)
print('特征值的方差 ',pca.explained_variance_)
print('特征值方差所占比例',pca.explained_variance_ratio_)
#画图
plt.title('癌症数据集分布')
plt.scatter(X_new[y==0,0],X_new[y==0,1],c='r',label=target_name[1])
plt.scatter(X_new[y==1,0],X_new[y==1,1],c='b',label=target_name[0])
plt.legend()
plt.show()
效果展示
特征向量 [[ 5.08623202e-03 2.19657026e-03 3.50763298e-02 5.16826469e-01
4.23694535e-06 4.05260047e-05 8.19399539e-05 4.77807775e-05
7.07804332e-06 -2.62155251e-06 3.13742507e-04 -6.50984008e-05
2.23634150e-03 5.57271669e-02 -8.05646029e-07 5.51918197e-06
8.87094462e-06 3.27915009e-06 -1.24101836e-06 -8.54530832e-08
7.15473257e-03 3.06736622e-03 4.94576447e-02 8.52063392e-01
6.42005481e-06 1.01275937e-04 1.68928625e-04 7.36658178e-05
1.78986262e-05 1.61356159e-06]
[ 9.28705650e-03 -2.88160658e-03 6.27480827e-02 8.51823720e-01
-1.48194356e-05 -2.68862249e-06 7.51419574e-05 4.63501038e-05
-2.52430431e-05 -1.61197148e-05 -5.38692831e-05 3.48370414e-04
8.19640791e-04 7.51112451e-03 1.49438131e-06 1.27357957e-05
2.86921009e-05 9.36007477e-06 1.22647432e-05 2.89683790e-07
-5.68673345e-04 -1.32152605e-02 -1.85961117e-04 -5.19742358e-01
-7.68565692e-05 -2.56104144e-04 -1.75471479e-04 -3.05051743e-05
-1.57042845e-04 -5.53071662e-05]]
特征值的方差 [443782.6051466 7310.10006165]
特征值方差所占比例 [0.98204467 0.01617649]