[HITML]哈工大2020秋机器学习Lab4实验报告

Gtihub仓库


2020年春季学期
计算学部《机器学习》课程


Lab4 实验报告




姓名
学号
班号
电子邮件
手机号码


1 实验目的

实现一个PCA模型,能够对给定数据进行降维(即找到其中的主成分)

2 实验要求及实验环境

2.1 实验要求

测试:

  1. 首先人工生成一些数据(如三维数据),让它们主要分布在低维空间中,如首先让某个维度的方差远小于其它唯独,然后对这些数据旋转。生成这些数据后,用你的PCA方法进行主成分提取。

  2. 找一个人脸数据(小点样本量),用你实现PCA方法对该数据降维,找出一些主成分,然后用这些主成分对每一副人脸图像进行重建,比较一些它们与原图像有多大差别(用信噪比衡量)。

2.2 实验环境

Windows 10, Python 3.8.5, Jupyter notebook

3 实验原理

PCA(主成分分析,Principal Component Analysis)是最常用的一种降维方法。PCA的主要思想是将D维特征通过一组投影向量映射到K维上,这K维是全新的正交特征,称之为主成分,采用主成分作为数据的代表,有效地降低了数据维度,且保留了最多的信息。关于PCA的推导有两种方式:最大投影方差和最小投影距离。

  • 最大投影方差:样本点在这个超平面上的投影尽可能分开
  • 最小投影距离:样本点到这个超平面的距离都足够近

3.1 中心化

在开始PCA之前需要对数据进行预处理,即对数据中心化。设数据集 X = { x 1 , x 2 , . . . , x n } X=\{x_1, x_2, ..., x_n\} X={x1,x2,...,xn},其中 x i = { x i 1 , x i 2 , . . . , x i d } x_i = \{x_{i1}, x_{i2}, ..., x_{id}\} xi={xi1,xi2,...,xid},即 X X X 是一个 n × d n \times d n×d 的矩阵。则此数据集的中心向量(均值向量)为:

μ = 1 n ∑ i = 1 n x i \mu = \frac 1 n \sum_{i=1}^n x_i μ=n1i=1nxi
对数据集每个样本均进行操作: x i = x i − μ x_i = x_i - \mu xi=xiμ,就得到了中心化后的数据,此时有 ∑ i = 1 n x i = 0 \displaystyle\sum_{i=1}^n x_i=0 i=1nxi=0

中心化可以给后面的计算带来极大的便利,因为中心化之后的常规线性变换就是绕原点的旋转变化,也就是坐标变换。此时,协方差为 S = 1 n ∑ i = 1 n x i x i T = 1 n X T X S=\displaystyle\frac 1 n\sum_{i=1}^n x_i x_i^T=\frac 1 n X^T X S=n1i=1nxixiT=n1XTX

设使用的投影坐标系的一组标准正交基 U k × d = { u 1 , u 2 , . . . , u k } , k < d , u i = { u i 1 , u i 2 , . . . , u i d } U_{k\times d}=\{u_1, u_2, ..., u_k\},\ k<d, u_i = \{u_{i1}, u_{i2}, ..., u_{id}\} Uk×d={u1,u2,...,uk}, k<d,ui={ui1,ui2,...,uid},故有 U U T = 1 UU^T=1 UUT=1,使用这组基变换中心化矩阵 X X X,得降维压缩后的矩阵 Y n × k = X U T Y_{n \times k}=XU^T Yn×k=XUT,重建得到 X ^ = Y U = X U T U \hat X=YU=XU^TU X^=YU=XUTU

3.2 最大投影方差

对于任意一个样本 x i x_i xi,在新的坐标系中的投影为 y i = x i U T y_i=x_iU^T yi=xiUT,在新坐标系中的投影方差为 y i T y i = U x i T x i U T y_i^Ty_i=Ux_i^T x_iU^T yiTyi=UxiTxiUT。要使所有的样本的投影方差和最大,也就是求 arg ⁡ max ⁡ U ∑ i = 1 n U x i T x i U T \displaystyle\arg\max_U \sum^n_{i=1} Ux_i^T x_iU^T argUmaxi=1nUxiTxiUT,即
arg ⁡ max ⁡ U t r ( U X T X U T ) s . t . U U T = 1 \arg \max_U\ tr(UX^TXU^T)\qquad s.t.\ UU^T=1 argUmax tr(UXTXUT)s.t. UUT=1

求解:在 u 1 u_1 u1 方向投影后的方差

1 n ∑ i = 1 n { u 1 T x i − u 1 T μ } 2 = 1 n ( X u 1 T ) T ( X u 1 T ) = 1 n u 1 X T X u 1 T = u 1 S u 1 T \frac 1 n \sum_{i=1}^n\{u_1^Tx_i - u_1^T\mu\}^2 = \frac 1 n (Xu_1^T)^T(Xu_1^T)=\frac 1 n u_1X^TXu_1^T=u_1Su_1^T n1i=1n{u1Txiu1Tμ}2=n1(Xu1T)T(Xu1T)=n1u1XTXu1T=u1Su1T
因为 u 1 u_1 u1 是投影方向,且已经假设它是单位向量,即 u 1 T u 1 = 1 u_1^Tu_1=1 u1Tu1=1,用拉格朗日乘子法最大化目标函数:
L ( u 1 ) = u 1 T S u 1 + λ 1 ( 1 − u 1 T u 1 ) L(u_1) = u_1^TSu_1 + \lambda_1(1-u_1^Tu_1) L(u1)=u1TSu1+λ1(1u1Tu1)
u 1 u_1 u1 求导,令导数等于0,解得 S u 1 = λ 1 u 1 Su_1 = \lambda_1 u_1 Su1=λ1u1,显然, u 1 u_1 u1 λ 1 \lambda_1 λ1 是一组对应的 S S S 的特征向量和特征值,所以有 u 1 T S u 1 = λ 1 u_1^TSu_1 = \lambda_1 u1TSu1=λ1,结合在 u 1 u_1 u1 方向投影后的方差式,可得求得最大化方差,等价于求最大的特征值。

要将 d d d 维的数据降维到 k k k 维,只需计算前 k k k 个最大的特征值,将其对应的特征向量( d × 1 d\times 1 d×1 的)转为行向量( 1 × d 1\times d 1×d 的)组合成特征向量矩阵 U k × d U_{k\times d} Uk×d,则降维压缩后的矩阵为 Y = X U T Y=XU^T Y=XUT

3.3 最小投影距离

现在考虑整个样本集,希望所有的样本到这个超平面的距离足够近,也就是得到 Y Y Y 后,与 X X X 的距离最小。即求:
arg ⁡ min ⁡ U ∑ i = 1 n ∣ ∣ x ^ i − x i ∣ ∣ 2 2 = arg ⁡ min ⁡ U ∑ i = 1 n ∣ ∣ x i U T U − x i ∣ ∣ 2 2 = arg ⁡ min ⁡ U ∑ i = 1 n ( ( x i U T U ) ( x i U T U ) T − 2 ( x i U T U ) x i T + x i x i T ) = arg ⁡ min ⁡ U ∑ i = 1 n ( x i U T U U T U x i T − 2 x i U T U x i T + x i x i T ) = arg ⁡ min ⁡ U ∑ i = 1 n ( − x i U T U x i T + x i x i T ) = arg ⁡ min ⁡ U − ∑ i = 1 n x i U T U x i T + ∑ i = 1 n x i x i T ⇔ arg ⁡ min ⁡ U − ∑ i = 1 n x i U T U x i T ⇔ arg ⁡ max ⁡ U ∑ i = 1 n x i U T U x i T = arg ⁡ max ⁡ U t r ( U ( ∑ i = 1 n x i T x i ) U T ) = arg ⁡ max ⁡ U t r ( U X T X U T ) s . t . U U T = 1 \begin{aligned} \arg \min_U\sum^n_{i=1} || \hat x_i - x_i ||^2_2 &= \arg \min_U\sum\limits_{i=1}^n||x_iU^TU - x_i||_2^2\\ & =\arg \min_U\sum\limits_{i=1}^n ((x_iU^TU)(x_iU^TU)^T - 2(x_iU^TU)x_i^T + x_ix_i^T) \\ & =\arg \min_U\sum\limits_{i=1}^n (x_iU^TUU^TUx_i^T - 2x_iU^TUx_i^T + x_ix_i^T) \\ & =\arg \min_U \sum\limits_{i=1}^n (-x_iU^TUx_i^T + x_ix_i^T) \\ & =\arg \min_U -\sum\limits_{i=1}^n x_iU^TUx_i^T + \sum\limits_{i=1}^n x_ix_i^T \\ & \Leftrightarrow \arg \min_U -\sum\limits_{i=1}^n x_iU^TUx_i^T \\ & \Leftrightarrow \arg \max_U \sum\limits_{i=1}^n x_iU^TUx_i^T\\ & = \arg \max_U\ tr(U(\sum\limits_{i=1}^n x_i^Tx_i)U^T) \\ & =\arg \max_U\ tr(UX^TXU^T)\qquad s.t.\ UU^T=1 \end{aligned} argUmini=1nx^ixi22=argUmini=1nxiUTUxi22=argUmini=1n((xiUTU)(xiUTU)T2(xiUTU)xiT+xixiT)=argUmini=1n(xiUTUUTUxiT2xiUTUxiT+xixiT)=argUmini=1n(xiUTUxiT+xixiT)=argUmini=1nxiUTUxiT+i=1nxixiTargUmini=1nxiUTUxiTargUmaxi=1nxiUTUxiT=argUmax tr(U(i=1nxiTxi)UT)=argUmax tr(UXTXUT)s.t. UUT=1

可以看到,这个式子与我们在最大投影方差中得到的式子是一致的,这就说明了这两种方式求得的结果是相同的。

PCA实现:

def pca(x, k):n = x.shape[0]mu = np.sum(x, axis=0) / nx_centralized = x - mucov = (x_centralized.T @ x_centralized) / nvalues, vectors = np.linalg.eig(cov)index = np.argsort(values) # 从小到大排序后的下标序列vectors = vectors[:, index[:-(k+1):-1]].T # 把序列逆向排列然后取前k个,转为行向量return x_centralized, mu, vectors

4 实验结果分析

4.1 生成数据测试

为了⽅便进⾏数据可视化,在这⾥只进⾏了2维数据和3维数据的在PCA前后的对⽐实验。

4.1.1 二维降到一维

生成高斯分布数据的参数:
μ = [ 2 , 2 ] , σ = [ 10 0 0 0.1 ] \mu = \left[ \begin{matrix} 2, 2 \end{matrix} \right], \; \sigma = \left[ \begin{matrix} 10 & 0\\ 0 & 0.1\\ \end{matrix} \right] μ=[2,2],σ=[10000.1]
可以看到第2维的⽅差远⼩于第1维的⽅差,因此直观感觉在第2维包含了更多的信息,所以直接进⾏PCA,得到的结果如下:
在这里插入图片描述

可以看到在PCA之后的数据分布在直线(1维)上,另外其在横轴上的⽅差更⼤,纵轴上的⽅差更⼩,所以在进⾏PCA之后得到的直线与横轴接近。

4.1.2 三维降到二维

生成高斯分布数据的参数:
μ = [ 1 , 2 , 3 ] , σ = [ 0.1 0 0 0 10 0 0 0 10 ] \mu =\left[ \begin{matrix} 1, 2, 3 \end{matrix} \right], \ \sigma = \left[ \begin{matrix} 0.1 & 0 & 0\\ 0 & 10 & 0 \\ 0 & 0 & 10 \end{matrix} \right] μ=[1,2,3], σ=0.10001000010
同样,可以看到第1维的⽅差是远⼩于其余两个维度的,所以在第1维相较于其他两维信息更少,如下是PCA得到的结果的不同方向:

4.2 人脸数据测试

信噪比计算公式
M S E = 1 M N ∑ i = 0 M − 1 ∑ j = 0 N − 1 ∣ ∣ I ( i , j ) − K ( i , j ) ∣ ∣ 2 P S N R = 10 ⋅ log ⁡ 10 ( M A X I 2 M S E ) = 20 ⋅ log ⁡ 10 ( M A X I M S E ) \begin{aligned} & MSE = \frac{1}{MN}\sum\limits_{i=0}^{M-1}\sum\limits_{j=0}^{N-1}||I(i, j) - K(i, j)||^2\\ &PSNR = 10 \cdot \log_{10}\left(\cfrac{MAX_I^2}{MSE}\right) = 20 \cdot \log_{10}\left(\cfrac{MAX_I}{\sqrt{MSE}}\right) \end{aligned} MSE=MN1i=0M1j=0N1I(i,j)K(i,j)2PSNR=10log10(MSEMAXI2)=20log10(MSE MAXI)

4.2.1 有背景人脸数据

原图大小为 400 × 400 400 \times 400 400×400
在这里插入图片描述
在这里插入图片描述

4.2.2 无背景人脸

原图大小为 250 × 250 250\times 250 250×250
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

通过结果可以看出,无论是有背景的还是无背景的人脸图片,在降到 k = 50 k=50 k=50 时,都能较好的保留图片特征,人眼几乎无法分辨损失,降到 k = 10 k=10 k=10 时,图片有了较为明显的损失,降到 k = 3 k=3 k=3 时,图片损失扩大,仅能判断出该图原本是个人像,这些情况下有无背景的差别并不大。但在降到 k = 1 k=1 k=1 时,有背景的图片已经无法看出原图是一张人像,但无背景的图片仍然保留了人头像的大致轮廓。

但是从信噪比的角度来看,无论是降到几维,有背景图片的信噪比一直大于无背景图片的信噪比。

5 结论

  1. PCA降低了训练数据的维度的同时保留了主要信息,但在训练集上的主要信息未必是重要信息,被舍弃掉的信息未必⽆⽤,只是在训练数据上没有表现,因此PCA也有可能加重了过拟合。
  2. PCA算法中舍弃了 d − k d-k dk 个最⼩的特征值对应的特征向量,⼀定会导致低维空间与⾼维空间不同,但是通过这种⽅式有效提⾼了样本的采样密度;并且由于较⼩特征值对应的往往与噪声相关,通过PCA在⼀定程度上起到了降噪的效果。
  3. PCA用于图片的降维可以极大地缓解存储压力,尤其是在如今像素越来越高的情况下。使用PCA降维我们只需要存储三个比较小的矩阵,能够较大地节省存储空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/47061.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[HITML]哈工大2020秋机器学习Lab3实验报告

GitHub仓库 2020年春季学期 计算学部《机器学习》课程 Lab3 实验报告 姓名学号班号电子邮件手机号码 1 实验目的 实现一个k-means算法和混合高斯模型&#xff0c;并且用EM算法估计模型中的参数。 2 实验要求及实验环境 2.1 实验要求 测试&#xff1a;用高斯分布产生k个高…

SwiftUI——提供多种小组件(Widget)供用户选择

有时候app需要提供多种widget供用户选择/使用&#xff0c;那么可以使用以下方法&#xff0c;不过需要注意&#xff0c;每个app最多可以包含5种小组件&#xff08;Widget&#xff09;&#xff1a; 首先做几个小组件&#xff1a; //省略之前的Provider和SimpleEntey部分 //第一个…

iOS轻量级组件化管理工具,让你轻轻松松添加自己的小组件.

2019独角兽企业重金招聘Python工程师标准>>> TXRouter 轻量级组件化管理工具,让你轻轻松松添加自己的小组件.该工具原理简单、制作轻松、思路清晰等优点. TXRouter优点 比MGJRouter更加简单、使用更加方便原理简单、制作轻松、思路清晰 TXModel缺点 不能高大上定义U…

iOS14 Widget小组件开发实践1——了解Widget

iOS14带来了新的UI组件&#xff1a;WidgetKit&#xff0c;人称小组件&#xff08;用过安卓的都能理解&#xff09;&#xff0c;这货的前身其实就是iOS10时候引入的Today Extension。 Widget为应用程序提供了这样一种功能&#xff1a;其可以让用户在主屏幕上展示App中用户所关心…

如何用iOS14 Widget小组件自定义玩法

一.了解Widget iOS14带来了新的UI组件:WidgetKit,人称小组件(用过安卓的都能理解),这货的前身其实就是iOS10时候引入的Today Extension。 Widget为应用程序提供了这样一种功能:其可以让用户在主屏幕上展示App中用户所关心的信息。例如一款天气软件,其可以附带一个Widg…

iOS14 Widget开发踩坑(二)修正版-多个小组件

iOS14 Widget开发踩坑&#xff08;二&#xff09;修正版-多个小组件 前言添加多个小组件情况1.对于已经写好的一个小组件情况2.对于新建好还没写的小组件 Widgets的限制突破小组件个数限制的方法参考文献 前言 2020年12月3日 经过进一步的学习 发现了文章中还有很多错误&#…

IOS小组件(1):概述

IOS小组件(1):概述 引言小组件是什么?小组件概述小组件开发备注小组件实现原理结语引言 本系列文章作者是安卓开发,以安卓开发的视角学习IOS小组件,记录一下踩坑记录,如有讲得不对的地方,路过大佬多包涵。如果你是想深入学习小组件,建议您顺着笔者的编号顺序阅读本系列…

ios中在app应用内刷新小组件数据

需求&#xff1a; 我们需要在app应用内刷新时间线&#xff0c;让桌面小组件加载最新的内容。即app内修改了共享数据后&#xff0c;需要通知桌面小组件强制刷新&#xff0c;显示改变后的内容。 当某种情况影响到小组件的当前时间线时&#xff0c;您的 App 可以指示 WidgetKit …

android 仿苹果 小组件,仿ios14桌面小部件

仿ios14桌面小部件&#xff0c;这是一款面向广大安卓手机用户推出的高仿iOS14桌面插件软件&#xff0c;大家可以使用这款软件快速完成自己想要的桌面显示&#xff0c;多种插件一键点击轻松完成设置过程&#xff0c;让大家体验到同款iOS14桌面强大的功能&#xff0c;非常有意思的…

iOS14 小组件 开发1

前言:小组件的开发和我们正常情况开发App的逻辑是一样的,正常情况分为:网络请求,数据模型,view,渲染.只不过是小组件的开发使用了 swiftUI 语言来编写,所以要对SwiftUI的空间有所了解. 好!那我们接下来开始我们的小组件开发吧. 首先,创建Widget Extension 然后选择证书,起个名…

Android-为应用添加widget小组件

最近在实现为应用程序添加小组件的功能&#xff0c;记录一下开发过程。 1.添加一个小组件模板 设置组件类名称&#xff0c;其他属性按需求设置&#xff0c;这些属性在生成的文件中也可修改 ​​​​​​ 工程main目录下会生成类文件&#xff0c;res目录下生成资源文件&#x…

iOS 15 新增多个实用小组件

iOS 14 上线加入的桌面小组件功能非常受欢迎&#xff0c;因此苹果iOS 15新系统对小组件功能进行深度优化&#xff0c;并加入了多个实用又有趣的小组件。用户可以简单通过上下滑动来选择、重新排列、智能堆栈小组件&#xff0c;也可以对它们进行删除、智能旋转&#xff0c;还可以…

Widget小组件

目录 技能点 Widget背调 a. 设计定位 b. Widget小组件限制 c. Widget小组件 开发须知 d. 什么是 SwiftUI App Group 数据共享 a. 配置 App Groups 1、开发者账号配置&#xff0c;并更新pp证书 2、Xcode配置 b. 缓存数据共享-代码实现 1、文件存储 2. 沙盒存储&…

iOS_小组件widget基本功能

创建 在当前工程里新建target 选择Today Extension 独立应用 widget虽做为应用的扩展, 但却是两个完全独立的应用 widget上线需要单独申请 AppID 和 Bundle Identifier , 需要配置 证书 和 Provisioning Profiles(配置文件) 第三方pod导入, 也的重新导入一份 target MMWidg…

iOS 14-Widget小组件2—实现

Widget 实现 认识与配置实现效果图支持显示方式交互数据共享刷新策略网络加载屏幕适配支持多个小部件布局例子源码其他问题参考认识与配置 上一篇文章已经做了比较详细的介绍与创建配置iOS 14-Widget小组件1—初识 实现效果图 支持显示方式 @main 入口添加.supportedFamilie…

自定义开发苹果手机显示汽车小组件

实时获取汽车数据信息实时获取汽车定位信息&#xff08;点击地址进入高德&#xff09;显示当前位置的天气情况可定制显示当前城市是否限行可定制当前城市油价信息实时刷新最新数据 感兴趣的可以私聊加群

iOS 小组件 widget

苹果官网文档&#xff08;apple developer&#xff09;widgetkit 文章目录 1.创建小组件2.编辑小组件3.数据共享4.拖动排序5.参考链接 1.创建小组件 File -> New -> Target 搜索widget,点击next 勾上Include Configuration Intent, 表示需要编辑小组件&#xff0c;点击f…

iOS 小组件 widget 编辑小组件

返回小组件专栏&#xff1a;iOS 小组件 widget 文章目录 1.编辑小组件2.intentHandler 1.编辑小组件 如下图&#xff0c;编辑小组件&#xff0c;需要在GirlWidget.intentdefinition中配置 点击右下角的加号&#xff0c;新建一个枚举类型 枚举类型改名MyEnum,并添加三个值 …

iOS 小组件开发

iOS14之后Apple引入了新的WidgetKit&#xff0c;舍弃了原有额TodayExtension。 开发准备&#xff1a; 新的WidgetExtension只能通过SwiftUI进行开发&#xff1b; Widget有三种尺寸&#xff1a;systemSmall、 systemMedium、systemLarge&#xff0c;三种尺寸对应固定的UI类型布…

iOS 小组件 widget group id, app group, 数据共享

返回小组件专栏&#xff1a;iOS 小组件 widget 主APP, 小组件&#xff0c; 小组件的intent是三个独立的target, 需要有三个bundle id和对应的配置文件。而且他们的bundle identifier是从属关系。小组件的bundle id必须以主app的bundle id作为前缀。比如主app的为“com.test”&a…