Несколько алгоритмов, обычно используемых в машинном обучении

машинное обучение глубокое обучение

Это 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

Манхэттенское расстояние

Определение Википедии

Геометрия такси, или манхэттенское расстояние, или манхэттенская длина, или расстояние по линии сетки — это термин, введенный Германом Минковски в девятнадцатом веке для евклидовой геометрии метрических пространств. Термин, используемый для обозначения суммы абсолютных колесных баз двух точек в стандартной системе координат.

Представьте, что вы находитесь на Манхэттене и едете от одного перекрестка к другому, а фактическое расстояние — это «Манхэттенское расстояние». И именно отсюда происходит название Манхэттенское расстояние, также известное как расстояние городского квартала.

manhattan_distance

На изображении выше зеленая линия — это евклидово расстояние, красная линия — манхэттенское расстояние, а синяя и желтая линии — эквивалентные манхэттенские расстояния.

Манхэттенское расстояние между двумя точками 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Большинство самых последних (т. е. ближайших соседей в пространстве признаков) выборок относятся к определенной категории, тогда выборка также относится к этой категории.

knn

Глядя на картинку выше, известно, что есть 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)

использованная литература