机器学习笔记簿 降维篇 PCA 01
降维是机器学习中十分重要的部分,降维就是通过一个特定的映射(可以是线性的或非线性的)将高维数据转换为低维数据,从而达到一些特定的效果,所以降维算法最重要的就是找到这一个映射。主成分分析(Principal Component Analysis, PCA)是一种最经典,也是最简单的降维算法。PCA可以保证降维之后,重构回原数据的效果最好,因此广泛用于对高维数据的预处理。
1. 一个投影的PCA求解
设样本矩阵为\(X=[x_1,x_2,\cdots,x_n]\in \mathbb R^{m\times n}\),其中样本向量\(x_i\in\mathbb R^m\),样本均值为
\]
我们现在要找到一个投影向量\(p\in\mathbb R^m\),且\(\|p\|_2=1\),将各样本映射到一个\(1\)维空间中,
\]
在这里,\(p^Tx\)称为一个主成分。
PCA的目标是最大化投影后的样本方差,方差也可以称为样本的散度,方差越大则样本的散度越大(样本点在空间中的分布越散乱),相反,如果散度越小,样本投影之后越聚集,就越难以重构(可以结合信息熵来理解,熵值越大信息越多)。最大化散度的方案可以保证投影产生的信息丢失最少,因此PCA总可以保证降维之后的数据是最接近原数据的。在当前情形下,PCA的优化问题是:
&&\max_{p^Tp=1} \sum_{i=1}^n{(y-\bar y)^2}\\
=&&\max_{p^Tp=1} \sum_{i=1}^n{(p^Tx-p^T\bar x)^2}\\
=&&\max_{p^Tp=1} \sum_{i=1}^n{(p^Tx-p^T\bar x)(p^Tx-p^T\bar x)^T}\\
=&&\max_{p^Tp=1} \sum_{i=1}^n{p^T(x-\bar x)(x-\bar x)^Tp}\\
=&&\max_{p^Tp=1} p^T\left[\sum_{i=1}^n{(x-\bar x)(x-\bar x)^T}\right]p\\
=&&\max_{p^Tp=1} p^TSp\tag{1}
\end{eqnarray*}
\]
其中,定义散度矩阵(亦称作协方差矩阵)为
\]
这里\(\hat X\)是去中心化后的样本矩阵,即\(\hat X=[x_1-\bar x,x_2-\bar x,\cdots,x_n-\bar x]\),考虑到\((1)\)中含有等式约束,我们可以用使用拉格朗日乘数法解优化问题\((1)\),首先定义拉格朗日函数为
\]
令\(L\)对\(p\)的偏导为\(0\)得到:
\frac{\partial L}{\partial p}&=&Sp-\lambda p=0\\
\Rightarrow Sp&=&\lambda p\tag{2}
\end{eqnarray*}
\]
将\((2)\)代回\((1)\)中得到
&&\max_{p^Tp=1}{p^TSp}\\=&&\max_{p^Tp=1}{p^T\lambda p}\\=&&\max_{p^Tp=1}{\lambda}\tag{3}
\end{eqnarray*}
\]
显然\((2)\)是一个特征值问题,根据\((3)\)可以知道,最大的特征值对应的特征向量就是我们所需的投影向量\(p\)。
2. 多个投影的PCA求解
在前面我们获得了一个投影向量,可以将样本投影到一维空间,在一般情况下我们需要指定降维维数\(d\),这样就需要\(d\)个投影向量。这样我们的目标就是一个投影矩阵\(P=[p_1,p_2,\cdots,p_d]\in\mathbb{R}^{m\times d}\),并且\(P\)的各个投影\(p_i\)都是标准正交的(正交性可以保证每一个主成分之间都互不相关),也即\(P^TP=I\)。样本可以通过\(P\)投影到\(d\)维空间:
\]
\(y\)中的每一个元素都是一个主成分,此处它包含了个\(d\)个互不相关的主成分。
PCA的优化目标仍然是最大化样本的散度,同理,它的优化目标是:
&&\max_{P^TP=I} \sum_{i=1}^n{\|y-\bar y\|^2_2}\\
=&&\max_{P^TP=I} \sum_{i=1}^n{\|P^Tx-P^T\bar x\|^2_2}\\
=&&\max_{P^TP=I} \sum_{i=1}^n{tr\left[(P^Tx-P^T\bar x)(P^Tx-P^T\bar x)^T\right]}\\
=&&\max_{P^TP=I} \sum_{i=1}^n{tr\left[P^T(x-\bar x)(x-\bar x)^TP\right]}\\
=&&\max_{P^TP=I} tr\left\{P^T\left[\sum_{i=1}^n{(x-\bar x)(x-\bar x)^T}\right]P\right\}\\
=&&\max_{P^TP=I} tr(P^TSP)\\
=&&\max_{p_i^Tp_i=1} \sum_{i=1}^n{p_i^TSp_i}\tag{4}
\end{eqnarray*}
\]
这里\((4)\)和\((1)\)具有相同的形式,我们仍然可以通过拉格朗日乘数法来求解,而这里我们获得的投影矩阵是\(S\)的前\(d\)个最大特征值对应的特征向量依次排列组成的。
一般我们定义能量占比来选取\(d\)的大小,设定一个阈值\(\alpha\)(一般取\(0.95,0.98\)等),则\(d\)由下式给出
\]
\(\lambda_i\)是第\(i\)大的特征值,\(E\)是能量占比,这个式子的意义是,选择能够使能量占比达到阈值的最小的\(d\)作为降维维数,这样可以保证主要的信息(也就是特征值大的那些投影)能够被获取,那些特征值很小的投影被丢弃,PCA通过这种方式可以去除散度矩阵的零空间,从而去除了原样本的无用信息。
总结一下,PCA的步骤很简单:
计算去中心化后的样本矩阵矩阵\(\hat X\),求出散度矩阵\(S\)
对散度矩阵\(S\)进行特征分解
最后取它前\(d\)个最大特征值的特征向量作为投影矩阵\(P\)。
3. 基于最小化重构误差的理解
以上我们从最大化散度的角度出发理解了PCA。由于PCA本质上要求降维产生的数据信息的损失最少,因此我们可以从最小化重构误差的角度出发,也能得到相同的结果。
首先我们需要知道投影后的数据是如何重构的,在这里重构就是投影的逆过程,重构数据就因此被定义为
\]
在这里,PCA想要做到重构后的数据可以近似为原始数据,即
\]
这里的\(y_ip_i(i=1,2,\cdots,d)\)其实是数据的每一个投影分量。也就是说我们希望误差\(\|x-x'\|_2\)越小越好,对应的优化问题是
&&\min_{P^TP=I}\sum_{i=1}^n{\|x_i-x_i'\|_2^2}\\
=&&\min_{P^TP=I}\sum_{i=1}^n{\|x_i-PP^Tx_i\|_2^2}\\
=&&\min_{P^TP=I}{\|X-PP^TX\|_F^2}\\
=&&\min_{P^TP=I}tr\left[(X-PP^TX)(X-PP^TX)^T\right]\\
=&&\min_{P^TP=I}tr(XX^T)-2tr(XX^TPP^T)+tr(PP^TXX^TPP^T)\\
=&&\min_{P^TP=I}tr(P^TXX^TPP^TP)-2tr(P^TXX^TP)\\
=&&\min_{P^TP=I}-tr(P^TXX^TP)\\
=&&\max_{P^TP=I}tr(P^TXX^TP)\\
\end{eqnarray*}
\]
如果假设散度矩阵是\(S_0=XX^T\),则原优化问题变为
\]
这个问题我们已经很熟悉了:\(P\)就是\(S_0\)的前\(d\)个最大特征值对应的特征向量组成的。
注意到,在之前我们用到的散度矩阵是\(S=\hat X\hat X^T\),这里的\(\hat X\)是去中心化过的样本矩阵,但根据以上的推导,样本矩阵完全可以不用去中心化,直接计算\(S_0\)进行特征分解依然可以实现PCA,但这不意味着用\(S\)和用\(S_0\)得到的计算结果是相同的:去中心化可以帮助减少样本数据偏移(bias)的影响,不去中心化时可以用更少的投影就达到很好的重构效果,在样本均值为\(0\)的时候,这两种方法没有区别。在实际应用中,使用\(S_0\)或者\(S\)作特征分解都是可行的。
机器学习笔记簿 降维篇 PCA 01的更多相关文章
- 机器学习笔记簿 降维篇 LDA 01
机器学习中包含了两种相对应的学习类型:无监督学习和监督学习.无监督学习指的是让机器只从数据出发,挖掘数据本身的特性,对数据进行处理,PCA就属于无监督学习,因为它只根据数据自身来构造投影矩阵.而监督学 ...
- iOS开发Swift篇(01) 变量&常量&元组
iOS开发Swift篇(01) 变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对于14年 ...
- 【机器学习】主成分分析法 PCA (I)
主成分分析算法是最常见的降维算法,在PCA中,我们要做的是找到一个方向向量,然后我们把所有的数都投影到该向量上,使得投影的误差尽可能的小.投影误差就是特征向量到投影向量之间所需要移动的距离. PCA的 ...
- 机器学习算法总结(九)——降维(SVD, PCA)
降维是机器学习中很重要的一种思想.在机器学习中经常会碰到一些高维的数据集,而在高维数据情形下会出现数据样本稀疏,距离计算等困难,这类问题是所有机器学习方法共同面临的严重问题,称之为“ 维度灾难 ”.另 ...
- 机器学习基础与实践(三)----数据降维之PCA
写在前面:本来这篇应该是上周四更新,但是上周四写了一篇深度学习的反向传播法的过程,就推迟更新了.本来想参考PRML来写,但是发现里面涉及到比较多的数学知识,写出来可能不好理解,我决定还是用最通俗的方法 ...
- 机器学习实战基础(二十一):sklearn中的降维算法PCA和SVD(二) PCA与SVD 之 降维究竟是怎样实现
简述 在降维过程中,我们会减少特征的数量,这意味着删除数据,数据量变少则表示模型可以获取的信息会变少,模型的表现可能会因此受影响.同时,在高维数据中,必然有一些特征是不带有有效的信息的(比如噪音),或 ...
- 机器学习之路:python 特征降维 主成分分析 PCA
主成分分析: 降低特征维度的方法. 不会抛弃某一列特征, 而是利用线性代数的计算,将某一维度特征投影到其他维度上去, 尽量小的损失被投影的维度特征 api使用: estimator = PCA(n_c ...
- 吴裕雄 python 机器学习——主成份分析PCA降维
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...
- 机器学习实战基础(二十七):sklearn中的降维算法PCA和SVD(八)PCA对手写数字数据集的降维
PCA对手写数字数据集的降维 1. 导入需要的模块和库 from sklearn.decomposition import PCA from sklearn.ensemble import Rando ...
随机推荐
- 四. sql上线平台
一.inception安装使用 inception是一个集审核.执行.备份及生成回滚语句于一身的MySQL自动化运维工具 [root@CentOS ~]# [root@CentOS ~]# wget ...
- 记一次服务器被植入挖矿木马cpu飙升200%解决过程
线上服务器用的是某讯云的,欢快的完美运行着Tomcat,MySQL,MongoDB,ActiveMQ等程序.突然一则噩耗从前线传来:网站不能访问了. 此项目是我负责,我以150+的手速立即打开了服务器 ...
- application.yml和application.properties文件的区别
maven项目 .yml文件时树状结构,层级浅时比较方便,层级深的时候就比较麻烦了 .properties文件时属性访问结构,层级深浅对它来说是一样的,而且相较于.yml类型的文件比较好配置,但缺点也 ...
- 数据的编码和解码--java例子
昨天借了一本<网络程序设计实验教程(java语言)>,然后看了第一章,一个Swing例子,于是为大家分享一下! 关于数据的编码与解码,我觉得就例子而言已经交待得非常清楚了,两种方法做的. ...
- 在页面制作的时候常用的html页面滚动加载,可视区域判断方法
演示图 考虑2个情况一种情况初始状态下 滚动到在中间区域的时候,这时上半部分看不见的元素就不给字体添加红色一种情况是,从头向下看的. 代码 .ss li { margin: 40px; } <d ...
- idea 快速生成返回值快捷方式
idea java快速生成返回值 ctrl+alt+V
- Problem C Emergency Evacuation 一道思维题
题目描述 输入 输出 样例 样例输入 样例输入一 样例输入二 样例输出 样例输出一 9 样例输出二 1008 一句话题意:给你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值. 分析 ...
- Django---drf第一天---作业
1 图书的5个接口写完(使用序列化组件) urls.py from django.contrib import admin from django.urls import path, re_path ...
- 仅需5步,轻松升级K3s集群!
Rancher 2.4是Rancher目前最新的版本,在这一版本中你可以通过Rancher UI对K3s集群进行升级管理. K3s是一个轻量级Kubernetes发行版,借助它你可以几分钟之内设置你的 ...
- C# DataTable与Excel读取与导出
/// <summary> /// Excel->DataTable /// </summary> /// <param name="filePath&q ...