解析matlab特徵值應用指南「matlab特徵值怎麼求」

數據分析

簡介

每個數據分析都包含一些標準的活動

  • 預處理 – 考慮離群值以及缺失值,並對數據進行平滑處理以便確定可能的模型。
  • 匯總 – 計算基本的統計信息以描述數據的總體位置、規模及形狀。
  • 可視化 – 繪製數據以便確定模式和趨勢。
  • 建模 – 更全面地描述數據趨勢,以便預測新數據值。

數據分析通過這些活動,以實現兩個基本目標:

  1. 使用簡單模型來描述數據中的模式,以便實現正確預測。
  2. 了解變數之間的關係,以便構建模型。

此部分說明如何在 MATLAB® 環境中執行基本數據分析。

數據的預處理

Try This Example

此示例顯示如何預處理分析用的數據。

概述

通過將數據載入到合適的 MATLAB® 容器變數並區分「正確」數據和「錯誤」數據,開始數據分析。這是初級步驟,可確保在後續的分析過程中得出有意義的結論。

載入數據

首先載入 count.dat 中的數據:

load count.dat

這個 24×3 數組 count 包含三個十字路口(列)在一天中的每小時流量統計(行)。

缺失數據

MATLAB NaN(非數字)值通常用於表示缺失數據。通過 NaN 值,缺失數據的變數可以維護其結構體 – 在本示例中,即在所有三個十字路口中的索引都是一致的 24×1 向量。

使用 isnan 函數檢查第三個十字路口的數據是否存在 NaN 值:

c3 = count(:,3); % Data at intersection 3c3NaNCount = sum(isnan(c3))
c3NaNCount = 0

isnan 返回一個大小與 c3 相同的邏輯向量,並且通過相應條目指明數據中 24 個元素內的每個元素是存在 (1) 還是缺少 (0) NaN值。在本示例中,邏輯值總和為 0,因此數據中沒有 NaN 值。

離群值部分的數據中引入了 NaN 值。

離群值

離群值是與其餘數據中的模式明顯不同的數據值。離群值可能由計算錯誤所致,也可能表示數據的重要特點。根據對數據及數據源的了解,確定離群值並決定其處理方法。

確定離群值的一種常用方法是查找比均值

MATLAB快速入門官方說明——18.數據分析

大一定數目的標準差

MATLAB快速入門官方說明——18.數據分析

的值。下面的代碼繪製當

MATLAB快速入門官方說明——18.數據分析

= 1、2 時第三個交點的數據直方圖以及

MATLAB快速入門官方說明——18.數據分析

MATLAB快速入門官方說明——18.數據分析

+

MATLAB快速入門官方說明——18.數據分析

的直線:

bin_counts = hist(c3); % Histogram bin countsN = max(bin_counts); % Maximum bin countmu3 = mean(c3); % Data meansigma3 = std(c3); % Data standard deviationhist(c3) % Plot histogramhold onplot([mu3 mu3],[0 N],'r','LineWidth',2) % MeanX = repmat(mu3+(1:2)*sigma3,2,1);
Y = repmat([0;N],1,2);
plot(X,Y,'g','LineWidth',2) % Standard deviationslegend('Data','Mean','Stds')
hold off
MATLAB快速入門官方說明——18.數據分析

此繪圖表明某些數據比均值大兩個標準差以上。如果將這些數據標識為錯誤(而非特點),請將其替換為 NaN 值,如下所示:

outliers = (c3 - mu3) > 2*sigma3;
c3m = c3; % Copy c3 to c3mc3m(outliers) = NaN; % Add NaN values

平滑和篩選

第三個十字路口的數據時序圖(已在離群值中刪除該離群值)生成以下繪圖:

plot(c3m,'o-')
hold on
MATLAB快速入門官方說明——18.數據分析

在繪圖中,第 20 個小時的 NaN 值出現間隔。這種對 NaN 值的處理方式是 MATLAB 繪圖函數所特有的。

噪音數據圍繞預期值顯示隨機變化。您可能希望在構建模型之前對數據進行平滑處理,以便顯示其主要特點。平滑處理應當以下面兩個基本假定為基礎:

– 預測變數(時間)和響應(流量)之間的關係平穩。

– 由於已減少噪音,因此平滑演算法生成比預期值更好的估計值。

使用 MATLAB convn 函數對數據應用簡單移動平均平滑法:

span = 3; % Size of the averaging windowwindow = ones(span,1)/span;
smoothed_c3m = convn(c3m,window,'same');
h = plot(smoothed_c3m,'ro-');
legend('Data','Smoothed Data')
MATLAB快速入門官方說明——18.數據分析

使用變數 span 控制平滑範圍。當平滑窗口在數據中包含 NaN 值時,平均值計算返回 NaN 值,從而增大平滑數據中的間隔大小。

此外,還可以對平滑數據使用 filter 函數:

smoothed2_c3m = filter(window,1,c3m);
delete(h)
plot(smoothed2_c3m,'ro-','DisplayName','Smoothed Data');
MATLAB快速入門官方說明——18.數據分析

平滑數據在以上繪圖的基礎上發生了偏移。帶有 'same' 參數的 convn 返回卷積的中間部分,其長度與數據相同。filter 返回卷積的開頭,其長度與數據相同。否則演算法相同。

平滑處理可估計預測變數的每個值的響應值分布的中心。它使許多擬合演算法的基本假定無效,即預測器的每個值的錯誤彼此獨立。相應地,您可以使用平滑數據確定模型,但應避免使用平滑數據擬合模型。

匯總數據

Try This Example

此示例顯示如何匯總數據。

概述

許多 MATLAB® 函數都可以用於匯總數據樣本的總體位置、規模和形狀。

使用 MATLAB® 的一大優點是:函數處理整個數據數組,而不是僅處理單一標量值。這些函數稱為向量化函數。通過向量化可以進行有效的問題公式化(使用基於數組的數據)和有效計算(使用向量化統計函數)。

位置度量

通過定義「典型」值來匯總數據示例的位置。使用函數 meanmedianmode 計算常見位置度量或「集中趨勢」:

load count.datx1 = mean(count)
x1 =
32.0000 46.5417 65.5833
x2 = median(count)
x2 =
23.5000 36.0000 39.0000
x3 = mode(count)
x3 =
11 9 9

與所有統計函數一樣,上述 MATLAB® 函數匯總多個觀測(行)中的數據,並保留變數(列)。這些函數在一次調用中計算三個十字路口中的每個十字路口的數據位置。

規模度量

度量數據示例的規模或「離散度」有多種方法。MATLAB® 函數 maxminstdvar 計算某些常見度量:

dx1 = max(count)-min(count)
dx1 =
107 136 250
dx2 = std(count)
dx2 =
25.3703 41.4057 68.0281
dx3 = var(count)
dx3 =
1.0e+03 *
0.6437 1.7144 4.6278

與所有統計函數一樣,上述 MATLAB® 函數匯總多個觀測(行)中的數據,並保留變數(列)。這些函數在一次調用中計算三個十字路口中的每個十字路口的數據規模。

分布形狀

匯總分布的形狀比匯總分布的位置或規模更難。MATLAB® hist 函數繪製直方圖,可視化顯示匯總數據:

figure
hist(count)
legend('Intersection 1',...
'Intersection 2',...
'Intersection 3')
MATLAB快速入門官方說明——18.數據分析

參數模型提供分布形狀的匯總分析。指數分布和數據均值指定的參數 mu 非常適用於流量數據:

c1 = count(:,1); % Data at intersection 1[bin_counts,bin_locations] = hist(c1);
bin_width = bin_locations(2) - bin_locations(1);
hist_area = (bin_width)*(sum(bin_counts));
figure
hist(c1)
hold onmu1 = mean(c1);
exp_pdf = @(t)(1/mu1)*exp(-t/mu1); % Integrates
% to 1t = 0:150;
y = exp_pdf(t);
plot(t,(hist_area)*y,'r','LineWidth',2)
legend('Distribution','Exponential Fit')
MATLAB快速入門官方說明——18.數據分析

將常規參數模型與數據分布擬合的方法不在此部分的論述範圍內。Statistics and Machine Learning Toolbox™ 軟體提供用於計算分布參數的最大似然估計的函數。

可視化數據

  • 概述
  • 二維散點圖
  • 三維散點圖
  • 散點圖數組
  • 瀏覽圖形中的數據

概述

您可以使用多種 MATLAB 圖形來可視化數據模式和趨勢。此部分介紹的散點圖有助於可視化不同十字路口的流量數據之間的關係。數據瀏覽工具用於在圖形上查詢各個數據點,並與數據點進行交互。

注意

此部分繼續執行匯總數據中的數據分析。

二維散點圖

二維散點圖使用 scatter 函數創建,用於顯示前兩個十字路口的流量之間的關係:

load count.datc1 = count(:,1); % Data at intersection 1c2 = count(:,2); % Data at intersection 2figure
scatter(c1,c2,'filled')
xlabel('Intersection 1')
ylabel('Intersection 2')
MATLAB快速入門官方說明——18.數據分析

使用 cov 函數計算的

協方差計算兩個變數之間的線性關係強度(數據在散點圖中沿著最小二乘直線排列的鬆緊度):

C12 = cov([c1 c2])
C12 =
1.0e+03 *
0.6437 0.9802
0.9802 1.7144

結果以對稱的方陣形式顯示,並在第 (i, j) 個位置中顯示第 i 個和第 j 個變數的協方差。第 i 個對角線元素是第 i 個變數的方差。

協方差的缺點是:取決於度量各個變數所使用的單位。您可以將變數的協方差除以標準差,以將值歸一化為介於 +1 和 –1 之間。corrcoef 函數計算

相關係數:

R12 = corrcoef([c1 c2])
R12 =
1.0000 0.9331
0.9331 1.0000
r12 = R12(1,2) % Correlation coefficient
r12 = 0.9331
r12sq = r12^2 % Coefficient of determination
r12sq = 0.8707

由於已經過歸一化,因此相關係數的值可以方便地與其他成對的十字路口的值相比較。相關係數的平方(即

決定係數)是最小二乘直線的方差除以均值方差的結果。因此,它與響應(在本示例中為第 2 個十字路口的流量)中的方差成比例,在散點圖中,該方差已被清除,或者用最小平方直線以統計方式說明。

三維散點圖

三維散點圖使用 scatter3 函數創建,用於顯示所有三個十字路口的流量之間的關係:使用在上述步驟中創建的變數 c1c2c3

figure
c3 = count(:,3); % Data at intersection 3scatter3(c1,c2,c3,'filled')
xlabel('Intersection 1')
ylabel('Intersection 2')
zlabel('Intersection 3')
MATLAB快速入門官方說明——18.數據分析

通過使用 eig 函數計算協方差矩陣的特徵值來度量三維散點圖中的變數之間的線性關係強度。

vars = eig(cov([c1 c2 c3]))
vars =
1.0e+03 *
0.0442
0.1118
6.8300
explained = max(vars)/sum(vars)
explained = 0.9777

特徵值是基於數據的

主分量的方差。變數 explained 度量數據軸上第一個主分量說明的方差的比例。與二維散點圖的決定係數不同的是,此度量會區分預測器和響應變數。

散點圖數組

使用 plotmatrix 函數比較多對十字路口之間的關係:

figure
plotmatrix(count)
MATLAB快速入門官方說明——18.數據分析

位於數組第 (i, j) 個位置的繪圖是一個散點圖,第 i 個變數位於縱軸上,第 j 個變數位於橫軸上。第 i 個對角線位置的繪圖是第 i 個變數的直方圖。

瀏覽圖形中的數據

使用圖窗工具欄中的兩個工具,您可以通過滑鼠選取幾乎任何 MATLAB 圖形中的觀測值:

  • 數據游標
  • 數據刷亮
MATLAB快速入門官方說明——18.數據分析
MATLAB快速入門官方說明——18.數據分析

上述每個工具都會使您置於探索模式,在此模式下,您可以在圖形上選擇數據點以便確定其值,並創建工作區變數來包含特定觀測值。當使用數據刷亮時,您還可以複製、刪除或替換所選觀測值。

例如,繪製 count 的第一列和第三列的散點圖:

load count.dat
scatter(count(:,1),count(:,3))

選擇數據游標工具

MATLAB快速入門官方說明——18.數據分析

,然後點擊最右側的數據點。此時將在該處顯示說明該點的 x 和 y 值的數據提示。

MATLAB快速入門官方說明——18.數據分析

默認情況下,數據提示顯示 x、y 和 z(適用於三維繪圖)坐標。您可以將數據提示從一個數據點拖至另一個數據點以便查看新值,或者通過右鍵點擊數據提示並使用上下文菜單來添加其他數據提示。此外,還可以使用 MATLAB 代碼自定義數據提示顯示的文本。

數據刷亮是一個相關功能,用於通過點擊或拖動在圖形上高亮顯示一個或多個觀測值。要進入數據刷亮模式,請在圖窗工具欄上點擊「數據刷亮」工具

MATLAB快速入門官方說明——18.數據分析

左側。點擊此工具圖標右側的箭頭會顯示一個調色板,用於選擇刷亮觀測值所使用的顏色。此圖窗顯示的散點圖與上一圖窗相同,但超過均值一個標準差的所有觀測值(使用工具 > 數據統計信息 GUI 確定)刷亮為紅色。

scatter(count(:,1),count(:,3))
MATLAB快速入門官方說明——18.數據分析

刷亮數據觀測值之後,可以對數據觀測值執行下列運算:

  • 刪除數據觀測值。
  • 將數據觀測值替換為常量值。
  • 將數據觀測值替換為 NaN 值。
  • 將數據觀測值拖動、複製並粘貼到命令行窗口。
  • 將數據觀測值另存為工作區變數。

例如,使用「數據刷亮」上下文菜單或工具 > 刷亮 > 新建變數選項創建一個名為 count13high 的新變數。

MATLAB快速入門官方說明——18.數據分析

此時將在工作區中生成一個新變數:

count13high
count13high =
61 186
75 180
114 257

鏈接圖或數據鏈接是一個與數據刷亮緊密相關的功能。如果繪圖實時連接到所描繪的工作區數據,則此繪圖已鏈接。對於存儲在對象的 XDataYData(以及 ZData,如果適用的話)中的變數副本,當所鏈接的工作區變數發生更改或被刪除時,這些變數副本會自動更新。這會導致顯示這些副本的圖形自動更新。

通過將繪圖鏈接到變數,您可以通過觀測值的不同表示形式來跟蹤特定觀測值。當刷亮鏈接圖中的數據點時,刷亮一幅圖形會高亮顯示鏈接到相同變數的所有圖形中的相同觀測值。

數據鏈接建立圖窗和工作區變數之間的即時雙向通信,通信方式與「變數編輯器」和工作區變數之間的通信方式相同。通過在圖窗的工具欄上激活「數據鏈接」工具

MATLAB快速入門官方說明——18.數據分析

可以創建鏈接。激活此工具後,繪圖頂部會顯示下圖中顯示的「鏈接圖」信息欄(可能會遮住繪圖標題)。您可以消除此信息欄(如下圖所示),而不必取消鏈接繪圖;此信息欄不會被列印,並且不會隨圖窗一起保存。

下面兩幅圖形描繪在刷亮左側圖形中的某些觀測值之後鏈接數據的散點圖顯示。常見變數 count 將刷亮標記攜帶到右圖。即使右圖未處於數據刷亮模式,它也會顯示刷亮標記,因為它鏈接到其變數。

figure
scatter(count(:,1),count(:,2))
xlabel ('count(:,1)')
ylabel ('count(:,2)')
figure
scatter(count(:,3),count(:,2))
xlabel ('count(:,3)')
ylabel ('count(:,2)')

同左圖相比,右圖表明刷亮的觀測值線性關係更加密切。

當在「變數編輯器」中顯示這些變數時,刷亮數據觀測值以刷亮顏色高亮顯示,如此處所示:

openvar count
MATLAB快速入門官方說明——18.數據分析

在「變數編輯器」中,可以更改鏈接的繪圖數據的任何值,並且圖形將反映所做的編輯。要刷亮「變數編輯器」中的數據觀測值,請點擊其「刷亮工具」

MATLAB快速入門官方說明——18.數據分析

按鈕。如果鏈接圖當前描繪了刷亮的變數,刷亮的觀測值將在鏈接圖和「變數編輯器」中高亮顯示。當刷亮作為矩陣中的某個列的變數時,還會刷亮該行中的其他列。也即,可以刷亮行或列向量中的各觀測值,但矩陣中的所有列都會在刷亮的任何行中高亮顯示,而不是僅高亮顯示您點擊的觀測值。

數據建模

  • 概述
  • 多項式回歸
  • 一般線性回歸

概述

參數模型將對數據關係的理解轉換為具有預測能力的分析工具。對於流量數據的上升和下降趨勢,多項式模型和正弦模型是理想選擇。

多項式回歸

使用 polyfit 函數估計多項式模型的係數,然後使用 polyval 函數根據預測變數的任意值評估模型。

以下代碼使用 6 次多項式模型擬合第三個十字路口的流量數據:

load count.datc3 = count(:,3); % Data at intersection 3 tdata = (1:24)';
p_coeffs = polyfit(tdata,c3,6);
figure
plot(c3,'o-')
hold on tfit = (1:0.01:24)';
yfit = polyval(p_coeffs,tfit);
plot(tfit,yfit,'r-','LineWidth',2)
legend('Data','Polynomial Fit','Location','NW')
MATLAB快速入門官方說明——18.數據分析

此模型的優點是可以非常簡單地跟蹤升降趨勢。但是,此模型的預測能力可能有欠準確性,特別是在數據兩端。

一般線性回歸

假定數據是周期為 12 個小時的周期性數據,並且峰值出現在第 7 個小時左右,擬合以下形式的正弦模型是合理的:

y=a+bcos((2π/12)(t−7))

係數 a 和 b 呈線性關係。使用 MATLAB® mldivide(反斜杠)運算符擬合一般線性模型:

load count.datc3 = count(:,3); % Data at intersection 3 tdata = (1:24)';
X = [ones(size(tdata)) cos((2*pi/12)*(tdata-7))];
s_coeffs = Xc3;
figure
plot(c3,'o-')
hold ontfit = (1:0.01:24)';
yfit = [ones(size(tfit)) cos((2*pi/12)*(tfit-7))]*s_coeffs;
plot(tfit,yfit,'r-','LineWidth',2)
legend('Data','Sinusoidal Fit','Location','NW')
MATLAB快速入門官方說明——18.數據分析

使用 lscov 函數計算擬合時的統計信息,例如係數的估計標準誤差和均方誤差:

[s_coeffs,stdx,mse] = lscov(X,c3)
s_coeffs =
65.5833
73.2819
stdx =
8.9185
12.6127
mse = 1.9090e+03

使用周期圖(用 fft 函數計算)檢查數據周期是否假定為 12 小時:

Fs = 1; % Sample frequency (per hour)n = length(c3); % Window lengthY = fft(c3); % DFT of dataf = (0:n-1)*(Fs/n); % Frequency rangeP = Y.*conj(Y)/n; % Power of the DFTfigure
plot(f,P)
xlabel('Frequency')
ylabel('Power')
MATLAB快速入門官方說明——18.數據分析
predicted_f = 1/12
predicted_f = 0.0833

0.0833 附近的峰值證明此假定是正確的,雖然其出現頻率稍微高一點。可以依此相應調整此模型。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/281292.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-21 13:17
下一篇 2024-12-21 13:17

相關推薦

發表回復

登錄後才能評論