MATLAB 中的均方根誤差 (RMSE)


均方根誤差 (RMSE) 是一種誤差估計技術,用於計算估計值與實際值之間的差異。此方法將誤差的平均值作為單個值提供。我們可以使用 MATLAB 計算均方根誤差。為此,MATLAB 提供了各種內建函式。在本教程中,我將解釋如何在 MATLAB 中計算均方根誤差 (RMSE)。

什麼是均方根誤差 (RMSE)?

均方根誤差 (RMSE) 是一種衡量預測工具或模型誤差或準確性的方法。它是透過找到估計值和實際值之間的差異來計算的。此方法提供了一種將誤差平均值表示為單個值的方法。

在數學上,我們可以使用以下公式來計算估計值和實際值之間的均方根誤差:

$$\mathrm{RMSE \: = \: \sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_{i} \: − \:y_{i})^{2}}}$$

其中,n 是資料點的數量,$\mathrm{x_{i}}$ 是第 $\mathrm{i^{th}}$ 個數據點的預測值,$\mathrm{y_{i}}$ 是第 $\mathrm{i^{th}}$ 個數據點的實際值。

如何計算均方根誤差?

我們可以按照以下四個步驟來計算均方根誤差:

  • 步驟 1 - 計算估計/預測值與實際值之間的差值,得到它們之間的誤差。

$$\mathrm{e_{i} \: = \: x_{i} \: − \: y_{i}}$$

  • 步驟 2 - 計算誤差的平方,以消除正差或負差的影響。

$$\mathrm{誤差平方 \: = \: e_{i}^{2} }$$

  • 步驟 3 - 計算誤差平方的平均值以找到均方誤差。

$$\mathrm{MSE \: = \: \frac{\sum_{i=1}^{n} e_{i}^{2}}{n}}$$

  • 步驟 4 - 透過取 MSE 的平方根來計算均方根誤差,即

$$\mathrm{RMSE \: = \: \sqrt{MSE}}$$

均方根誤差是預測模型準確性和質量的度量。因此,如果預測模型的均方根誤差值較低,則它在效能方面是更好的模型。

如何在 MATLAB 中計算均方根誤差?

MATLAB 提供了一個內建函式“rmse”來計算均方根誤差。此函式允許我們以簡單的方式找到 RMSE 的值。此函式可以根據需要具有不同的語法格式,它們是:

  • e = rmse(F, A);

  • e = rmse(F, A, "all");

  • e = rmse(F, A, dim);

  • e = rmse(F, A, nanflag);

  • e = rmse(F, A, 'Weight', W);

在這些函式中,F 是預測或預報值的陣列,A 是實際值的陣列。

讓我們討論使用這些函式在 MATLAB 中計算均方根誤差的不同情況。

手動計算均方根誤差

在 MATLAB 中,我們可以實現均方根誤差的公式。這涉及到上面解釋的步驟的實現。

示例

以下 MATLAB 示例顯示瞭如何手動計算均方根誤差。

% MATLAB code to calculate RMSE manually
% Create matrices of sample data
A = [3, 5, 2, 1, 6];	% Actual array
F = [2, 6, 1, 2, 7];	% Predicted array

% Calculate the squared error between A and F
e = (F - A).^2;

% Calculate the mean square error
MSE = mean(e);

% Calculate the root mean square error
RMSE = sqrt(MSE);

% Display the root mean square error
disp(['Root Mean Square Error (RMSE): ', num2str(RMSE)]);

輸出

它將產生以下輸出:

Root Mean Square Error (RMSE): 1

此示例演示了使用 MATLAB 手動計算均方根誤差的方法。

現在讓我們討論使用“rmse”函式查詢均方根誤差的方法。

計算兩個資料集之間的均方根誤差

在 MATLAB 中,我們可以使用“rmse(F, A)”函式來計算兩個資料集之間的均方根誤差。

示例

讓我們藉助一個示例來了解這種查詢均方根誤差的方法。

% MATLAB code to calculate RMSE between two datasets
% Create arrays of sample data
F = [5, 3, 9, 2, 8];	% Predicted array
A = [6, 2, 8, 3, 9];	% Actual array

% Calculate the root mean square error
e = rmse(F, A);

% Display the root mean square error
disp(['Root Mean Square Error (RMSE): ', num2str(e)]);

輸出

它將產生以下輸出:

Root Mean Square Error (RMSE): 1

程式碼說明 - 在此示例中,首先我們將實際值和預測值的陣列分別作為“A”和“F”輸入。然後,我們使用“rmse(F, A)”函式計算均方根誤差並將結果儲存在變數“e”中。最後,我們使用“disp”函式顯示結果。

計算所有元素的均方根誤差

在 MATLAB 中,我們可以使用“rmse(F, A, "all")"函式來計算陣列 F 和 A 中所有元素的均方根誤差。

示例

讓我們舉一個例子來理解這種在 MATLAB 中計算 RMSE 的方法。

% MATLAB code to calculate RMSE for all elements
% Create arrays of sample data
F = [6, 4, 7, 1, 3];	% Predicted array
A = [7, 1, 4, 4, 1];	% Actual array

% Calculate the root mean square error for all elements
e = rmse(F, A, "all");

% Display the root mean square error
disp(['Root Mean Square Error (RMSE): ', num2str(e)]);

輸出

它將產生以下輸出:

Root Mean Square Error (RMSE): 2.5298

程式碼說明 - 在此示例中,程式碼實現類似於前面的示例。在這裡,我們指定了“all”選項來計算陣列 A 和 F 所有元素的均方根誤差。

沿指定維度計算均方根誤差

在 MATLAB 中,我們還可以使用“rmse()”函式沿實際值和預測值陣列的指定維度計算均方根誤差。為此,使用“rmse()”函式的以下語法:

e = rmse(F, A, dim);

在這裡,我們將 dim 設定為 1 以沿列計算均方根誤差,並將 dim 設定為 2 以沿行計算誤差。

示例

讓我們藉助 MATLAB 中的一個示例來了解此函式。

% MATLAB code to calculate RMSE along specified dimension
% Create arrays of sample data
F = [6, 4; 7, 3; 3, 1];	% Predicted array
A = [4, 1; 2, 5; 4, 1];	% Actual array

% Calculate the root mean square error along specified dimensions
e1 = rmse(F, A, 1);	% Calculating along columns
e2 = rmse(F, A, 2);	% Calculating along rows

% Display the root mean square errors
disp('Root Mean Square Error (RMSE) along Rows: ');
disp(e1);
disp('Root Mean Square Error (RMSE) along Columns: ');
disp(e2);

輸出

它將產生以下輸出:

Root Mean Square Error (RMSE) along Rows: 
    3.1623    2.0817
Root Mean Square Error (RMSE) along Columns: 
    2.5495
    3.8079
    0.7071

程式碼說明 - 在此示例中,我演示了沿陣列 A 和 F 的行和列計算均方根誤差的方法。

計算包含 NaN 值的陣列之間的均方根誤差

MATLAB 還提供了一種在計算均方根誤差時處理資料中 NaN(非數字)值的方法。為此,我們使用“rsme”函式的以下語法:

e = rmse(F, A, nanflag);

在此函式中,如果 nanflag = omitnan,則在計算均方根誤差時將排除 NaN 值。如果 nanflag = includenan,則 NaN 值將包含在計算中。

示例

讓我們看一個示例來了解此函式的工作原理。

% MATLAB code to calculate RMSE with NaN values
% Create arrays of sample data
F = [6, 4, NaN, 3, 5, 1];	% Predicted array
A = [4, 2, 1, 5, 4, 1];	% Actual array

% Calculate the root mean square error with nanflag
e1 = rmse(F, A, 'omitnan');	% Calculating with omitnan
e2 = rmse(F, A, 'includenan');	% Calculating with includenan

% Display the root mean square errors
disp('Root Mean Square Error (RMSE) with Excluded NaN Values: ');
disp(e1);
disp('Root Mean Square Error (RMSE) with Included NaN Values: ');
disp(e2);

輸出

它將產生以下輸出:

Root Mean Square Error (RMSE) with Excluded NaN Values: 
   1.6125
Root Mean Square Error (RMSE) with Included NaN Values: 
   NaN

程式碼說明 - 此程式的程式碼實現與之前相同。此示例顯示了當陣列 F 和 A 包含 NaN 值時,如何在 MATLAB 中計算均方根誤差。

計算包含權重的均方根誤差

我們還可以使用“rmse()”函式來計算在計算中包含權重的均方根誤差。為此,我們使用“rmse()”函式的以下語法:

e = rmse(F, A, 'Weight', W);

這裡,“W”是權重向量。

示例

讓我們看看在 MATLAB 程式設計中使用此函式來計算均方根誤差。

% MATLAB code to calculate RMSE with inclusion of weights
% Create arrays of sample data
F = [6, 4, 7, 3, 5, 1];	% Predicted array
A = [4, 2, 1, 5, 4, 1];	% Actual array
W = [0.5, 0.1, 0.2, 0.1, 0.2, 0.1];	% Weight array

% Calculate the root mean square error
e = rmse(F, A, 'Weight', W);

% Display the root mean square error
disp('Root Mean Square Error (RMSE) with Inclusion of Weights: ');
disp(e);

輸出

它將產生以下輸出:

Root Mean Square Error (RMSE) with Inclusion of Weights:
   2.9155

程式碼說明 - 在此示例中,我們使用了第三個包含我們希望包含在均方根誤差中的權重的向量。在“rmse”函式中,我們透過指定“Weight”選項使用了此權重向量“W”。

結論

總之,均方根誤差是一個表示實際值與估計值之間差異的值。我們可以使用手動方法或 MATLAB 中的內建函式來計算均方根誤差。

用於在 MATLAB 中計算均方根值的內建函式是“rmse()”。此函式將預測值和實際值的陣列作為輸入,然後給出這兩個陣列之間的均方根誤差的單個值。在本教程中,我透過示例解釋了使用 MATLAB 計算均方根誤差 (RMSE) 的不同方法。

更新於: 2023-10-26

526 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告