PAC和白化练习之处理二维数据

在很多情况下,我们要处理的数据的维度很高,需要提取主要的特征进行分析这就是PAC(主成分分析),白化是为了减少各个特征之间的冗余,因为在许多自然数据中,各个特征之间往往存在着一种关联,为了减少特征之间的关联,需要用到所谓的白化(whitening).

首先下载数据pcaData.rar,下面要对这里面包含的45个2维样本点进行PAC和白化处理,数据中每一列代表一个样本点。

第一步 画出原始数据:

第二步:执行PCA,找到数据变化最大的方向:

第三步:将原始数据投射到上面找的两个方向上:

第四步:降维,此例中把数据由2维降维到1维,画出降维后的数据:

第五步:PCA白化处理:

第六步:ZCA白化处理:

下面是程序matlab源代码:

  1 close all;clear all;clc;
  2
  3 %%================================================================
  4 %% Step 0: Load data
  5 %  We have provided the code to load data from pcaData.txt into x.
  6 %  x is a 2 * 45 matrix, where the kth column x(:,k) corresponds to
  7 %  the kth data point.Here we provide the code to load natural image data into x.
  8 %  You do not need to change the code below.
  9
 10 x = load(‘pcaData.txt‘,‘-ascii‘);
 11 figure(1);
 12 scatter(x(1, :), x(2, :));
 13 title(‘Raw data‘);
 14
 15
 16 %%================================================================
 17 %% Step 1a: Implement PCA to obtain U
 18 %  Implement PCA to obtain the rotation matrix U, which is the eigenbasis
 19 %  sigma.
 20
 21 % -------------------- YOUR CODE HERE --------------------
 22 u = zeros(size(x, 1)); % You need to compute this
 23
 24 sigma = x * x‘/ size(x, 2);
 25 [u,S,V] = svd(sigma);
 26
 27
 28
 29 % --------------------------------------------------------
 30 hold on
 31 plot([0 u(1,1)], [0 u(2,1)]);
 32 plot([0 u(1,2)], [0 u(2,2)]);
 33 scatter(x(1, :), x(2, :));
 34 hold off
 35
 36 %%================================================================
 37 %% Step 1b: Compute xRot, the projection on to the eigenbasis
 38 %  Now, compute xRot by projecting the data on to the basis defined
 39 %  by U. Visualize the points by performing a scatter plot.
 40
 41 % -------------------- YOUR CODE HERE --------------------
 42 xRot = zeros(size(x)); % You need to compute this
 43 xRot = u‘ * x;
 44
 45 % --------------------------------------------------------
 46
 47 % Visualise the covariance matrix. You should see a line across the
 48 % diagonal against a blue background.
 49 figure(2);
 50 scatter(xRot(1, :), xRot(2, :));
 51 title(‘xRot‘);
 52
 53 %%================================================================
 54 %% Step 2: Reduce the number of dimensions from 2 to 1.
 55 %  Compute xRot again (this time projecting to 1 dimension).
 56 %  Then, compute xHat by projecting the xRot back onto the original axes
 57 %  to see the effect of dimension reduction
 58
 59 % -------------------- YOUR CODE HERE --------------------
 60 k = 1; % Use k = 1 and project the data onto the first eigenbasis
 61 xHat = zeros(size(x)); % You need to compute this
 62 z = u(:, 1:k)‘ * x;
 63 xHat = u(:,1:k) * z;
 64
 65 % --------------------------------------------------------
 66 figure(3);
 67 scatter(xHat(1, :), xHat(2, :));
 68 title(‘xHat‘);
 69
 70
 71 %%================================================================
 72 %% Step 3: PCA Whitening
 73 %  Complute xPCAWhite and plot the results.
 74
 75 epsilon = 1e-5;
 76 % -------------------- YOUR CODE HERE --------------------
 77 xPCAWhite = zeros(size(x)); % You need to compute this
 78
 79 xPCAWhite = diag(1 ./ sqrt(diag(S) + epsilon)) * xRot;
 80
 81
 82
 83 % --------------------------------------------------------
 84 figure(4);
 85 scatter(xPCAWhite(1, :), xPCAWhite(2, :));
 86 title(‘xPCAWhite‘);
 87
 88 %%================================================================
 89 %% Step 3: ZCA Whitening
 90 %  Complute xZCAWhite and plot the results.
 91
 92 % -------------------- YOUR CODE HERE --------------------
 93 xZCAWhite = zeros(size(x)); % You need to compute this
 94
 95 xZCAWhite = u * xPCAWhite;
 96 % --------------------------------------------------------
 97 figure(5);
 98 scatter(xZCAWhite(1, :), xZCAWhite(2, :));
 99 title(‘xZCAWhite‘);
100
101 %% Congratulations! When you have reached this point, you are done!
102 %  You can now move onto the next PCA exercise. :)
时间: 2024-10-20 05:37:42

PAC和白化练习之处理二维数据的相关文章

二维数据名作形参

之前帮同学调一个程序的时候遇到的,把二维数据改为全局变量,不通过参数传递就没问题了,否则程序崩溃. 细究一下,二维数据名用于形参时需要注意哪些方面. 测试程序如下: #include<stdio.h> #include<stdlib.h> void print1(int **a, int m, int n); void print2(int (*a)[2], int m, int n); int main() { int a[2][2]={1,2,3,4}; print1((int

对二维数据进行边界拓展

对二维数据处理的时候,经常遇到需要越界的问题,比如对图像进行滤波操作.对原始数据的边界进行拓展,然后使用拓展后的数据作处理,可以解决越界的问题.根据拓展出的数据的值来自哪里可以分为多种边界拓展方式,我们要实现的是将边界进行奇对称拓展. 算法 举例说明什么是奇拓展.比如对原始二维数据向左拓展4列,那么在边界上向左第一列复制边界上向右第一列,在边界上向左第二列复制边界上向右第二列,以此类推.边界列并没有被复制,因为C语言中是从0开始计数的,所以边界列是0列,按照0列对称拓展就称为奇对称拓展.如果0列

【Excle数据透视】二维数据如何创建数据透视表

二维数据在创建数据透视表的时候,可能会给你带来一些麻烦,没法创建,会丢失维度,那怎么办呢? 解决办法:使用数据透视表和数据透视图向导即可创建 步骤1 按下[Alt+D+P],出现如下界面 选择上图中的"多重合并计算数据区域"→下一步 创建单页字段→下一步 选定区域A:A15→添加→下一步 单击完成 数据透视表已经创建完成.二维数据透视表与一维数据透视表在于"行合计" 注意:我上图的数据透视是使用默认计数,所以全部都是1,这个可以根据自己的需求进行调整.

PHP二维数据排序,二维数据模糊查询

一.因为项目中的一个报表需要合并三个表的数据,所以分表查询再合并数据,利用PHP数组函数进行排序,搜索.三表合并后的数组结构如下: Array ( [0] => Array ( [history_id] => 12 [sla_group_id] => 1 [sla_id] => -1 [create_time] => 1513057695 [tasklog_id] => 12 [tasklog_time] => 2017-12-12 13:48:15 [taskl

TensorflowTutorial_二维数据构造简单CNN

使用二维数据构造简单卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 图像和一些时序数据集都可以用二维数据的形式表现,我们此次使用随机分布的二位数据构造一个简单的CNN-网络卷积-最大池化-全连接 参考代码 # Implementing Different Layers # --------------------------------------- # # We will illustrate how to use different types # of layers

一维数据和二维数据

此文章为本人学习所得,如有不足之处,欢迎指正,分享原创,一起进步 维度:数据的组织形式 一维数据 由对等关系的有序或无序数据构成,采用线性方式(一条直线排开)组织 对等关系:这些数据平级关系(不是包含.从属关系) 一维数据的表示----- 如果数据间有序:使用列表类型.如:一维列表ls = [3.1 , 3.02 , 4.15]如果数据间无序:使用集合类型,如:一维集合st ={ 4.15 , 3.02 , 3.1} 切记:for循环可以遍历数据,进而对每个数据进行处理 一维数据的存储-----

python第七周,二维数据的格式化和处理

二维数据的表示: 类表类型可以表示二维数据 [   [424,23423,2342],[131,535,3646]  ] 使用两层for循环可以便利每个元素 外层列表中每个元素可以对应一行,也可以对应一列 一维数据分为列表和集合类型,二维数据只有列表类型 CSV数据存储格式 国际通用的一二维数据存储格式,一般.csv扩展名,每行一个一维数据,采用逗号分隔,无空行 Excel软件可读入输出,一般编辑软件都可以产生,如果某个元素缺失,逗号仍要保留, 二维数据的表头可以作为数据存储,也可以另行存储,

关于二维数据中的一维指针作为函数参数和返回值

问题描述: 1 假定定义了一个二维数组用来存放多条(总20条)数据,每条数据长度为10,uchar message[20][10] 2 要将外部来的一条数据存放到缓冲区指定位置(入口参数 uchar *p,数据的开始地址) 3 要从缓冲区读出一条记录,将其输出(出口参数 uchar *p,数据的开始地址). 那么该怎么写2个函数的形参/return值/返回值类型 答案: void sendbuf(uchar a[10]) { ...将a[0]~a[9]的值拷贝到指定缓冲区buf[i][0~9]

php对二维数据进行排序

PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义. 方法一:(经验证,成功) 作用:对二维数组进行指定key排序 参数:$arr 二维数组 ,$shortKey 需要排序的列,$short 排序方式 $shortType 排序类型 function multi_array_sort($arr,$shortKey,$short=SORT_DESC,$shortType=SORT_REGULAR) { foreach ($arr as