matlab類間散度矩陣,協方差矩陣和散布矩陣(散度矩陣)的意義

在機器學習模式識別相關算法中,經常需要求樣本的協方差矩陣C和散布矩陣S。如在PCA主成分分析中,就需要計算樣本的散度矩陣,而有的教材資料是計算協方差矩陣。實質上協方差矩陣和散度矩陣的意義就是一樣的,散布矩陣(散度矩陣)前乘以系數1/(n-1)就可以得到協方差矩陣了。

在模式識別的教程中,散布矩陣也稱為散度矩陣,有的也稱為類內離散度矩陣或者類內離差陣,用一個等式關系可表示為:

關系:散度矩陣=類內離散度矩陣=類內離差陣=協方差矩陣×(n-1)

樣本的協方差矩陣乘以n-1倍即為散布矩陣,n表示樣本的個數,散布矩陣的大小由特征維數d決定,是一個為d×d的半正定矩陣。

一、協方差矩陣的基礎

對于二維隨機變量(X,Y)之間的相互關系的數字特征,我們用協方差來描述,記為Cov(X,Y):

0818b9ca8b590ca3270a3433284dd417.png

那么二維隨機變量(X,Y)的協方差矩陣,為:

0818b9ca8b590ca3270a3433284dd417.png

對于3維隨機變量(X, Y, Z)的協方差矩陣可表示為:

0818b9ca8b590ca3270a3433284dd417.png

現實應用中,上式n表示樣本的個數,隨機變量(X, Y,Z)可以看作樣本的特征(屬性);

需要特別說明的是:

(1)協方差矩陣是一個對稱矩陣,且是半正定矩陣,主對角線是各個隨機變量的方差(各個維度上的方差)。

(2)標準差和方差一般是用來描述一維數據的;對于多維情況,而協方差是用于描述任意兩維數據之間的關系,一般用協方差矩陣來表示。因此協方差矩陣計算的是不同維度之間的協方差,而不是不同樣本之間的。

(3)協方差計算過程可簡述為:先求各個分量的均值E(Xi)和E(Xj),然后每個分量減去各自的均值得到兩條向量,在進行內積運算,然后求內積后的總和,最后把總和除以n-1。

例子:設有8個樣本數據,每個樣本有2個特征:(1,2);(3 3);(3 5);(5 4);(5 6);(6 5);(8 7);(9 8),那么可以看作二維的隨機變量(X,Y),即

X=[1 3 3 5 5 6 8 9]

Y=[2 3 5 4 6 5 7 8]

Matlab中可以使用cov(X, Y)函數計算樣本的協方差矩陣,其中X,Y都是特征向量。當然若用X表示樣本的矩陣(X中每一行表示一個樣本,每列是一個特征),那么可直接使用cov(X)計算了。

clear?all

clc

X=[1,2;3?3;3?5;5?4;5?6;6?5;8?7;9?8]%樣本矩陣:8個樣本,每個樣本2個特征

covX=?cov(X)%使用cov函數求協方差矩陣運行結果為:

covX?=

7.1429????4.8571

4.8571????4.0000當然,可以按定義計算,Matlab代碼如下:

clear?all

clc

X=[1,2;3?3;3?5;5?4;5?6;6?5;8?7;9?8]%樣本矩陣:8個樣本,每個樣本2個特征

covX=?cov(X)%使用cov函數求協方差矩陣

%%?按定義求協方差矩陣

meanX=mean(X)??????????%樣本均值

varX=var(X)????????????%樣本方差

dimNum=8;??????????????%s樣本個數ize(X,1)=8

dim1=X(:,1);???????????%特征分量1

dim2=X(:,2);???????????%而在分量2

c11=sum(?(dim1-mean(dim1))?.*?(dim1-mean(dim1))?)?/?(?dimNum-1?);

c21=sum(?(dim2-mean(dim2))?.*?(dim1-mean(dim1))?)?/?(?dimNum-1?);

c12=sum(?(dim1-mean(dim1))?.*?(dim2-mean(dim2))?)?/?(?dimNum-1?);

c22=sum(?(dim2-mean(dim2))?.*?(dim2-mean(dim2))?)?/?(?dimNum-1?);

C33=[c11,c12;c21,c22]%協方差矩陣運行結果:

varX?=

7.1429????4.0000

C33?=

7.1429????4.8571

4.8571????4.0000說明:

從中可以發現,樣本的協方差矩陣的對角線即為樣本的方差。

二、協方差矩陣的幾何意義

為了更好理解協方差矩陣的幾何意義,下面以二維正態分布圖為例(假設樣本服從二維正態分布):

0818b9ca8b590ca3270a3433284dd417.png

clear?all;clc

mu=[0,0];?????????%?均值向量

C=[5?0;0?1]???????%樣本的協方差矩陣

[V,D]?=eigs(C)????%求協方差矩陣的特征值D和特征向量V

%%?繪制二維正態分布圖

[X,Y]=meshgrid(-10:0.3:10,-10:0.3:10);%在XOY面上,產生網格數據

p=mvnpdf([X(:)?Y(:)],mu,C);%求取聯合概率密度,相當于Z軸

p=reshape(p,size(X));%將Z值對應到相應的坐標上

figure

set(gcf,'Position',get(gcf,'Position').*[1?1?1.3?1])

subplot(2,3,[1?2?4?5])

surf(X,Y,p),axis?tight,title('二維正態分布圖')

subplot(2,3,3)

surf(X,Y,p),view(2),axis?tight,title('在XOY面上的投影')

subplot(2,3,6)

surf(X,Y,p),view([0?0]),axis?tight,title('在XOZ面上的投影');

協方差矩陣C的特征值D和特征向量V分別為:

V?=

1?????0

0?????1

D?=

5?????0

0?????1

說明:

1)均值[0,0]代表正態分布的中心點,方差代表其分布的形狀。

2)協方差矩陣C的最大特征值D對應的特征向量V指向樣本分布的主軸方向。例如,最大特征值D1=5對應的特征向量V1=[1 0]T即為樣本分布的主軸方向(一般認為是數據的傳播方向)。次大特征值D2=1對應的特征向量V2=[0 1]T,即為樣本分布的短軸方向。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

協方差矩陣C的特征值D和特征向量V分別為:

V?=

0?????1

1?????0

D?=

5?????0

0?????5

說明:

1)由于協方差矩陣C具有兩個相同的特征值D1=D2=5,因此樣本在V1和V2特征向量方向的分布是等程度的,故樣本分布是一樣圓形。

2)特征值D1和D2的比值越大,數據分布形狀就越扁;當比值等于1時,此時樣本數據分布為圓形。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

協方差矩陣C的特征值D和特征向量V分別為:

V?=

0.7071???-0.7071

0.7071????0.7071

D?=

6?????0

0?????4

說明:

1)特征值的比值D1/D2=6/4=1.5>1,因此樣本數據分布形狀是扁形,數據傳播方向(樣本的主軸方向)為V1=[0.7071 0.7071]T

0818b9ca8b590ca3270a3433284dd417.png

綜合上述,可知:

(1)樣本均值決定樣本分布中心點的位置。

(2)協方差矩陣決定樣本分布的扁圓程度。

是扁還是圓,由協方差矩陣的特征值決定:當特征值D1和D2的比值為1時(D1/D2=1),則樣本分布形狀為圓形。當特征值的比值不為1時,樣本分布為扁形;

偏向方向(數據傳播方向)由特征向量決定。最大特征值對應的特征向量,總是指向數據最大方差的方向(橢圓形的主軸方向)。次大特征向量總是正交于最大特征向量(橢圓形的短軸方向)。

三、協方差矩陣的應用

協方差矩陣(散布矩陣)在模式識別中應用廣泛,最典型的應用是PCA主成分分析了,PCA主要用于降維,其意義就是將樣本數據從高維空間投影到低維空間中,并盡可能的在低維空間中表示原始數據。這就需要找到一組最合適的投影方向,使得樣本數據往低維投影后,能盡可能表征原始的數據。此時就需要樣本的協方差矩陣。PCA算法就是求出這堆樣本數據的協方差矩陣的特征值和特征向量,而協方差矩陣的特征向量的方向就是PCA需要投影的方向。

關于PCA的原理和分析,請見鄙人的博客:

《PCA主成分分析原理分析和Matlab實現方法》:http://blog.csdn.NET/guyuealian/article/details/68487833

如果你覺得該帖子幫到你,還望貴人多多支持,鄙人會再接再厲,繼續努力的~

0818b9ca8b590ca3270a3433284dd417.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533022.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533022.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533022.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

把樹分成森林 matlab,20170106RF_Matlab 隨機森林指的是利用多棵樹對樣本進行訓練并預測的一種分類器,包括兩個方面:數據的隨 269萬源代碼下載- www.pudn.com...

文件名稱: 20170106RF_Matlab下載 收藏√ [5 4 3 2 1 ]開發工具: matlab文件大小: 441 KB上傳時間: 2017-01-06下載次數: 0提 供 者: yanxiu詳細說明:隨機森林指的是利用多棵樹對樣本進行訓練并預測的一種分類器,包括兩個方面:數據的隨…

inur new.php id,Cmsez(隨易)全站系統 0day

程序名稱:Cmsez Web Content Manage System v2.0.0文件:comments.php viewimg.php代碼:---------------//commentsinclude "mainfile.php";$artnew article();//設定$confirmyes;//yes:需要管理員認證后才能顯示,no:直接顯示$membe…

PHP紅黑源碼,紅黑樹的實現源碼(第二次修訂版)

/*-----------------------------------------------------------RB-Tree的插入和刪除操作的實現算法參考資料:1) <>2) http://lxr.linux.no/linux/lib/rbtree.c作者&#xff1a;http://www.cppblog.com/converse/您可以自由的傳播&#xff0c;修改這份代碼&#xff0c;轉…

python 自動點擊上傳以后上傳文件,python使用selenium模擬點擊網頁實現自動導入上傳文件功能...

一、環境準備Python版本&#xff1a;3.4編輯器&#xff1a;Pycharmexcel文件&#xff1a;導入的excel模板二、python代碼由于工作需要&#xff0c;需要每天定時導入相關excel文件進入后臺數據庫&#xff0c;由于導入的邏輯比較復雜&#xff0c;所以決定通過python模擬登陸導入網…

php繪制頻譜圖,一步一步教你實現iOS音頻頻譜動畫(二)

本文是系列文章中的第二篇&#xff0c;上篇講述了音頻播放和頻譜數據計算&#xff0c;本篇講述數據處理和動畫的繪制。前言在上篇文章中我們已經拿到了頻譜數據&#xff0c;也知道了數組每個元素表示的是振幅&#xff0c;那這些數組元素之間有什么關系呢&#xff1f;根據FFT的原…

php刪除尾部字符,php如何刪除字符串末尾字符

我們知道字符串刪除字符的方式有好幾種&#xff0c;今天就來介紹三種php刪除字符串最后一個字符的函數&#xff0c;有需要的小伙伴可以參考一下。方法一&#xff1a;substr()函數substr()函數返回字符串的一部分。語法如下&#xff1a;substr(string string, int start, int [l…

empinfo Oracle數據庫,Oracle數據庫---包

--根據員工號或員工姓名獲取員工的信息--根據員工號或員工姓名刪除員工的信息--創建包規范CREATE OR REPLACE PACKAGE overload_pkgISFUNCTION get_info(eno NUMBER) RETURN emp%ROWTYPE;FUNCTION get_info(name VARCHAR2) RETURN emp%ROWTYPE;PROCEDURE del_emp(eno NUMBER);P…

oracle查看context,oracle context(上下文)

context在計算機領域翻譯為上下文context的信息也就是當前會話中的環境變量&#xff0c;如&#xff1a;登錄的session_id&#xff0c;用戶名&#xff0c;語言等信息查看context中的屬性信息。oracle默認的為我們創建了一個context叫userenv(user environment)SYS_CONTEXT(USERE…

oracle標量子查詢的優勢,標量子查詢

--標量子查詢select e.empno, e.ename, e.sal, e.deptno,(select d.dname from dept d where e.deptno d.deptno)as dnamefrom emp e--插入一條數據insert into emp(empno,deptno) values(9999,null)--返回結果15條記錄--改成left join(hash outer)select e.empno, e.ename, e…

切割照片php上傳,php下ajax的文件切割上傳

var myForm document.getElementById("myForm");var upfile document.getElementById("upfile");myForm.onsubmit function() {//獲取文件對象var file upfile.files[0];//獲取文件大小var fileSize file.size;//一次截取的大小(字節)var CutSize 10…

oracle插補缺失日期,Oracle連接 ORA-28001: 口令已經失效解決方法

cmd進入命令行C:UsersAdministrator>sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on 星期四 9月 24 15:19:21 2020Copyright (c) 1982, 2010, Oracle. All rights reserved.連接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Pr…

PHP 蒙太奇馬賽克拼圖,AndreaMosaic制作一幅馬賽克拼圖

大家在網上應該都見過用很多幅圖片拼成的馬賽克圖片&#xff0c;今天小編就為大家介紹AndreaMosaic制作一幅馬賽克拼圖方法&#xff0c;不會的朋友快快來學習吧&#xff01;軟件名稱&#xff1a;AndreaMosaic(蒙太奇圖片制作軟件) V6.1.0.4 中文安裝免費版軟件大小&#xff1a;…

php mongo 查詢count,[PHP] 使用PHP在mongodb中進行count查詢

原文&#xff1a;https://www.cnblogs.com/taoshihan/p/12362111.html在php7的mongodb擴展中&#xff0c;當要查詢某個集合在某個條件下的數據個數時&#xff0c;可以使用下面的方式來獲取。比原生的命令要復雜許多比舊版mongo擴展也復雜許多需要使用到MongoDB\Driver\Command …

oracle字段類型設計,Oracle字段類型設計與實際業務不符引發的問題

在Oracle表的設計過程中&#xff0c;開發人員總是對字段的類型不以為然&#xff0c;下面來演示一個例子&#xff0c;按照應該設計為number的&#xff0c;結果設計成了varcha在Oracle表的設計過程中&#xff0c;開發人員總是對字段的類型不以為然&#xff0c;下面來演示一個例子…

linux下進程監控6,Linux進程監控技術—精通軟件性能測試與LoadRunner最佳實戰(6)...

8.2.5 Linux操作系統進程監控技術Linux在進程監控方面同樣出色&#xff0c;不僅可以通過圖形用戶界面的管理工具&#xff0c;還可以用命令方式顯示進程相關信息。像“Windows的任務管理器”一樣&#xff0c;在RedHat 9中可以通過單擊“系統工具”→“系統監視器”&#xff0c;…

linux pcie命令,setpci命令_Linux setpci 命令用法詳解:查詢和配置PCI設備的使用工具...

setpci命令是一個查詢和配置PCI設備的使用工具。語法setpci(選項)(參數)選項-v&#xff1a;顯示指令執行的細節信息&#xff1b;-f&#xff1a;當沒有任何操作需要完成時&#xff0c;不顯示任何信息&#xff1b;-D&#xff1a;測試模式&#xff0c;并不真正將配置信息寫入寄存器…

linux proc文件 write的原子性,Linux命令之write調用的原子性

linux命令是對Linux系統進行管理的命令。本文介紹的關于linux命令中write調用的原子性的詳細描述&#xff0c;具體內容如下所述。UNIX環境高級編程中關于原子操作的介紹&#xff0c;其中有一種情形是在文件尾端添加數據。文中說&#xff0c;如果多個進程都需要將數據添加到某一…

linux 命令行 迅雷替代,Mac/Linux下迅雷替代方案

還記得我兩年前寫的《DIY了家用NAS》嗎&#xff1f;現在又帶來新的升級啦。當初的NAS最多能使用Transmission來進行BT下載&#xff0c;那時就在想&#xff0c;如果能下載普通的http資源就好了。再進一步&#xff0c;有什么方案可以通吃所有下載方式呢&#xff1f; 記得那個時候…

linux好用的編譯器,推薦幾款Linux下比Notepad++好的編輯器軟件

Notepad這一段又出風頭了&#xff0c;好好的做你軟件多好&#xff0c;非得參雜入政治。前兩天開源文本編輯器 Notepad 發布了 7.8.1 版本&#xff0c;然后在該版本中作者居然摸黑中國&#xff0c;具體的內容請大家自行百度。而且這已經不是 Notepad 第一次這么干了&#xff01;…

linux下調用python腳本,Linux下QT調用Python腳本的解決方案,Qt,python,一種,解決辦法

最近在做一個深度學習對圖片中對象識別效果的檢測工具&#xff0c;其主要功能就是將自己標注的圖片與識別結果圖片進行對比然后計算識別的準確等參數&#xff0c;并提供原圖與結果圖片的顯示功能。腳本主要完成識別與計算功能&#xff0c;QT完成數據的整理顯示與圖片的顯示。我…