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) 的不同方法。