我正在进行本地化项目,并使用最小二乘估计来确定发射器的位置。我需要一种统计特征“适合度”的方法,以在程序中确定我的解决方案是否良好,这可以用于告诉我是否有一个好答案,或者我需要额外的测量数据,或者有坏数据。我已经阅读了关于使用“决定系数”或R平方的文章,但是没有找到任何好的例子。如果你有关于如何表征是否有好的解决方案,或需要额外的测量的任何想法,将不胜感激。
谢谢!
我的代码给出以下输出,
grid_lat和grid_lon对应于可能目标位置的纬度和经度坐标网格。
谢谢!
我的代码给出以下输出,
grid_lat和grid_lon对应于可能目标位置的纬度和经度坐标网格。
grid_lat = [[ 38.16755799 38.16755799 38.16755799 38.16755799 38.16755799
38.16755799]
[ 38.17717199 38.17717199 38.17717199 38.17717199 38.17717199
38.17717199]
[ 38.186786 38.186786 38.186786 38.186786 38.186786 38.186786 ]
[ 38.1964 38.1964 38.1964 38.1964 38.1964 38.1964 ]
[ 38.20601401 38.20601401 38.20601401 38.20601401 38.20601401
38.20601401]
[ 38.21562801 38.21562801 38.21562801 38.21562801 38.21562801
38.21562801]
[ 38.22524202 38.22524202 38.22524202 38.22524202 38.22524202
38.22524202]]
grid_lon = [[-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233
-75.79807588]
[-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233
-75.79807588]
[-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233
-75.79807588]
[-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233
-75.79807588]
[-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233
-75.79807588]
[-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233
-75.79807588]
[-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233
-75.79807588]]
grid_error对应于每个点的“好”解决方案程度。 如果我们的误差为0.0,则我们有一个完美的解决方案。 对于网格上的每个点,都要计算Grid Error到每个测量位置(下面的测量中的轨道)的距离。 每个测量位置都有一个到发射器的估计范围。 “误差”对应于从测量中到发射器的估计范围减去测量范围位置和网格点之间计算出的实际范围。 误差越低,我们靠近实际发射器位置的机会就越大。
# Calculate distance between every grid point and every measurement in meters
measured_distance = spatial.distance.cdist(grid_ecef_array, measurement_ecef_array, 'euclidean')
measurement_error = [pow((measurement - estimated_distance),2) for measurement in measured_distance]
mean_squared_error = [numpy.sqrt(numpy.mean(measurement)) for measurement in measurement_error]
# Find minimum solution
# Convert array of mean_squared_errors to 2D grid for graphing
N3, N4 = numpy.array(grid_lon).shape
grid_error = numpy.array(mean_squared_error).reshape((N3, N4))
grid_error = [[ 2.33608445 2.02805063 1.85638288 1.84620283 2.02757163 2.38035108]
[ 1.73675429 1.40649524 1.21799211 1.06503271 1.27373554 1.74265406]
[ 1.44967789 0.96835022 0.62667257 0.52804942 0.91189678 1.50067864]
[ 1.70155286 1.24024402 0.9642869 1.00517531 1.32606411 1.81754752]
[ 2.40218247 2.07449106 1.91044903 1.94272889 2.15511638 2.51683715]
[ 3.29679348 3.05353929 2.93662134 2.95839307 3.11583615 3.39320682]
[ 4.27303679 4.08195869 3.99203754 4.00926823 4.13247105 4.35378011]]
# Generate the 3D plot with the Z coordinate being the mean squared error estimate
plot3Dcoordinates(grid_lon, grid_lat, grid_error)
# Generic function using matplotlib to plot coordinates
def plot3Dcoordinates(X, Y, Z):
fig = plt.figure()
ax = Axes3D(fig)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet,
linewidth=0, antialiased=False)
fig.colorbar(surf, shrink=0.5, aspect=5)
这里是在一个更大的网格上处理算法的示例图像。从视觉上看,我可以判断我有一个相当不错的解决方案,因为形状平滑地收敛到单一的最小点(解决方案),看起来有点像倒置的巫师帽。
![enter image description here](https://istack.dev59.com/RtiSg.webp)
第二张图片显示了所有的测量和位置,并在其上绘制了解决方案,最小点作为解决方案(红色x)。
![enter image description here](https://istack.dev59.com/vC3XQ.webp)
grid_error
,你似乎已经回答了自己的问题。你提供的细节和图表很棒,但我们不知道你的程序是什么以及它是如何工作的。我们只看到输入和输出。 - Steve Tjoa