Метод ближайших центроидов
Идея метода
Метод ближайших центроидов (nearest centroids) решает задачу классификации. Рассмотрим демонстрационную обучающую выборку из двумерных объектов, разбитые на три класса. Класс объектов будем обозначать цветом.
Обучение метода заключается в вычислении центроидов для каждого класса.
Ниже они обозначены крестиками с оответствующего цвета.
На этапе предсказания класса для объекта вычисляются расстояния до каждого из центроидов. Объекту назначается тот класс, расстояние до которого меньше всего:
Чему равны дискриминантные функции для этого метода?
Дискриминантная функция каждого из классов вычисляет рейтинг соответствующего класса - чем выше, тем класс более вероятен. Поэтому дискриминантная функция каждого класса будет равна расстоянию от до центроида соответствующего класса со знаком минус (либо любой другой убывающей функции от расстояния).
Разбиение методом ближайших центроидов для демонстрационного примера приведено ниже:
Как видим, границы между классами представляют собой прямые линии.
Всегда ли границы между классами будут линейными гиперплоскостями?
Границы между классами i и j задаются условием , что в случае метода ближайших центроидов будет . Это всегда будет линейной гиперплоскостью, если использовать Евклидову функцию расстояния.
Варианты усложнения метода
Метод использует не объекты обучающей выборки, а их усредения (центроиды). Если хотим использовать только обучающие объекты, то в качестве центроидов нужно выбирать центральные объекты класса из обучающей выборки (т.е. такие объекты выборки, что расстояние от них до всех других объектов того же класса будет наименьшим).
За счет того, что сравнение происходит лишь с центроидами, а не со всеми объектами выборки, прогноз будет строиться быстро. Однако метод способен выделять лишь выпуклые формы кластеров, поэтому в общем случае будет работать неточно. Его можно использовать как бейзлайн (простой метод задающий нижнюю границу на точность), а также усложнить, характеризуя каждый класс не одним центроидом, а сразу несколькими в разных позициях.
Также метод можно обобщить, используя различные функции вычисления расстояния.
Пример запуска в Python
from sklearn.neighbors import NearestCentroid
from sklearn.metrics import accuracy_score
X_train, X_test, Y_train, Y_test = get_demo_classification_data()
model = NearestCentroid() # инициализация модели
model.fit(X_train,Y_train); # обучение модели
Y_hat = model.predict(X_test) # построение прогнозов
print(f'Точность прогнозов: {100*accuracy_score(Y_test, Y_hat):.1f}%')