一、为什么要进行数据降维

机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据映射到低维度的空间中。之所以要进行数据降维,是因为在原始的高维数据中,存在很多冗余以及噪声信息,通过数据降维,我们可以减少冗余信息,提高识别的精度,同时降低维度也可以提升机器学习的速度。

二、原理

PCA 全称为主成分分析方法(Principal Component Analysis),它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。

举个 ,下图中的数据为 2 维,现在想只通过 1 个维度来表示这堆数据,通过将数据投影到 z 轴上,原始的点

在新的 z 轴上的数据为

那么怎么找到这个投影轴呢?这里的过程比较复杂,感兴趣的同学可以看 [PCA的数学原理(转)],主要的过程就是通过协方差矩阵来求解特征向量从而获取降维后的轴。

假设原始数据表示为

,数据维度为
,PCA 算法的流程如下:

1. 均值标准化

获取每个维度的均值,设

为第
个维度的均值,则

再对原始的数据进行替换,

2.求解协方差矩阵

经过均值标准化之后的数据的协方差矩阵为

3.获取特征向量

一般来说,

会有
个特征值,对应
个特征向量,如果需要将原始数据从
维降低到
维,则只需要选取特征值最大的
个特征值对应的特征向量即可,我们将其设为

4.降低数据维度

低维数据可以表示为

这样就将原始的

维数据降低为
维。,这是如果想恢复原始数据怎么办?可以恢复部分维度,被压缩的部分是找不回来的,通过压缩后的数据还原到原始数据的公式为

举个 ,假设原始数据为

,维度为
,下面我们根据上述过程计算 1 个维度下的值。

首先计算均值,我们发现每列数据的均值为 0,那么则可以直接进行协方差矩阵的计算

然后求其特征值和特征向量,具体求解方法不再详述,可以参考相关资料。求解后特征值为

其对应的特征向量分别是

其中对应的特征向量分别是一个通解,

可取任意实数。那么标准化后的特征向量为

由于需要降低到 1 维,所以我们取特征值

对应的特征向量作为矩阵
,降维后的数据为

注意⚠️:通过前面的方法我们知道还需要手动设置一个

值,那么怎么选择最优的
值呢,一般来说,选取的
值通常要保留 99% 的方差,
值的选取可以参考下面的过程:

1.

2. 通过式

计算

3. 校对是否满足以下条件

如果满足上述条件,则可以选择该

三、实现

3.1 Python 手动实现

'''
@Author: huzhu
@Date: 2019-11-20 09:18:15
@Description:
'''
import numpy as np
import matplotlib.pyplot as plt def load_data(file_name, delim='t'):fr = open(file_name)str_arr = [line.strip().split(delim) for line in fr.readlines()]dat_arr = [list(map(float,line)) for line in str_arr]return np.mat(dat_arr)def pca(data_mat, topNfeat = 999999):'''@description: PCA@return: low_data_mat, recon_mat'''mean_val = np.mean(data_mat, axis = 0)mean_removed = mean_val - data_mat# get the covrariance matrixcov_mat = np.cov(mean_removed, rowvar=0)# get the eigenvalue and eigenvectoreigen_vals, eigen_vecs = np.linalg.eig(cov_mat)# sort, sort goes smallest to largesteigen_val_ind = np.argsort(eigen_vals)# cut off unwanted dimensionseigen_val_ind = eigen_val_ind[:-(topNfeat+1):-1]print(eigen_val_ind)# reorganize eig vects largest to smallestred_eigen_vecs = eigen_vecs[:,eigen_val_ind] print(red_eigen_vecs)# low dimension datalow_data_mat = mean_removed * red_eigen_vecs# transfor low data to original dimensionrecon_mat = (low_data_mat * red_eigen_vecs.T) + mean_valreturn low_data_mat, recon_matif __name__ == '__main__':data_mat = load_data("testSet.txt")low_data_mat, recon_mat = pca(data_mat, 1)plt.figure()plt.scatter(data_mat[:,0].flatten().A[0], data_mat[:,1].flatten().A[0], marker='^', s = 90)plt.scatter(recon_mat[:,0].flatten().A[0], recon_mat[:,1].flatten().A[0], marker='o', s = 50, c = "red")plt.show()

降维后的结果如下图所示。

3.2 库函数实现

import numpy as np
from sklearn.decomposition import PCA
X = np.array([[-1, -2], [-1, 0], [0, 0], [2, 1], [0, 1]])
pca = PCA(n_components=1)
newX = pca.fit_transform(X)
print(newX)
print(pca.explained_variance_ratio_)

结果为

[[ 2.12132034][ 0.70710678][-0.        ][-2.12132034][-0.70710678]]
[0.83333333]

可以看到和我们上述举例的数据相同(符号相反是求解特征向量的时候符号不同所导致的)。

完整代码和数据可以参考 [我的 github]

四、参考

[1] https://zhuanlan.zhihu.com/p/21580949

[2] https://www.jianshu.com/p/8642d5ea5389

pca降维后的特征跟原来的特征有什么关系?_PCA 主成分分析方法相关推荐

  1. 对pca降维后的手写体数字图片数据分类_python机器学习API介绍13: 数据降维及主成分分析...

    数据降维概述:数据降维是机器学习领域中重要的内容,所谓的降维就是采用某种映射方法,将高维空间中的数据点映射到低维的空间中.其本质是学习一个映射函数f: x->y.其中x是原始数据点的表述,目前多 ...

  2. 对pca降维后的手写体数字图片数据分类_【AI白身境】深度学习中的数据可视化...

    今天是新专栏<AI白身境>的第八篇,所谓白身,就是什么都不会,还没有进入角色. 上一节我们已经讲述了如何用爬虫爬取数据,那爬取完数据之后就应该是进行处理了,一个很常用的手段是数据可视化. ...

  3. 对pca降维后的手写体数字图片数据分类_机器学习:数据的准备和探索——特征提取和降维...

    在数据的预处理阶段,特征提取和数据降维是提升模型表示能力的一种重要手段. 特征提取主要是从数据中找到有用的特征,用于提升模型的表示能力,而数据降维主要是在不减少模型准确率的情况下减少数据的特征数量. ...

  4. 对pca降维后的手写体数字图片数据分类_知识干货-机器学习-TSNE数据降维

    1.TSNE的基本概念 2.例1 鸢尾花数据集降维 3.例2 MINISET数据集降维 1.TSNE的基本概念 t-SNE(t-distributed stochastic neighbor embe ...

  5. 降维后输入分类器分类时报错_逻辑回归解决多分类方法及其优缺点分析

    众所周知,逻辑回归常用于解决二分类任务,但是在工作/学习/项目中,我们也经常要解决多分类问题.本文总结了 3 种逻辑回归解决多分类的方法,并分析了他们的优缺点. 一.One-Vs-Rest 假设我们要 ...

  6. 第10章 PCA降维技术

    序言 1. 内容介绍 本章详细介绍了PCA 主成分分析算法基本原理.python 实现PCA 算法方法以及sklearn实现方法等内容. 2. 理论目标 了解PCA 主成分分析算法基本原理 了解pyt ...

  7. 数据特征处理pca降维-小结

    1.降维的主要目的是为了减少训练样本的时间,只保留重要的特征,去掉一些无关紧要的特征,至于是去掉哪些特征,保留哪些特征, 这个就是pca要做的事情了,类似以下的例子: 日期 湿度 温度 是否购买衣服 ...

  8. 画出降维后的图片_机器学习实战基础(二十三):sklearn中的降维算法PCA和SVD(四) PCA与SVD 之 PCA中的SVD...

    PCA中的SVD 1 PCA中的SVD哪里来? 细心的小伙伴可能注意到了,svd_solver是奇异值分解器的意思,为什么PCA算法下面会有有关奇异值分解的参数?不是两种算法么?我们之前曾经提到过,P ...

  9. 画出降维后的图片_看了这几张图,让你彻底理解特征降维

    导读:本文用图的形式介绍机器学习中特征降维的基本思想和方法.阅读完本篇文章,您将很容易理解PCA降维的基本思想和方法. 一.为什么要进行特征降维? 在机器学习中,一些数据集的特征数量很多,达到几千维甚 ...

最新文章

  1. 人们怕人工智能获得意识到底是怕哪个方面?
  2. mysql集群之MMM简单搭建
  3. 本地安装gem install --local redis-stat-0.4.13.gem
  4. MyBatis Plus——自定义配置——自定义属性——注入时间
  5. html5列表标签代码,HTML5列表标签和表格标签(示例代码)
  6. 爬虫 spider02——详析http
  7. TCP/IP 学习 --- 2
  8. 实施Jersey 2 Spring集成
  9. 程序员和注册会计师的地位_“注册会计师和律师哪个地位高?”这3张图给出了答案!...
  10. 《人月神话》阅读体会(三)
  11. 【半原创】将js和css文件装入localStorage加速程序执行
  12. 内存监控设置及数据获取方案
  13. 数组、链表、哈希表(数据结构)-代码随想录
  14. 运维审计系统是堡垒机么?跟堡垒机有啥区别?
  15. Ubuntu创建用户
  16. 【Python 3 的基础语法】
  17. 给老板的一封工作感悟信
  18. 线性代数笔记(1):向量空间与子空间
  19. 多个DataFream追加写入同一个sheet代码示例
  20. 利用Python来制作一个中英互译器,并实现语音播报

热门文章

  1. 学习C++项目—— 计算机网络编程基础 和 学习多线程,多进程基础
  2. android 笔记本推荐 2015年,IDC:Android平板份额2015年将超iPad
  3. qt 旋转后的三维坐标_OpenGL + Qt: 3 - 旋转动画和键盘操纵
  4. 通过埋点搜集日志数据的简单架构
  5. R语言︱R社区的简单解析(CRAN、CRAN Task View)
  6. 开源直播OBS ( Open Broadcaster Software ) 多机位,多场景切换
  7. Linux下vmware安装部署
  8. 生命科学研究需求推动云计算发展
  9. 做双网卡绑定_______物理机在双网卡的情况下做多IP绑定
  10. nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器