Hola,
¿Alguien tiene una referencia sobre cómo se calcularán las distancias utilizando el punto de acceso para guardar las distancias en la tabla de datos en las siguientes situaciones?
- Analizar -> Modelado predictivo -> K vecinos más cercanos -> "Variable" como "X, Faktor" -> Aceptar -> Hotspot "Guardar distancias vecinas cercanas"
- Analizar -> Tramado -> Explorar valores atípicos -> "Variable" como "Y, columnas" -> Multivariante: K Valores atípicos del vecino más cercano -> Aceptar -> Botón "Guardar distancias NN"
¿Por qué estoy preguntando?
- Los resultados no son idénticos para ambos módulos (ver tabla de datos adjunta: "Distanz 1-4" son de 1. arriba, "Nächste 1 Distanz_OutlierModule 1-4" son de 2).
- Ninguno de estos parece calcular la distancia euclidiana (¿No debería ser el primer Vecino más cercano Distancia ser 1 para todos los valores / filas de variable)?) Parece que tiene algún cálculo de la distancia más grande y luego calcula los otros en función de su parte de proporción (0,25 como distancia 1 y 1 como distancia 4 (la más lejana desde el valor variable 1, por lo que una cuarta parte de la distancia máxima es la distancia NN guardada, mientras que yo esperaría 1,2,3,4 como distancias NN para la primera fila en la tabla de datos). Y en el módulo de modelado los valores son de alguna manera similares (para las proporciones) pero diferentes de los valores absolutos.
Vi la documentación con una referencia a: Hastie y col. ( 2009 ), Hand et al. ( 2001 ) y Shmueli et al. ( 2017 ). ( Descripción general de la plataforma de vecinos más cercanos K ), donde se menciona identifica las distancias euclidianas más pequeñas entre los valores predictores para esa observación y los valores predictores para cada una de las otras observaciones. Sin embargo, no me explica los diferentes resultados.
Aunque no está documentado, supongo que antes de calcular las distancias euclidianas, la plataforma K-Neighbors Neighbors estandarizada por (x_i - m_i) / s_i donde m_i es la media y s_i es el stddev para x_i.
Clear Globals();
x = [1,2,3,4,5];
s = Stddev(x);
m = Mean(x);
z = (x - m)/s;
n = Number(x);
dist_z = J(n, n, 0);
For(i = 1, i <= n - 1, i++,
For(j = 1, j <= n, j++,
dist_z[i, j] = dist_z[j, i] = Sqrt(Sum((z[i,0]-z[j,0])^2));
)
);
Show(dist_z);
Las siguientes entradas en Sirius dicen que las variables están estandarizadas por Q90 - Q10 en la plataforma Explorer Outliers.
https://sirius.na.sas.com/Sirius/GSTS/ShowTrack.aspx?trknum=7612927109
https://sirius.na.sas.com/Sirius/GSTS/ShowTrack.aspx?trknum=7612540893
Clear Globals();
x = [1,2,3,4,5];
n = Number(x);
q90 = Quantile(0.9, x);
q10 = Quantile(0.1, x);
mid = (q90 + q10)/2;
range = q90 - q10;
w = (x - mid)/range;
dist_w = J(n, n, 0);
For(i = 1, i <= n - 1, i++,
For(j = 1, j <= n, j++,
dist_w[i, j] = dist_w[j, i] = Sqrt(Sum((w[i,0]-w[j,0])^2));
)
);
Show(dist_w);
¡Muchas gracias! ¿Hay alguna forma de deshacer o prevenir la estandarización?