RMS:平均平方根値,RMSE:平均平方根誤差,MSE:標準差,定義およびC++実装


1、平均平方根値(RMS)は、平方根、効果値とも呼ばれることがある.英語では、Root Mean Square(RMS)と書く.
米国の伝統的な辞書は、The square root of the average of squares of a set of numbersと定義されている.すなわち,N個の項の二乗和をNで割った後に二乗を開く結果,すなわち平均二乗の結果である.
#include 
#include "math.h"
using namespace std;

double calcRMS(double* Data, int Num)
{
	double fSum = 0;
	for (int i = 0; i < Num; ++i)
	{
		fSum += Data[i] * Data[i];
	}
	return sqrt(fSum/Num);
}

int main()
{
	double data[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	double a = calcRMS(data, 10);
	cout << "the rms of data is:" << a << endl;
	return 0;
}

2、平均二乗誤差は、観測値と真値の偏差の二乗と観測回数nの比の二乗であり、実際の測定では、観測回数nは常に限られている.真の値は最も信頼できる(最適な)値でしか代用できない.方根誤差は一組の測定における特大または特小誤差の反映に非常に敏感であるため,平均方根誤差は測定の精密度をよく反映することができる.平均方根誤差は,ある量に対して何度も測定を行う場合に,この測定列の真の誤差の平均方根差(真の誤差二乗の算術平均値をさらに開く)を取り,標準偏差と呼ばれ、σに表示されます.σ測定データが実際の値からずれる程度を反映し、σ小さいほど、測定精度が高いことを示すため、使用可能σこの測定過程の精度を評価する基準とする.
double calcRMSE(double* Data,double *Data2,int Num)
{
	double fSum = 0;
	for (int i = 0; i < Num; ++i)
	{
		fSum += (Data[i] - Data2[i]) *(Data[i] - Data2[i]);
	}
	return sqrt(fSum / Num);
}
int main()
{
	double dataReal[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	double dataCheck[10] = { 1.02, 2.1, 2.95, 3.98,5.1, 6.05, 7.1, 7.95, 8.98, 10.1 };
	double a = calcRMSE(dataReal,dataCheck,10);
	cout << "the rmse of dataREAL and check is:" << a << endl;
	return 0;
}

3、標準差(Standard Deviation)、標準差は分散の算術平方根であり、平均分散(mean square error)とも呼ばれ、各データが平均数から逸脱する距離の平均数であり、平均差平方和平均から離れた方根であり、σ標準差は、1つのデータセットの離散度を反映できることを示します.
double calcMSR(double* DataR,double *DataC,int Num)
{
	double fSum = 0;
	double meanValue = 0;
	for (int i = 0; i < Num; ++i)
	{
		meanValue += DataR[i];
	}
	meanValue = meanValue / Num;

	for (int i = 0; i < Num; ++i)
	{
		fSum += (DataC[i] - meanValue) *(DataC[i] - meanValue);
	}
	return sqrt(fSum / Num); //MSR
}