scikit - python k nearest neighbor classifier
Implementa el clasificador K Neighbors en scikit-learn con 3 funciones por objeto (1)
Su primer segmento de código define un clasificador en datos 1d
.
X
representa los vectores de características.
[0] is the feature vector of the first data example
[1] is the feature vector of the second data example
....
[[0],[1],[2],[3]] is a list of all data examples,
each example has only 1 feature.
y
representa las etiquetas.
Debajo del gráfico se muestra la idea:
- Los nodos verdes son datos con la etiqueta 0
- Los nodos rojos son datos con la etiqueta 1
- Los nodos grises son datos con etiquetas desconocidas.
print(neigh.predict([[1.1]]))
Esto le pide al clasificador que prediga una etiqueta para x=1.1
.
print(neigh.predict_proba([[0.9]]))
Esto le pide al clasificador que proporcione una estimación de probabilidad de membresía para cada etiqueta.
Debido a que ambos nodos grises se encuentran más cerca del verde, los resultados debajo de la salida tienen sentido.
[0] # green label
[[ 0.66666667 0.33333333]] # green label has greater probability
El segundo segmento de código tiene buenas instrucciones en scikit-learn
:
En el siguiente ejemplo, construimos una clase NeighborsClassifier a partir de una matriz que representa nuestro conjunto de datos y preguntamos quién es el punto más cercano a [1,1,1]
>>> samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]] >>> from sklearn.neighbors import NearestNeighbors >>> neigh = NearestNeighbors(n_neighbors=1) >>> neigh.fit(samples) NearestNeighbors(algorithm=''auto'', leaf_size=30, ...) >>> print(neigh.kneighbors([1., 1., 1.])) (array([[ 0.5]]), array([[2]]...))
No hay un valor objetivo aquí porque esta es solo una clase NearestNeighbors
, no es un clasificador, por lo tanto, no se necesitan etiquetas.
Para su propio problema:
Como necesita un clasificador, debe recurrir a KNeighborsClassifier
si desea utilizar el enfoque KNN
. Es posible que desee construir su vector de características X
y la etiqueta y
siguiente manera:
X = [ [h1, e1, s1],
[h2, e2, s2],
...
]
y = [label1, label2, ..., ]
Me gustaría implementar un KNeighborsClassifier con el módulo scikit-learn ( http://scikit-learn.org/dev/modules/generated/sklearn.neighbors.KNeighborsClassifier.html )
Recupero de mi imagen las características de solidez, elongación y Humoments. ¿Cómo puedo preparar estos datos para entrenamiento y validación? Debo crear una lista con las 3 funciones [Hm, e, s] para cada objeto que recuperé de mis imágenes (de 1 imagen tienen más objetos)?
Leí este ejemplo ( http://scikit-learn.org/dev/modules/generated/sklearn.neighbors.KNeighborsClassifier.html ):
X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(X, y)
print(neigh.predict([[1.1]]))
print(neigh.predict_proba([[0.9]]))
X e y son 2 características?
samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=1)
neigh.fit(samples)
print(neigh.kneighbors([1., 1., 1.]))
¿Por qué en el primer ejemplo usa X e y y muestra?