vecinos vecino pseudocodigo mas clasificador cercanos cercano algoritmo python machine-learning

python - vecino - knn algoritmo



¿Cómo puedo clasificar los datos con el algoritmo de vecino más cercano usando Python? (1)

Particularmente dada la técnica (k-Nearest Neighbors) que mencionaste en tu Q, te recomiendo scikits.learn . [ Nota : después de publicar esta Respuesta, el desarrollador principal de este Proyecto me informó sobre una nueva página de inicio para este Proyecto.]

Algunas características que creo que distinguen esta biblioteca de las otras (al menos las otras bibliotecas de Python ML que he usado, que es la mayoría de ellas):

  • una amplia biblioteca de diagnósticos y pruebas (incluidos los módulos de trazado, a través de Matplotlib) - incluye algoritmos de selección de características, matriz de confusión , ROC, recuperación de precisión, etc .;

  • una buena selección de conjuntos de datos "incluidos en baterías" (incluidos los dígitos de escritura a mano, imágenes faciales, etc.) particularmente adecuados para las técnicas ML;

  • documentación extensa (una sorpresa agradable dado que este proyecto tiene solo dos años de antigüedad), incluidos tutoriales y código de ejemplo paso a paso (que usan los conjuntos de datos suministrados);

Sin excepción (al menos eso puedo pensar en este momento) las bibliotecas de Python ML son excelentes. (Consulte el homepag de PyMVPA para obtener una lista de la docena de las bibliotecas de Python ML más populares).

En los últimos 12 meses, por ejemplo, he usado ffnet (para MLP), neurolab (también para MLP), PyBrain (Q-Learning), neurolab (MLP) y PyMVPA (SVM) (todos disponibles a partir del Índice de paquetes Python ) - Estos varían significativamente entre sí w / r / t madurez, alcance e infraestructura suministrada, pero encontré que todos son de muy alta calidad.

Aún así, el mejor de estos podría ser scikits.learn ; por ejemplo, no conozco ninguna biblioteca de Python ML, aparte de scikits.learn, que incluya cualquiera de las tres características que mencioné anteriormente (aunque algunas tienen código de ejemplo y / o tutoriales sólidos, ninguna que yo sepa integrar) estos con una biblioteca de conjuntos de datos de grado de investigación y algoritmos de diagnóstico).

En segundo lugar, dada la técnica que tiene la intención de utilizar ( vecino más cercano ), scikits.learn es una opción particularmente buena. Scikits.learn incluye algoritmos de kNN para regression (devuelve una puntuación) y classification (devuelve una etiqueta de clase), así como código de muestra detallado para cada uno.

Usar el módulo scikits.learn k-neighbor neighbor (literalmente) no podría ser más fácil:

>>> # import NumPy and the relevant scikits.learn module >>> import numpy as NP >>> from sklearn import neighbors as kNN >>> # load one of the sklearn-suppplied data sets >>> from sklearn import datasets >>> iris = datasets.load_iris() >>> # the call to load_iris() loaded both the data and the class labels, so >>> # bind each to its own variable >>> data = iris.data >>> class_labels = iris.target >>> # construct a classifier-builder by instantiating the kNN module''s primary class >>> kNN1 = kNN.NeighborsClassifier() >>> # now construct (''train'') the classifier by passing the data and class labels >>> # to the classifier-builder >>> kNN1.fit(data, class_labels) NeighborsClassifier(n_neighbors=5, leaf_size=20, algorithm=''auto'')

Además, a diferencia de casi todas las demás técnicas ML, el quid de los vecinos más cercanos no codifica un constructor clasificador funcional, sino que el paso difícil para construir un clasificador / regresor vecino más cercano a la producción es la capa de persistencia, es decir, almacenamiento y recuperación rápida de los puntos de datos de los cuales se seleccionan los vecinos más cercanos . Para la capa de almacenamiento de datos kNN, scikits.learn incluye un algoritmo para un árbol de bolas (del que no sé casi nada más que aparentemente es superior al kd-tree (la estructura de datos tradicional para k-NN) porque su rendimiento no degradarse en un espacio de características dimensionales superiores.

Además, k vecinos más cercanos requieren una métrica de similitud apropiada (la distancia euclidiana es la opción habitual, aunque no siempre la mejor). Scikits.learn incluye un módulo stand-along compuesto por varias métricas de distancia, así como algoritmos de prueba para la selección del apropiado.

Finalmente, hay algunas bibliotecas que tampoco he mencionado porque están fuera del alcance (PyML, bayesiano); no son principalmente "bibliotecas" para desarrolladores sino más bien aplicaciones para usuarios finales (por ejemplo, Orange), o tienen dependencias inusuales o difíciles de instalar (por ejemplo, mlpy, que requiere el gsl, que a su vez debe construirse desde el origen ) al menos para mi sistema operativo, que es Mac OS X.

( Nota : no soy desarrollador / committer de scikits.learn)

Necesito clasificar algunos datos con (espero) el algoritmo del vecino más cercano. Busqué en Google este problema y encontré muchas bibliotecas (incluidas PyML, mlPy y Orange), pero no estoy seguro de por dónde empezar.

¿Cómo debo implementar k-NN usando Python?