python - machine - scikit-learn vs tensorflow
Vecinos más cercanos en Python dada la matriz de distancia (3)
Tengo que aplicar Vecinos más cercanos en Python, y estoy buscando las scikit-learn
y scipy
, que requieren los datos como entrada, luego calcularán las distancias y aplicarán el algoritmo.
En mi caso, tuve que calcular una distancia no convencional, por lo tanto, me gustaría saber si hay una forma de alimentar directamente la matriz de distancia.
Como dice Ford y de acuerdo con la documentación http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier debes convertir tu distancia personalizada a un objeto DistanceMetric y pasar como el parámetro métrico.
Deberá crear un objeto DistanceMetric
que proporcione su propia función como argumento:
metric = sklearn.neighbors.DistanceMetric.get_metric(''pyfunc'', func=func)
De los documentos:
Aquí
func
es una función que toma dos matrices numpy unidimensionales y devuelve una distancia. Tenga en cuenta que para ser utilizado dentro del BallTree, la distancia debe ser una métrica verdadera: es decir, debe cumplir las siguientes propiedades
- No negatividad: d (x, y)> = 0
- Identidad: d (x, y) = 0 si y solo si x == y
- Simetría: d (x, y) = d (y, x)
- Desigualdad del triángulo: d (x, y) + d (y, z)> = d (x, z)
A continuación, puede crear su clasificador con metric=metric
como argumento de palabra clave y lo usará al calcular distancias.
Desea agregar a la respuesta de ford que tiene que hacer así
metric = DistanceMetric.get_metric (''pyfunc'', func = / su nombre de función /)
No puedes simplemente poner tu propia función como el segundo argumento, debes nombrar el argumento como "func"