首页 > 其他分享 >每天进步一点点《协方差矩阵的实践》

每天进步一点点《协方差矩阵的实践》

时间:2022-12-14 16:33:54浏览次数:59  
标签:特征值 matrix 特征向量 一点点 矩阵 dataSet 协方差


详情见站内搜索 《每天进步一点点《协方差矩阵的实践》》.docx

上一次我们学习了PCA的过程,并且在最后还特意为大家介绍了协方差矩阵以及协方差矩阵的特征值和特征向量的作用。

Now , Review it Together…

1:协方差

每天进步一点点《协方差矩阵的实践》_协方差矩阵

2:协方差矩阵

每天进步一点点《协方差矩阵的实践》_协方差矩阵_02

换算成矩阵运算,假设矩阵A是M行N列,每一列是一个特征值。M是样本个数。
上述计算即为,先将每个特征均值中心化得到新的A, 再:(1/M) * AT * A。

3:协方差矩阵的意义:
它是个对称矩阵,对角线元素代表某个特征本身的方差,其他元素是某两个特征之间的协方差。因此是对称矩阵。
特征值分解后,可以得到,不同的特征向量是正交的,重根特征值对应的特征向量可以单位化和正交化变成单位正交向量。符合一般习惯,选择坐标系一般会选择一组正交的基。
且因为正交,不同维度之间是不相关的,各个维度向量之间独立。

4:协方差矩阵的特征值和特征向量有何意义?这里很关键!!!

协方差矩阵的最大的特征值对应的特征向量代表了数据分布的主要方向。次大的特征值对应的特征向量代表了数据分布的次要方向。

每天进步一点点《协方差矩阵的实践》_线性代数_03

PCA的意义:

每天进步一点点《协方差矩阵的实践》_机器学习_04

下面我们将用四个例子来说明下这个问题:

例子一:

clc;clear all;close all;
set(0,'defaultfigurecolor','w') ;
x = 0:0.5:100;
y = 80 - x + 10*rand(1, 201);
figure();
subplot(1,2, 1)
scatter(x, y, 'r', 'linewidth', 3);
xlim([0,100]);
ylim([0,100]);
axis equal;
grid on;
xlabel('heigth');
ylabel('weight');


% 形成矩阵
dataSet = [x;y]';

%步骤一:中心化处理(均值化处理)
meanVal = mean(dataSet);
dataSet(:,1) = dataSet(:,1)- meanVal(1);
dataSet(:,2) = dataSet(:,2)- meanVal(2);

%步骤二:求协方差矩阵,且是一个对称实数矩阵,那么可以将特征向量成单位正交阵,且特征值是实数。
% ====

R = dataSet' * dataSet;

%步骤三:求特征值、特征向量, 利用:eig 进行特征值分解
% ====

[V,D] = eig(R);
% [EigR,PosR] = sort(diag(D),'descend');
%VecR = V(:,PosR);


Proj = V;

% 绘制出两个转换后的新的坐标方向


x0 = -50:50;
subplot(1, 2, 2)
scatter(dataSet(:,1), dataSet(:,2), 'r', 'linewidth', 5);hold on; %打点
plot(x0, Proj(1,2)/Proj(1,1)*x0, 'b', 'linewidth', 3);hold on; %绘出投影方向
plot(x0, Proj(2,2)/Proj(2,1)*x0, 'b', 'linewidth', 3);hold on; %绘出投影方向
xlim([-50,50]);
ylim([-50,50]);
axis equal;
grid on;
xlabel('heigth');
ylabel('weight');

每天进步一点点《协方差矩阵的实践》_机器学习_05

例子二,三,四

clc;clear all;close all;
set(0,'defaultfigurecolor','w');
figure();

% 椭圆: 4*X^2 + 25*Y^2 = 100
% 首先得到椭圆的圆边方程
x = -5:0.02:5;
y = sqrt((100 - 4 * x * diag(x)) / 25);

% 根据随机数,在椭圆内,得到随机的y点值
% X轴上下各一半
% =============================================================
y1 = y * diag(rand(1, 501));
y2 = - y * diag(rand(1, 501));

%%=============================================================
% X轴上下两组数据合并,合成一个坐标集合
% =============================================================
x_src = [x,x];
y_src = [y1, y2];
matrix = [x_src; y_src]';

%%=============================================================
%%%经过某个正交矩阵变换(只旋转角度,不改变各个向量的大小,称为几何不变性质),得到一个新的坐标集合
% =============================================================

delta = 1.123
trans = [cos(delta), sin(delta);
-sin(delta), cos(delta)];
matrix_1 = matrix * trans;

%%=============================================================
%%%经过某个正交矩阵变换(只旋转角度,不改变各个向量的大小,称为几何不变性质),得到一个新的坐标集合
% =============================================================

delta = -0.8
trans = [cos(delta), sin(delta);
-sin(delta), cos(delta)];
matrix_2 = matrix * trans;


% ======= 画图 =====

matrix_list = [matrix, matrix_1, matrix_2];
for x=1:3

dataSet = matrix_list(:, 2*x-1 : 2*x);
% 画图
subplot(2, 3, x);
scatter(dataSet(:,1), dataSet(:,2), 'r', 'linewidth', 3);
xlim([-6,6]);
ylim([-6,6]);
axis equal;
grid on;
xlabel('X-alias');
ylabel('Y-alias');
end;



% =============================================================
% =============================================================
% =============================================================
% 画出协方差,特征向量的表示方向
% =============================================================

matrix_list = [matrix, matrix_1, matrix_2];
for x=1:3
%步骤一:中心化处理(均值化处理)
dataSet = matrix_list(:, 2*x-1:2*x);
meanVal = mean(dataSet);
dataSet(:,1) = dataSet(:,1)- meanVal(1);
dataSet(:,2) = dataSet(:,2)- meanVal(2);

%步骤二:求协方差矩阵,且是一个对称实数矩阵,那么可以将特征向量成单位正交阵,且特征值是实数。
R = dataSet' * dataSet;

%步骤三:求特征值、特征向量
%利用:eig 进行特征值分解
[V,D] = eig(R);
% [EigR,PosR] = sort(diag(D),'descend');
%VecR = V(:,PosR);
Proj = V;

% 绘制出两个转换后的新的坐标方向

x0 = -10:10;
subplot(2, 3, 3+x)
scatter(dataSet(:,1), dataSet(:,2), 'r', 'linewidth', 5);hold on; %打点
plot(x0, Proj(1,2)/Proj(1,1)*x0, 'b', 'linewidth', 3);hold on; %绘出投影方向
plot(x0, Proj(2,2)/Proj(2,1)*x0, 'b', 'linewidth', 3);hold on; %绘出投影方向
xlim([-6,6]);
ylim([-6,6]);
axis equal;
grid on;
xlabel('X-alias');
ylabel('Y-alias');

end;

每天进步一点点《协方差矩阵的实践》_线性代数_06

以上两个例子,都是随机画出来的点,都是由一个个的点组成,我们能看到,当对协方差矩阵进行特征值分解后,我们能得到一个新的坐标系,较大的特征值对应的特征向量代表了数据的最大的分布方向,其次是一个与之正交的向量,代表了另外个方向。
拓展到高维也是一样的,这里就用了几个二维的例子来描述了下,希望能更加清晰的认识。


标签:特征值,matrix,特征向量,一点点,矩阵,dataSet,协方差
From: https://blog.51cto.com/u_12419595/5937530

相关文章

  • 每天进步一点点《SVD用于压缩》
    详情请参考附件,站内搜索每天进步一点点《SVD用于压缩》今天给大家分享一个SVD用于数据压缩的例子。还是以图片作为距离,图片是有M*N个像素点组成的,在县线性代数中可以将......
  • 每天进步一点点《SVD学习》
    详情请见下载资源处,请搜索《每天进步一点点《SVD学习》.docx》一:一些搜罗的预备知识(搜罗的)1.1:特征值和特征向量矩阵:1)是一堆建立了某种运算时识别规则的数字2)是一列一列......
  • 矩阵中的路径
    请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。......
  • 计讯物联5G产品矩阵,构筑工业数字化发展生态
     近日,工信部印发了《工业互联网创新发展行动计划(2021-2023年)》(以下简称《计划》)。《计划》提出,实施网络体系强基行动,推进工业互联网网络互联互通工程,推动IT与OT网络深度......
  • 图论-堆-并查集-2503. 矩阵查询可获得的最大分数
    2503.矩阵查询可获得的最大分数DescriptionDifficulty:困难RelatedTopics:给你一个大小为mxn的整数矩阵grid和一个大小为k的数组queries。找出一个大小......
  • 使用MindSpore计算旋转矩阵
    本文介绍了两个不同的深度学习框架:Jax和MindSpore下的旋转矩阵的实现,对于不同的框架来说同一个功能会涉及到不同的实现方式。在Jax中,由于其函数式编程的特性,就允许......
  • 深度之眼(十一)——矩阵对角化及二次型
    文章目录​​一、相似矩阵的定义以及矩阵的对角化​​​​1.1相似矩阵的定义​​​​1.2矩阵的对角化​​​​二、矩阵对角化的条件以及对称矩阵的对角化​​​​2.1一般......
  • 机器学习新论文推荐-(成对关系约束的非负矩阵分解)
    徐亦达老师团队新发了一篇论文-RelativePairwiseRelationshipConstrainedNon-negativeMatrixFactorisation(成对关系约束的非负矩阵分解),提出了一种非负矩阵的分解算法,......
  • 今年,我只赚了一点点
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • C语言 图的遍历(广度优先和深度优先、邻接矩阵)
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>/*--------辅助广度优先遍历用的空闲单元法循环队列-----------*/#defineMaxQueuenNum20typ......