Это 31-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления
Программно-аппаратная среда
- ubuntu 18.04 64bit
- numpy 1.12.1
Евклидово расстояние
Евклидово расстояние, также известное как евклидово расстояние, является наиболее распространенной метрикой расстояния, измеряющей абсолютное расстояние между точками в многомерном пространстве. В сценарии вычисления подобия (например, при распознавании лиц) евклидово расстояние является относительно интуитивным и распространенным алгоритмом подобия. Чем меньше евклидово расстояние, тем больше сходство; чем больше евклидово расстояние, тем меньше сходство.
Определение из китайской Википедии
В математике евклидово расстояние или евклидова метрика — это «обычное» (то есть прямолинейное) расстояние между двумя точками в евклидовом пространстве. Используя это расстояние, евклидово пространство становится метрическим пространством. Соответствующая норма называется евклидовой нормой. В более ранней литературе это называлось пифагорейской метрикой.
Математическая формула евклидова расстояния
Код
Мы используемnumpy
Эта научная вычислительная библиотека для расчета евклидова расстояния, код также очень прост
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2018-08-17 16:31:07
# @Author : xugaoxiang (djstava@gmail.com)
# @Link : link
# @Version : 1.0.0
import numpy as np
def get_edclidean_distance(vect1,vect2):
dist = np.sqrt(np.sum(np.square(vect1 - vect2)))
# 或者用numpy内建方法
# dist = numpy.linalg.norm(vect1 - vect2)
return dist
if __name__ == '__main__':
vect1 = np.array([1,2,3])
vect2 = np.array([4,5,6])
print(get_edclidean_distance(vect1, vect2))
Отображение результатов выполнения
5.19615242271
Манхэттенское расстояние
Определение Википедии
Геометрия такси, или манхэттенское расстояние, или манхэттенская длина, или расстояние по линии сетки — это термин, введенный Германом Минковски в девятнадцатом веке для евклидовой геометрии метрических пространств. Термин, используемый для обозначения суммы абсолютных колесных баз двух точек в стандартной системе координат.
Представьте, что вы находитесь на Манхэттене и едете от одного перекрестка к другому, а фактическое расстояние — это «Манхэттенское расстояние». И именно отсюда происходит название Манхэттенское расстояние, также известное как расстояние городского квартала.
На изображении выше зеленая линия — это евклидово расстояние, красная линия — манхэттенское расстояние, а синяя и желтая линии — эквивалентные манхэттенские расстояния.
Манхэттенское расстояние между двумя точками a(x1,y1) и b(x2,y2) на двумерной плоскости
Манхэттенское расстояние между двумя n-мерными векторами a(x11,x12,…,x1k) и b(x21,x22,…,x2k)
Код
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2018-08-20 16:10:23
# @Author : xugaoxiang (djstava@gmail.com)
# @Link : link
# @Version : 1.0.0
import os
import numpy as np
def get_manhattan_distance(vect1, vect2):
dist = np.sum(np.abs(vect1 - vect2))
# 或者使用内建方法
# dist = np.linalg.norm(vect1 - vect2, ord=1)
return dist
if __name__ == '__main__':
vect1 = np.array([1, 2, 3])
vect2 = np.array([4, 5, 6])
dist = get_manhattan_distance(vect1, vect2)
print(dist)
выходной результат
9
Алгоритм K-ближайшего соседа
K
-ближайший соседK Nearest Neighbor
, сокращенноKNN
, который представляет собой алгоритм классификации и регрессии и один из простейших алгоритмов машинного обучения. Его идея такова: в пространстве признаков, если образец рядом сk
Большинство самых последних (т. е. ближайших соседей в пространстве признаков) выборок относятся к определенной категории, тогда выборка также относится к этой категории.
Глядя на картинку выше, известно, что есть 2 категории, красные треугольники и синие квадраты.Теперь нам нужно определить, к какой категории относится зеленый кружок в середине? использоватьKNN
, просто начните с его соседей, но сколько соседей вам нужно посмотреть?
-
K
=3, ближайшие 3 соседа зеленой точки это 2 красных треугольника и 1 синий квадрат, меньшинство принадлежит большинству, на основании статистических методов считается, что зеленый кружок относится к категории красных треугольников -
K
=5, ближайшими 5 соседями зеленой точки являются 2 красных треугольника и 3 синих квадрата, или меньшинство принадлежит большинству На основании статистических методов считается, что зеленый кружок относится к категории синих квадратов
можно увидеть,K
Выбор значения имеет большое влияние на наш конечный результат.K
Чем меньше значение, тем легче пострадать одному человеку,K
Слишком большие значения восприимчивы к особым расстояниям, которые находятся дальше. Упомянутое здесь расстояние, общие методы расчета, такие как приведенное выше евклидово расстояние и манхэттенское расстояние.
ТотK
Как должно быть установлено значение?
К сожалению, здесь нет однозначного вывода.K
На значение влияет сама проблема и размер набора данных.Во многих случаях вам нужно сделать несколько попыток, а затем выбрать лучшее значение.
Недостатки КНН
KNN
Необходимо рассчитать расстояние до всех выборок, в этом случае объем вычислений очень велик, эффективность очень низкая, и его трудно применить к большим наборам данных.
пример кода
sklearn
Эта библиотека предоставляет полныйKNN
Его очень просто реализовать и использовать,pip install scikit-learn
Установить
from sklearn.neighbors import KNeighborsClassifier
...
# n_neighbors就是K值
knn_classifier = KNeighborsClassifier(n_neighbors=5)
knn_classifier.fit(x_train, y_train)
# X_test是待分类的数据
pred = knn_classifier.predict(X_test)