Estoy trabajando en un proyecto de localización y utilizando una estimación de mínimos cuadrados para determinar la ubicación de un transmisor. Necesito una manera de caracterizar estadísticamente la "idoneidad" de mi solución dentro de mi programa, que podría usarse para decirme si tengo una buena respuesta, o si necesito mediciones adicionales, o si tengo datos incorrectos. He leído un poco sobre el uso del "Coeficiente de determinación" o R-cuadrado, pero no he podido encontrar ningún buen ejemplo. Cualquier idea sobre cómo caracterizar si tengo una buena solución o si necesito mediciones adicionales sería muy apreciada.Cómo caracterizar la adecuación de la estimación de Mínimos Cuadrados
Gracias!
Mi código me las siguientes salidas da,
grid_lat y grid_lon corresponden a la latitud y longitud coordenadas de la cuadrícula de posibles ubicaciones de destino
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 corresponde a lo "bueno" de una solución de cada uno el punto es Si tenemos un error de 0.0, tenemos una solución perfecta. El error de cuadrícula se calcula para cada punto de la cuadrícula en cada posición de medición (las pistas en la medición a continuación). Cada posición de medición tiene un rango estimado para el transmisor. El "error" corresponde al rango estimado para el transmisor a partir de la medición, menos el rango real calculado entre la ubicación del rango de medición y el punto de la grilla. Cuanto menor sea el error, mayor es la posibilidad que estamos cerca de la ubicación del transmisor real
# 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)
Aquí es una imagen ejemplo de ejecución del algoritmo en una cuadrícula mucho más grande. Puedo ver visualmente que tengo una solución bastante buena porque la forma converge suavemente en un único punto mínimo (la solución), pareciendo una especie de sombrero de brujas invertido.
La segunda imagen muestra todas las mediciones y ubicaciones con la solución graficada en la parte superior, y el punto mínimo como la solución (rojo x).
¿Cuál es exactamente la preocupación? Parece que respondes tu propia pregunta a través de 'grid_error'. Sus detalles y tramas son geniales, pero no sabemos cuál es su programa y cómo funciona. Solo vemos las entradas y sus salidas. –
Steve- puedo decir visualmente que tengo una buena respuesta, ves intervalos de confianza limpios alejándose de la X roja, que se relacionan directamente con el aumento del error cuadrático medio a medida que nos alejamos del punto objetivo. El desafío al que me enfrento es cómo determinar que tengo una buena solución o no programáticamente sin requerir una observación humana – Alex
Agregué un código (justo encima de la definición de grid_error) para mostrar cómo se genera la estimación de error – Alex