Основы классификации: softmax и k ближайших соседей на Python
Классификация - это выбор метки, например «кошка» или «собака». Модель может выдать оценку для каждого класса, а softmax превратит их в вероятности; или простой метод вроде k ближайших соседей позволит проголосовать ближайшим известным примерам.
Суть простыми словами
Классификация - это выбор метки, например «кошка» или «собака». Модель может выдать оценку для каждого класса, а softmax превратит их в вероятности; или простой метод вроде k ближайших соседей позволит проголосовать ближайшим известным примерам.
Превратите оценки в вероятности классов с помощью softmax, оцените их кросс-энтропией и классифицируйте точки методом k ближайших соседей.
Главные идеи
- Softmax сохраняет порядок оценок и делает их сумму равной 1.
- Категориальная кросс-энтропия сильнее всего наказывает уверенные неправильные ответы.
- У k-NN нет этапа обучения: он сравнивает новую точку с сохранёнными примерами.
- Наивный Байес и деревья решений (неоднородность Джини, прирост информации) - другие классические классификаторы.
Когда это использовать?
- Понять, что происходит внутри нейронных сетей и библиотек ИИ.
- Разобраться в идее до того, как реализовать её в соответствующих задачах.
- Подготовиться к курсам по машинному обучению, собеседованиям и проектам.
Посмотрите в действии
Щёлкните в любом месте левого графика, чтобы классифицировать новую точку голосованием k ближайших соседей. Меняйте оценки справа и смотрите, как реагирует softmax.
Пример кода
import math
from collections import Counter
# Softmax turns raw scores into probabilities that add up to 1.
def softmax(scores):
exps = [math.exp(s - max(scores)) for s in scores]
total = sum(exps)
return [e / total for e in exps]
probs = softmax([2.0, 1.0, 0.1])
print("softmax:", [round(p, 3) for p in probs])
# Cross-entropy is small when the true class gets a high probability.
print("cross-entropy if class 0 is right:", round(-math.log(probs[0]), 3))
# k-nearest neighbours: label a point by a vote of the closest examples.
examples = [((1, 1), "cat"), ((1, 2), "cat"), ((5, 5), "dog"), ((6, 5), "dog"), ((5, 6), "dog")]
def knn(point, k=3):
nearest = sorted(examples, key=lambda e: math.dist(point, e[0]))[:k]
return Counter(label for _, label in nearest).most_common(1)[0][0]
print("(2, 1) ->", knn((2, 1)))
print("(5, 4) ->", knn((5, 4)))
Ожидаемый результат
softmax: [0.659, 0.242, 0.099]
cross-entropy if class 0 is right: 0.417
(2, 1) -> cat
(5, 4) -> dog
Как это работает
softmax() возводит экспоненту в степени оценок и делит на их сумму, поэтому три вероятности в сумме дают 1; вычитание максимума заранее защищает от переполнения. Кросс-энтропия - это −log вероятности правильного класса. knn() сортирует примеры по расстоянию и даёт проголосовать трём ближайшим.
Измените значения и запустите программу в онлайн-компиляторе Python CodeUtility без локальной установки Python.
Практические задания
Изменяйте входные данные и проверяйте граничные случаи перед работой с большими наборами.
- Измените входные данные или веса и предскажите результат до запуска.
- Выводите промежуточные значения, чтобы проследить каждый шаг вычислений.
- Решите задачи по ссылкам ниже, чтобы самостоятельно реализовать идею.
Попрактикуйтесь на задаче
Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.
- Функция softmax Превратите исходные оценки в вероятности с суммой 1 без переполнения на больших значениях. Легко
- Категориальная перекрёстная энтропия Вычислите потери многоклассового классификатора по предсказанным вероятностям и истинным классам. Легко
- Классификатор k ближайших соседей Предскажите метку большинством голосов k ближайших обучающих точек. Средне
- Наивный байесовский классификатор Предскажите класс по категориальным признакам с помощью теоремы Байеса и сглаживания Лапласа. Средне
- Неоднородность Джини Измерьте, насколько перемешаны метки в группе, — по этой оценке деревья решений выбирают разбиения. Легко
- Прирост информации Вычислите, насколько разбиение по признаку уменьшает энтропию, — это критерий деревьев решений ID3. Средне