Подтвердить что ты не робот

Как я могу классифицировать данные с помощью алгоритма ближайшего соседа с помощью Python?

Мне нужно классифицировать некоторые данные с помощью алгоритма (надеюсь) ближайшего соседа. Я искал эту проблему и нашел много библиотек (включая PyML, mlPy и Orange), но я не уверен, где начать здесь.

Как мне начать реализацию k-NN с помощью Python?

4b9b3361

Ответ 1

В частности, учитывая технику (k-Nearest Neighbors), которую вы упомянули в своем Q, я настоятельно рекомендую scikits.learn. [Примечание: после публикации этого ответа ведущий разработчик этого проекта сообщил мне о новой странице для этого проекта.]

Несколько функций, которые, как я полагаю, отличает эту библиотеку от других (по крайней мере, другие библиотеки DLL Python, которые я использовал, и большинство из них):

  • обширная библиотека диагностики и тестирования (включая построение графика модули через Matplotlib) - включает в себя алгоритмы выбора функций, матрица путаницы, ROC, точность отзыва и т.д.

  • хороший выбор наборов данных с включенными "батареями" (включая рукописные цифры, лицевые изображения и т.д.), особенно подходящие для методов ML;

  • обширная документация (приятный сюрприз, учитывая, что этот проект только около двух лет), включая учебники и пошаговые инструкции пример кода (который использует предоставленные наборы данных);

Без исключения (по крайней мере, я могу думать в данный момент) библиотеки библиотек python ML превосходны. (См. PyMVPA homepag e для списка дюжины или около того самых популярных библиотек ML на python.)

В последние 12 месяцев, например, я использовал ffnet (для MLP), neurolab (также для MLP), PyBrain (Q-Learning), neurolab (MLP) и PyMVPA (SVM) (все доступные из Python Package Index) - они значительно отличаются друг от друга зрелостью, областью и поставляемой инфраструктурой, но я нашел, что все они имеют очень высокое качество.

Тем не менее, лучшим из них может быть scikits.learn; например, я не знаю о какой-либо библиотеке ML python, кроме scikits.learn, которая включает в себя любую из трех функций, упомянутых выше (хотя некоторые из них имеют надежный примерный код и/или учебные пособия, ни один из которых я не знаю об интеграции с библиотекой исследовательских наборов данных и диагностическими алгоритмами).

Во-вторых, учитывая технику, которую вы собираетесь использовать (k-ближайший сосед) scikits.learn, является особенно хорошим выбором. Scikits.learn включает алгоритмы kNN для regression (возвращает оценку) и классификацию (возвращает класс метка), а также подробный пример кода для каждого.

Использование модуля scikits.learn k-ближайшего соседа (буквально) не может быть проще:

>>> # 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 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')

Что еще, в отличие от почти всех других методов ML, суть ближайших соседей k не кодирует строитель рабочего классификатора, а сложный шаг в построении k-ближайшего соседнего классификатора/регрессионного класса является постоянным уровнем - - хранение, быстрое извлечение точек данных, из которых выбираются ближайшие соседи. Для слоя хранения данных kNN scikits.learn содержит алгоритм для шарового дерева (который я почти ничего не знаю о других, чем, по-видимому, превосходит kd-дерево (традиционная структура данных для k-NN), поскольку его производительность не ухудшается в пространстве с более высокой размерностью.

Кроме того, k-ближайшим соседям требуется соответствующая метрика подобия (евклидово расстояние является обычным выбором, хотя и не всегда лучшим). Scikits.learn включает в себя модуль подставки, состоящий из различных показателей расстояния, а также алгоритмы тестирования для выбора подходящего.

Наконец, есть несколько библиотек, о которых я не упоминал ни потому, что они выходят за рамки (PyML, Bayesian); они не являются прежде всего "библиотеками" для разработчиков, а скорее приложениями для конечных пользователей (например, Orange) или имеют необычные или трудно устанавливаемые зависимости (например, mlpy, для чего требуется gsl, который, в свою очередь, должен быть построен из источника ) по крайней мере для моей ОС, которая является Mac OS X.

(Примечание: я не разработчик/коммиттер для scikits.learn.)