KNN (Классификация правила ближайшего соседа)

машинное обучение
KNN (Классификация правила ближайшего соседа)

Это 3-й день моего участия в ноябрьском испытании обновлений, узнайте подробности события:Вызов последнего обновления 2021 г.

Алгоритм KNN больше подходит для автоматической классификации домена класса с относительно большим размером выборки. Основная идея алгоритма KNN заключается в том, что если большинство из K ближайших соседей выборки в пространстве признаков принадлежат к определенной категории, то выборка также принадлежит к этой категории и имеет характеристики выборок этой категории.

Во-первых, реализация идеи

1. Рассчитайте расстояние между неизвестным экземпляром класса и всеми известными экземплярами класса.

2. Установите параметр k и выберите ближайший известный экземпляр класса среди k неизвестных экземпляров класса.

3. Подсчитайте количество каждой категории в k экземплярах известной категории, и категория с наибольшим числом является категорией текущего экземпляра неизвестной категории.

(1) Формула расчета расстояния

Важной проблемой в алгоритме KNN является вычисление расстояния между образцами.Расстояние между двумя точками экземпляра выражает степень сходства между ними. В практических приложениях нам необходимо выбрать метод измерения подобия в соответствии с реальным сценарием приложения и характеристиками самих данных.

Расчет расстояния здесь моя предыдущая статьяОбычно используемые методы измерения подобия

(2) Выбор значения k

Вообще говоря, k будет установлено как количество элементов (чтобы k экземпляров не имели одинаковое количество различных категорий), начиная с k = 1, с постепенным увеличением k эффект классификации алгоритма K ближайших соседей будет постепенно улучшаться. ; После определенного значения классификационный эффект алгоритма K-ближайших соседей будет постепенно уменьшаться при дальнейшем увеличении.

image.png

Во-вторых, реализация алгоритма KNN (евклидово расстояние)

(1) Вход

  • Характеристики неизвестных образцов
  • Характеристики известных образцов
  • Этикетки для известных образцов
  • значение k
def knn(x_test, x_data, y_data, k):
		# TO DO
		return sortedClassCount[0][0]

(2) Выход

  • Вывод: этикетки неизвестных образцов

(3) Процесс алгоритма

1. Рассчитайте расстояние между неизвестным образцом и каждым известным образцом (евклидово расстояние).

 x_data_size = x_data.shape[0]
 np.tile(x_test, (x_data_size,1))
 diffMat = np.tile(x_test, (x_data_size,1)) - x_data
 sqDiffMat = diffMat**2
 sqDistances = sqDiffMat.sum(axis=1)
 distances = sqDistances**0.5

2. Отсортировать расстояния и отобрать известные образцы с k наименьшими расстояниями.

sortedDistances = distances.argsort()

3. Подсчитайте количество меток k образцов

 for i in range(k):
        # 获取标签
        votelabel = y_data[sortedDistances[i]]
        # 统计标签数量
        classCount[votelabel] = classCount.get(votelabel,0) + 1

4. Вернуть наибольшее количество тегов

    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]