PCA降维原理及调库实现

降维的作用

  • ①数据在低维下更容易处理、更容易使用;
  • ②相关特征,特别是重要特征更能在数据中明确的显示出来;如果只有两维或者三维的话,更便于可视化展示;
  • ③去除数据噪声(数据噪声:噪声数据是指数据中存在着错误或异常(偏离期望值)的数据,这些数据对数据的分析造成了干扰)
  • ④降低算法开销

降维通俗点的解释

一些高维度的数据,比如淘宝交易数据,为便于解释降维作用,我们在这假设有下单数,付款数,商品类别,售价四个维度,数据量上百万条,对于下单数和付款数,我们可以认为两者是线性相关的,即知道下单数,我们可以得到付款数,这里很明显这两个属性维度有冗余,去掉下单数,保留付款数,明显能再保证原有数据分布和信息的情况下有效简化数据,对于后面的模型学习会缩短不少时间和空间开销。这就是降维,当然并不是所有数据中都会有过于明显线性相关的属性维度,我们降维后最终的目标是各个属性维度之间线性无关。

PCA降维原理及调库实现_第1张图片

每个新特征是所有原特征的线性组合,原特征并没有改变,是特征工程的一个方法

PCA降维步骤

PCA降维原理及调库实现_第2张图片

调库实现

PCA降维原理及调库实现_第3张图片

import numpy
import sklearn.datasets as dts  # 加载sklearn数据集
from sklearn.decomposition import PCA  # 导入sklearn的降维包
import matplotlib.pyplot as plt

data = dts.load_breast_cancer()  # 加载乳腺癌数据集
X = data.data  # 特征X
Y = data.target  # 标签Y
labels = data.target_names  # 标签名称

# model = PCA(n_components=2) # 直接指定降维后要保留2个特征
model = PCA(0.98)   # 指定特征值方差比例
newX = model.fit_transform(X)   #训练并降维,newX是降维后的数据

print('特征值方差:', model.explained_variance_)
print('特征值方差比率:', model.explained_variance_ratio_)
print('特征向量:', model.components_)

# #画降维后的数据散点图
# plt.scatter(newX[Y==0,0],newX[Y==0,1],label=labels[0])
# plt.scatter(newX[Y==1,0],newX[Y==1,1],label=labels[1])
# plt.legend()
# plt.show()

# 用降维后的数据进行重建
recoverX = model.inverse_transform(newX)

你可能感兴趣的:(机器学习)