Метрический классификатор и метод ближайших соседей — различия между версиями
Kirant (обсуждение | вклад) (→Источники информации) |
Kirant (обсуждение | вклад) |
||
Строка 31: | Строка 31: | ||
== Использование ядер сглаживания == | == Использование ядер сглаживания == | ||
− | При использовании ленейной функции в качестве <tex>w(i, u)</tex> возможно совпадение суммарного веса для нескольких классов. Это приводит к неоднозначности ответа при классификации. Чтобы такого не происходило используют функцию | + | При использовании ленейной функции в качестве <tex>w(i, u)</tex> возможно совпадение суммарного веса для нескольких классов. Это приводит к неоднозначности ответа при классификации. Чтобы такого не происходило используют функцию [[Ядра]]<sup>[на 15.01.18 не создан]</sup>. |
− | |||
− | |||
Будем обозначать функцию ядра <tex>K(r)</tex> | Будем обозначать функцию ядра <tex>K(r)</tex> | ||
Строка 45: | Строка 43: | ||
Tricube: <tex>{\displaystyle K(r)={\frac {70}{81}}(1-{\left|r\right|}^{3})^{3}}</tex> | Tricube: <tex>{\displaystyle K(r)={\frac {70}{81}}(1-{\left|r\right|}^{3})^{3}}</tex> | ||
− | === | + | === Метод парзеновского окна === |
<tex>w(i,u) = K\biggl(\frac{\rho(u,x_{i; u})}{h}\biggr)</tex> {{---}} метод парзеновского окна фиксированной ширины <tex>h</tex>; | <tex>w(i,u) = K\biggl(\frac{\rho(u,x_{i; u})}{h}\biggr)</tex> {{---}} метод парзеновского окна фиксированной ширины <tex>h</tex>; | ||
Строка 51: | Строка 49: | ||
<tex>w(i,u) = K\biggl(\frac{\rho(u,x_{i; u})}{\rho(u,x_{k+1; u})}\biggr)</tex> {{---}} метод парзеновского окна переменной ширины; | <tex>w(i,u) = K\biggl(\frac{\rho(u,x_{i; u})}{\rho(u,x_{k+1; u})}\biggr)</tex> {{---}} метод парзеновского окна переменной ширины; | ||
− | <tex> | + | Сравним два этих метода. Сперва запишем классификаторы, полученные при использовании этих методов, в явном виде: |
+ | |||
+ | Фиксированной ширины: <tex>a_h = a(u, X^m, \boldsymbol{h}, K) = \mathrm{arg}\max_{y\in Y} \sum_{i=1}^m \bigl[ x_{i; u}=y \bigr] K\biggl(\frac{\rho(u,x_{i; u})}{h}\biggr)</tex> | ||
+ | |||
+ | Переменной ширины: <tex>a_k = a(u, X^m, \boldsymbol{k}, K) = \mathrm{arg}\max_{y\in Y} \sum_{i=1}^m \bigl[ x_{i; u}=y \bigr] K\biggl(\frac{\rho(u,x_{i; u})}{\rho(u,x_{k+1; u})}\biggr))</tex> | ||
+ | |||
+ | <tex>a_h</tex> не будет учитывать соседей на расстояние больше чем h, а всех остальных учтет в соответствии с функций ядра <tex>K</tex>. | ||
+ | <tex>a_k</tex> является аналогом метода k ближайших соседей (т.к. для всех <tex>k+i</tex>-ых соседей функция <tex>K</tex> вернет 0), но при этом чем ближе <tex>k-i</tex>-ый сосед, тем больший вклад в сторону своего класса он даст. | ||
+ | |||
+ | Часто используют окно переменной ширины т.е. классификатор <tex>a_k</tex>, по следующим причинам: | ||
+ | |||
+ | 1) Удобнее оптимизировать целочисленный параметр <tex>k</tex>, чем вещественный параметр <tex>h</tex> по некоторой сетке. | ||
+ | |||
+ | 2) Существует большое количество задач, где точки разбросаны не равномерно. В них могут существовать области, где достаточно брать небольшую <tex>h</tex> и области, где в окно ширины <tex>h</tex> попадает только одна точка. Тогда для классификатора <tex>a_h</tex> будут существовать области в которых не будет ни одного объекта (кроме того, который нужно классифицировать). Для таких областей не понятно как классифицировать объекты. | ||
+ | |||
== Использование различных метрик расстояния == | == Использование различных метрик расстояния == |
Версия 13:06, 15 января 2019
Метрический классификатор (англ. similarity-based classifier) — алгоритм классификации, основанный на вычислении оценок сходства между объектами.
Для формализации понятия сходства вводится функция расстояния между объектами
. Как правило, не требуется, чтобы были выполнены все три аксиомы метрики - неравенство треугольника может нарушаться.Метод ближайших соседей — простейший метрический классификатор, основанный на оценивании сходства объектов. Классифицируемый объект относится к тому классу, которому принадлежат ближайшие к нему объекты обучающей выборки.
Метод k ближайших соседей (англ. knn - k nearest neighbours) — Для повышения надёжности классификации объект относится к тому классу, которому принадлежит большинство из его соседей — k ближайших к нему объектов обучающей выборки x_i. В задачах с двумя классами число соседей берут нечётным, чтобы не возникало ситуаций неоднозначности, когда одинаковое число соседей принадлежат разным классам.
Метод взвешенных ближайших соседей — в задачах с числом классов 3 и более нечётность уже не помогает, и ситуации неоднозначности всё равно могут возникать. Тогда i-му соседу приписывается вес w_i, как правило, убывающий с ростом ранга соседа i. Объект относится к тому классу, который набирает больший суммарный вес среди k ближайших соседей.
Содержание
Описание алгоритма
Пусть задана обучающая выборка пар «объект-ответ»
Пусть на множестве объектов задана функция расстояния
. Эта функция должна быть достаточно адекватной моделью сходства объектов. Чем больше значение этой функции, тем менее схожими являются два объекта .Для произвольного объекта
расположим объекты обучающей выборки в порядке возрастания расстояний до :, где через обозначается тот объект обучающей выборки, который является -м соседом объекта . Аналогичное обозначение введём и для ответа на -м соседе: . Таким образом, произвольный объект порождает свою перенумерацию выборки. В наиболее общем виде алгоритм ближайших соседей есть: ,
где
— заданная весовая функция, которая оценивает степень важности -го соседа для классификации объекта . Естественно полагать, что эта функция неотрицательна и не возрастает по .По-разному задавая весовую функцию, можно получать различные варианты метода ближайших соседей.
— простейший метод ближайшего соседа;
— метод ближайших соседей;
— метод экспоненциально взвешенных ближайших соседей, где предполагается ;
Использование ядер сглаживания
При использовании ленейной функции в качестве Ядра[на 15.01.18 не создан].
возможно совпадение суммарного веса для нескольких классов. Это приводит к неоднозначности ответа при классификации. Чтобы такого не происходило используют функциюБудем обозначать функцию ядра
Примеры ядер
Triangular:
Parabolic:
Tricube:
Метод парзеновского окна
— метод парзеновского окна фиксированной ширины ;
— метод парзеновского окна переменной ширины;
Сравним два этих метода. Сперва запишем классификаторы, полученные при использовании этих методов, в явном виде:
Фиксированной ширины:
Переменной ширины:
не будет учитывать соседей на расстояние больше чем h, а всех остальных учтет в соответствии с функций ядра . является аналогом метода k ближайших соседей (т.к. для всех -ых соседей функция вернет 0), но при этом чем ближе -ый сосед, тем больший вклад в сторону своего класса он даст.
Часто используют окно переменной ширины т.е. классификатор
, по следующим причинам:1) Удобнее оптимизировать целочисленный параметр
, чем вещественный параметр по некоторой сетке.2) Существует большое количество задач, где точки разбросаны не равномерно. В них могут существовать области, где достаточно брать небольшую
и области, где в окно ширины попадает только одна точка. Тогда для классификатора будут существовать области в которых не будет ни одного объекта (кроме того, который нужно классифицировать). Для таких областей не понятно как классифицировать объекты.
Использование различных метрик расстояния
Очень редко известа хорошая функция расстояния
. В качестве нее обычно использую следующие функции:Примеры метрик
Пусть
, - объекты, а , их признаковые описания.Евклидова метрика:
Расстояние Чебышёва:
Манхэттенское Расстояние:
При их использовании важно нормировать значения признаков, иначе один признак с максимальным значением может стать приобладающим, а признаки с маленькими значениями не будут учитываться при классификации. Чтобы отсеить лишние признаки (т.е. не влияющие на класс объекта) можно использовать feature selection.
Пример использования (через scikit-learn)
Пусть X, y - нормированные значения признаков и соответствуйющие им классы.
- Делим данные на тренировочное и тестовое множество
from sklearn.model_selection import train_test_split
X_train, X_validation, y_train, y_validation = train_test_split(X, y, train_size=0.1, random_state=1234) print(X_train.shape, X_validation.shape)
- Создаем классификатор
from sklearn.neighbors import KNeighborsClassifier
best_model = KNeighborsClassifier( n_neighbors=10, weights=’distance’, algorithm=’auto’, leaf_size=30, metric=’euclidean’, metric_params=None, n_jobs=4 )
- Обучаемся
best_model.fit(X_train, y_train)
- Используем скользящий контроль для поиска лучших параметров (англ. cross validation)
from sklearn.model_selection import GridSearchCV
tuned_params = best_model.get_params() tuned_params['n_neighbors'] = range(1, 30) clf = GridSearchCV(KNeighborsClassifier(), tuned_params, cv=10, n_jobs=-1) clf.fit(X_train, y_train) best_params = clf.best_params_
- Оценка классификатора
from sklearn import metrics
best_model = KNeighborsClassifier(**best_params) predicted = best_model.predict(X_validation) logging.info('Used params: {0}'.format(params)) logging.info('Evaluation:\n{0}'.format(metrics.classification_report(expected, predicted)))
См. также
- Обзор библиотек для машинного обучения на Python[на 30.12.18 не создан]
- Общие понятия[на 30.12.18 не создан]
Источники информации
- Метрический классификатор - статья на machinelearning.ru про метрический классификатор
- knn - статья на machinelearning.ru про knn
- лекция про knn - Лекция из курса К.В. Воронцова
- Функции ядер - примеры ядер с Википедии
- sklearn - документация по scikit-learn