我们如何在 Python 中测量 RMSE?
How can we measure RMSE in Python?
我正在使用 Kalman Filters 进行实验。我创建了一个非常小的时间序列数据,其中三列格式如下。由于我无法在 Whosebug 上附加文件,因此在此处附加了完整的数据集以实现可重复性:
time X Y
0.040662 1.041667 1
0.139757 1.760417 2
0.144357 1.190104 1
0.145341 1.047526 1
0.145401 1.011882 1
0.148465 1.002970 1
.... ..... .
我已经阅读了 Kalman Filter
的 the documetation 并设法做了一个简单的线性预测,这是我的代码
import matplotlib.pyplot as plt
from pykalman import KalmanFilter
import numpy as np
import pandas as pd
df = pd.read_csv('testdata.csv')
print(df)
pd.set_option('use_inf_as_null', True)
df.dropna(inplace=True)
X = df.drop('Y', axis=1)
y = df['Y']
estimated_value= np.array(X)
real_value = np.array(y)
measurements = np.asarray(estimated_value)
kf = KalmanFilter(n_dim_obs=1, n_dim_state=1,
transition_matrices=[1],
observation_matrices=[1],
initial_state_mean=measurements[0,1],
initial_state_covariance=1,
observation_covariance=5,
transition_covariance=1)
state_means, state_covariances = kf.filter(measurements[:,1])
state_std = np.sqrt(state_covariances[:,0])
print (state_std)
print (state_means)
print (state_covariances)
fig, ax = plt.subplots()
ax.margins(x=0, y=0.05)
plt.plot(measurements[:,0], measurements[:,1], '-r', label='Real Value Input')
plt.plot(measurements[:,0], state_means, '-b', label='Kalman-Filter')
plt.legend(loc='best')
ax.set_xlabel("Time")
ax.set_ylabel("Value")
plt.show()
输出如下图
正如我们在图中所见,模式似乎捕捉得相当好。我们如何统计测量均方根误差 (RMSE)(上图中红线和蓝线之间的误差距离)?任何帮助,将不胜感激。
试试这个!
from sklearn.metrics import mean_squared_error
mean_squared_error( measurements[:,1], state_means)
在 scikit-learn 0.22.0 中,您可以将 mean_squared_error()
参数 squared=False
传递给 return RMSE。
from sklearn.metrics import mean_squared_error
mean_squared_error(y_actual, y_predicted, squared=False)
我正在使用 Kalman Filters 进行实验。我创建了一个非常小的时间序列数据,其中三列格式如下。由于我无法在 Whosebug 上附加文件,因此在此处附加了完整的数据集以实现可重复性:
time X Y
0.040662 1.041667 1
0.139757 1.760417 2
0.144357 1.190104 1
0.145341 1.047526 1
0.145401 1.011882 1
0.148465 1.002970 1
.... ..... .
我已经阅读了 Kalman Filter
的 the documetation 并设法做了一个简单的线性预测,这是我的代码
import matplotlib.pyplot as plt
from pykalman import KalmanFilter
import numpy as np
import pandas as pd
df = pd.read_csv('testdata.csv')
print(df)
pd.set_option('use_inf_as_null', True)
df.dropna(inplace=True)
X = df.drop('Y', axis=1)
y = df['Y']
estimated_value= np.array(X)
real_value = np.array(y)
measurements = np.asarray(estimated_value)
kf = KalmanFilter(n_dim_obs=1, n_dim_state=1,
transition_matrices=[1],
observation_matrices=[1],
initial_state_mean=measurements[0,1],
initial_state_covariance=1,
observation_covariance=5,
transition_covariance=1)
state_means, state_covariances = kf.filter(measurements[:,1])
state_std = np.sqrt(state_covariances[:,0])
print (state_std)
print (state_means)
print (state_covariances)
fig, ax = plt.subplots()
ax.margins(x=0, y=0.05)
plt.plot(measurements[:,0], measurements[:,1], '-r', label='Real Value Input')
plt.plot(measurements[:,0], state_means, '-b', label='Kalman-Filter')
plt.legend(loc='best')
ax.set_xlabel("Time")
ax.set_ylabel("Value")
plt.show()
输出如下图
正如我们在图中所见,模式似乎捕捉得相当好。我们如何统计测量均方根误差 (RMSE)(上图中红线和蓝线之间的误差距离)?任何帮助,将不胜感激。
试试这个!
from sklearn.metrics import mean_squared_error
mean_squared_error( measurements[:,1], state_means)
在 scikit-learn 0.22.0 中,您可以将 mean_squared_error()
参数 squared=False
传递给 return RMSE。
from sklearn.metrics import mean_squared_error
mean_squared_error(y_actual, y_predicted, squared=False)