导航:首页 > 编程语言 > 协方差矩阵c语言代码

协方差矩阵c语言代码

发布时间:2023-05-20 04:51:29

① 协方差矩阵的计算

详解协方差与协方差矩阵
协方差的定义

对于一般的分布,如肢直接代入E(X)之类的就可以计算出来了,但真给你一个具体数值的分布,要计算协方差矩阵,根据这个公式来计算,还真不容易反应过来。网上值得参考的资料也不多,这里用冲耐一个例子说明协方差矩阵是怎么计算出来的吧。
记住,X、Y是一个列向量,它表示了每种情况下每个样本可能出现的数。比如给定

用中文来描述,就是:
协方差(i,j)=(第i列的所有元素-第i列的均值)*(第j列的所有元素-第j列的均值)
这里只有X,Y两列,所以得到的协方差矩阵是2x2的矩阵,下面分别求出每一个元素:

所以,按照定义,给定的4个二维样本的协方差矩阵为:

-0.3333 4.0000
可以看出,matlab计算协方差过程中还将元素统一缩小了3倍。所以,协方差的matlab计算公式为:
** 协方差(i,j)=(第i列所有元素-第i列均值)渣判世*(第j列所有元素-第j列均值)/(样本数-1)**

② 大学求协方差矩阵

求解协方差矩阵的一般步骤如下:

1、从样本中计算每个变量的平均值。

2、构建一个矩阵,其中每个元素都是变量之间的协方差。矩阵的对角线上是每个变量的方差,而其他元素是两个变量之间的协方差。矩阵可以表示为:

cov(X1,X1) cov(X1,X2) ... cov(X1,Xn)

cov(X2,X1) cov(X2,X2) ... cov(X2,Xn)

... ... ... ...

cov(Xn,X1) cov(Xn,X2) ... cov(Xn,Xn)

3、将矩阵的对角线上的元素替换为每个变量的方差。方差可以通过将每个变量的平方差除以 样本数得出。

4、将其他元素替换为它们对应的协方差值。协方差可以通过计算每对变量的平均值之积,再减去它们的联合平均值得出。

cov(Xi,Xj) = Σ((Xi-μi) * (Xj-μj)) / (n-1)

其中,Xi和Xj是第i个和第j个变量的取值,μi和μj分别是它们的平均值,n是样本数。Σ表示对所有样本值的求和。

3、构建一个n × n的矩阵,其中每个元素都是变量之间的协方差。

4、将矩阵的对角线上的元素替换为每个变量的方差。方差的计算公式为:

var(Xi) = Σ((Xi-μi)²) / (n-1)

其中,Xi是第i个变量的取值,μi是它的平均值,n是样本数。Σ表示对所有样本值的求和。

5、返回协方差矩阵,矩阵的对角线上是每个变量的方差,而其他元素是两个变量之间的枝迹协手搭誉方差。

③ c++实现计算图像协方差矩阵

opencv的cvCalcCovarMatrix函数是用来计算图像协方差矩阵的。

④ 求助:对于STC12C5A60S2单片机,如何用pca实现定时中断

程序说明:
y = pca(mixedsig),程序中mixedsig为 n*T 阶混合数据矩阵,n为信号个数,T为采样点数, y为 m*T 阶主分量矩阵。

程序设计步骤:
1、去均值
2、计扒数算协方差矩阵及其特征值和特征向量
3、计算协方差矩阵的特征值大于阈值的个数
4、降序排列特征值
5、去掉较小的特征值
6、去掉较大闹渗的特征值(一般没有这一步)
7、合并选择的特征值
8、选择相应的特征值和特征向量
9、计算白化矩阵
10、提取主分量

程序代码

%程序说明:y = pca(mixedsig),程序中mixedsig为 n*T 阶混合数据矩阵,n为信号个数,T为采样点数
% y为 m*T 阶主分量矩阵。

function y = pca(mixedsig)
if nargin == 0
error('You must supply the mixed data as input argument.');
end
if length(size(mixedsig))>2
error('Input data can not have more than two dimensions. ');
end
if any(any(isnan(mixedsig)))
error('Input data contains NaN''s.');
end

%——————————————去均值————————————
meanValue = mean(mixedsig')';
mixedsig = mixedsig - meanValue * ones(1,size(meanValue,2));
[Dim,NumofSampl] = size(mixedsig);
oldDimension = Dim;
fprintf('Number of signals: %d\n',Dim);
fprintf('Number of samples: %d\n',NumofSampl);
fprintf('Calculate PCA...');
firstEig = 1;
lastEig = Dim;
covarianceMatrix = cov(mixedsig',1); %计算协方差矩阵
[E,D] = eig(covarianceMatrix); %计算协方差矩阵的特征值和特征向量

%———计算协方差矩阵的特征值大于阈值的个数lastEig———
rankTolerance = 1e-5;
maxLastEig = sum(diag(D)) >rankTolerance;
lastEig = maxLastEig;

%——————————降序排列特征值——————————
eigenvalues = flipud(sort(diag(D)));

%—————————去掉较小的特征值——————————
if lastEig <oldDimension
lowerLimitValue = (eigenvalues(lastEig) + eigenvalues(lastEig + 1))/2;
else
lowerLimitValue = eigenvalues(oldDimension) - 1;
end
lowerColumns = diag(D) > lowerLimitValue;

%—————去掉较大的特征值(一般没有这一步)—液此脊—————
if firstEig > 1
higherLimitValue = (eigenvalues(firstEig - 1) + eigenvalues(firstEig))/2;
else
higherLimitValue = eigenvalues(1) + 1;
end
higherColumns = diag(D) < higherLimitValue;

%—————————合并选择的特征值——————————
selectedColumns =lowerColumns & higherColumns;

%—————————输出处理的结果信息—————————
fprintf('Selected[ %d ] dimensions.\n',sum(selectedColumns));
fprintf('Smallest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(lastEig));
fprintf('Largest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(firstEig));
fprintf('Sum of removed eigenvalue[ %g ]\n',sum(diag(D) .* (~selectedColumns)));

%———————选择相应的特征值和特征向量———————
E = selcol(E,selectedColumns);
D = selcol(selcol(D,selectedColumns)',selectedColumns);

%——————————计算白化矩阵———————————
whiteningMatrix = inv(sqrt(D)) * E';
dewhiteningMatrix = E * sqrt(D);

%——————————提取主分量————————————
y = whiteningMatrix * mixedsig;

%——————————行选择子程序———————————
function newMatrix = selcol(oldMatrix,maskVector)
if size(maskVector,1)~ = size(oldMatrix,2)
error('The mask vector and matrix are of uncompatible size.');
end
numTaken = 0;
for i = 1:size(maskVector,1)
if maskVector(i,1) == 1
takingMask(1,numTaken + 1) == i;
numTaken = numTaken + 1;
end
end
newMatrix = oldMatrix(:,takingMask);

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lillllllll/archive/2010/02/21/5315382.aspx

⑤ 谁知道“协方差矩阵”

在统计学 与 概率论中, 协方差矩阵 是一个矩阵,其每个元素是各个向量元素之间的方差。这是从标量随机变量到高维度随机向量的自然推广。

在统计学 与 概率论中, 协方差矩阵 是一个矩阵,其每个元素是各个向量元素之间的方差。这是从标量随机变量到高维度随机向量的自然推广。假设 X 是以 n 个标量随机变量组成的列向量,并且<math>\mu_k</math> 是其第k个元素的期望值, 即, <math>\裤物mu_k = \mathrm{E}(X_k)</math>, 协方差矩阵然后被定义为:

<math>
\Sigma=\mathrm{E} \left[

\left( \textbf{X} - \mathrm{E}[\textbf{X}] \right) \left( \textbf{X} - \mathrm{E}[\textbf{X}] \right)^\top
\right] </math>

<math>
= \begin{bmatrix}

\mathrm{E}[(X_1 - \mu_1)(X_1 - \mu_1)] & \mathrm{E}[(X_1 - \mu_1)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_1 - \mu_1)(X_n - \mu_n)] \\ \\ \mathrm{E}[(X_2 - \mu_2)(X_1 - \mu_1)] & \mathrm{E}[(X_2 - \mu_2)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_2 - \mu_2)(X_n - \mu_n)] \\ \\ \vdots & \vdots & \ddots & \vdots \\ \\ \mathrm{E}[(X_n - \mu_n)(X_1 - \mu_1)] & \mathrm{E}[(X_n - \mu_n)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_n - \mu_n)(X_n - \mu_n)]
\end{bmatrix} </math>

矩阵中的第<math>(i,j)</math>个元素是<math>X_i</math>与<math>X_j</math>的协方差. 这个概念是对于标量随机变量方差的一般化推广。

[编辑]术语与符号分歧
协方差矩阵有不同的术语。有些统计学家,沿用了概率学家威廉·费勒的说法,把这个矩阵称之为随机向量<math>X</math>的方差(Variance of random vector X),这是从一维随机变量方差到高维随机向量的自然推广。另外一些则把它称为协方差矩阵(Covariance matrix),因为它是随机向量里头每个标量元素的协方差的矩阵。不幸的是,这两种术语带来了一定程度上的冲突:

标准记号:

<math>
\operatorname{var}(\textbf{X}) = \mathrm{E} \left[

(\textbf{X} - \mathrm{E} [\textbf{X}]) (\textbf{X} - \mathrm{E} [\textbf{X}])^\top
\right] </math>

另 标准记号(与上边的记号不幸冲突):

<胡租液math>
\operatorname{cov}(\textbf{X}) = \mathrm{E} \left[

(\textbf{X} - \mathrm{E}[\textbf{X}]) (\textbf{X} - \mathrm{E}[\textbf{X}])^\top
\right] </math>

又 标准记型差号:

<math>
\operatorname{cov}(\textbf{X},\textbf{Y}) = \mathrm{E} \left[

(\textbf{X} - \mathrm{E}[\textbf{X}]) (\textbf{Y} - \mathrm{E}[\textbf{Y}])^\top
\right] </math> (两个随机向量的"互协方差(cross covariance)")

头两个术语彼此冲突,第一个与第三个彼此切合。第一个记号可以在威廉·费勒的广受推崇的两本概率书中找到。

[编辑]性质
<math>\Sigma=\mathrm{E} \left[ \left( \textbf{X} - \mathrm{E}[\textbf{X}] \right) \left( \textbf{X} - \mathrm{E}[\textbf{X}] \right)^\top \right]</math> 与<math> \mu = \mathrm{E}(\textbf{X})</math> 满足下边的基本性质:

<math> \Sigma = \mathrm{E}(\mathbf{X X^\top}) - \mathbf{\mu}\mathbf{\mu^\top} </math>
<math> \operatorname{var}(\mathbf{a^\top}\mathbf{X}) = \mathbf{a^\top} \operatorname{var}(\mathbf{X}) \mathbf{a} </math>
<math> \mathbf{\Sigma} \geq 0 </math>
<math> \operatorname{var}(\mathbf{A X} + \mathbf{a}) = \mathbf{A} \operatorname{var}(\mathbf{X}) \mathbf{A^\top} </math>
<math> \operatorname{cov}(\mathbf{X},\mathbf{Y}) = \operatorname{cov}(\mathbf{Y},\mathbf{X})^\top</math>
<math> \operatorname{cov}(\mathbf{X_1} + \mathbf{X_2},\mathbf{Y}) = \operatorname{cov}(\mathbf{X_1},\mathbf{Y}) + \operatorname{cov}(\mathbf{X_2}, \mathbf{Y})</math>
若 <math>p = q</math>,则有<math>\operatorname{cov}(\mathbf{X} + \mathbf{Y}) = \operatorname{var}(\mathbf{X}) + \operatorname{cov}(\mathbf{X},\mathbf{Y}) + \operatorname{cov}(\mathbf{Y}, \mathbf{X}) + \operatorname{var}(\mathbf{Y})</math>
<math>\operatorname{cov}(\mathbf{AX}, \mathbf{BX}) = \mathbf{A} \operatorname{cov}(\mathbf{X}, \mathbf{X}) \mathbf{B}^\top</math>
若<math>\mathbf{X}</math> 与<math>\mathbf{Y}</math> 是独立的,则有<math>\operatorname{cov}(\mathbf{X}, \mathbf{Y}) = 0</math>
<math> \Sigma = \Sigma^\top </math>

其中 <math>\mathbf{X}, \mathbf{X_1}</math> 与<math>\mathbf{X_2}</math> 是随机<math>\mathbf{(p \times 1)}</math>向量, <math>\mathbf{Y}</math> 是随机<math>\mathbf{(q \times 1)}</math>向量, <math>\mathbf{a}</math> 是<math>\mathbf{(p \times 1)}</math> 向量, <math>\mathbf{A}</math> 与<math>\mathbf{B}</math> 是<math>\mathbf{(p \times q)}</math> 矩阵。

尽管协方差矩阵很简单,可它却是很多领域里的非常有力的工具。它能导出一个变换矩阵,这个矩阵能使数据完全去相关(decorrelation)。从不同的角度看,也就是说能够找出一组最佳的基以紧凑的方式来表达数据。(完整的证明请参考瑞利商)。这个方法在统计学中被称为主成分分析(principal components analysis),在图像处理中称为Karhunen-Loève 变换(KL-变换)。

[编辑]复随机向量
均值为<math>\mu</math>的复随机标量变量的方差定义如下(使用共轭复数):

<math>
\operatorname{var}(z) = \operatorname{E} \left[

(z-\mu)(z-\mu)^{*}
\right] </math>

其中复数<math>z</math>的共轭记为<math>z^{*}</math>.

如果<math>Z</math> 是一个复列向量,则取其共轭转置,得到一个方阵:

<math>
\operatorname{E} \left[

(Z-\mu)(Z-\mu)^{*}
\right] </math>

其中<math>Z^{*}</math>为共轭转置, 它对于标量也成立,因为标量的转置还是标量.

[编辑]估计
多元正态分布的协方差矩阵的估计的推导非常精致. 它需要用到谱定义以及为什么把标量看做<math>1 \times 1</math>矩阵的trace更好的原因. 参见协方差矩阵的估计.

[编辑]外部连接
Covariance Matrix at Mathworldde:Kovarianzmatrix
en:Covariance matrix fr:Matrice de variance-covariance pl:Macierz kowariancji ru:Ковариационная матрица

http://define.cnki.net/define_result.aspx?searchword=%E5%8D%8F%E6%96%B9%E5%B7%AE%E7%9F%A9%E9%98%B5

⑥ 协方差矩阵怎么算

协方差矩阵的计算公式是cov(x,y)=EXY-EX*EY。

首先,缓罩我们需要了解协方差矩阵的重要性,协方差矩阵Cov(xi,xj)的每个元素表示随机变量xi和xj的协方差,对角元素等于向量本身的方差;

协方差矩阵的维数等于随机变量的数目,即每个观测值的维数,在某些情况下,1/m将出现在其前面,而不是1/(m-1);

协方差矩阵定义,按行排列数据得到的协方差矩阵不同于按行排列的数据得到的,这里,默认数据按行排列,也就是说,每一行是一个观察值(或样本),那么每一列是一个随机变量。

⑦ numpy.cov()计算协方差矩阵

矩阵中的数据按行排列与按列排列求出的协方差矩阵是不同的,这汪裤裂里默认数据是按行排列的,即每一行是一个sample,那么每一列就是一个随机变量,

协方差困闭矩阵:

numpy.cov() 计算协方差矩阵为按列计算,举纯漏个例子,

则每个维度的平均值为

将 的每一列减去平均值

其中:

计算协方差矩阵

参考

⑧ 求协方差矩阵

求协方差矩阵时饥雀,需要先确定原始数据矩阵的形状,例如是行向量、列向量或二维矩阵。如果是行向量或列向量的原始数据,则可以使用下烂段早面的公式计算出协方差矩阵:
∑ cov(X,Y) = 1/N[(x1-μx)(y1-μy)+(x2-μx)(y2-μy)+...+(xn-μx)(yn-μy)]
其中,x1, x2,..., xn表示行/列向量的元素值,燃历而 μx 和 μy 分别表示x 和 y 的均值。

阅读全文

与协方差矩阵c语言代码相关的资料

热点内容
拷贝过来的pdf文件 浏览:751
抖音小店的访客数据怎么看 浏览:670
怎么把c语言编程的字符向下移动 浏览:786
sql删除文件组代码 浏览:978
安卓post请求多重json 浏览:776
微信消除数据怎么恢复 浏览:918
小米刷机显示系统找不到指定文件 浏览:528
苹果手机小风扇图app叫什么 浏览:292
繁体中文输入工具 浏览:916
pc桌面壁纸文件夹 浏览:473
微信怎么添加群 浏览:781
40岁男人适合的微信名 浏览:925
编程里比例怎么打 浏览:215
苹果12两个app如何分屏 浏览:592
ps下载完不是压缩文件 浏览:362
电脑中的个人文件包括什么 浏览:572
网络连接一般什么密码 浏览:199
java定时器quartz实例 浏览:259
稻壳excel文件太大怎么弄 浏览:901
文件里的视频如何保存到相册 浏览:428

友情链接