В этой статье давайте рассмотрим один из старейших алгоритмов классификации в машинном обучении — персептрон.

Авторы: Сатья Кришнан Суреш, Шунмугаприя П.

Ссылка на Github: https://github.com/SathyaKrishnan1211/understanding_perceptron

Алгоритм перцептрона

Предположим, что на физическом осмотре находится группа из 50 студентов. Каждому человеку присваивается первая группа (под чертой) или вторая (над чертой) на основании результатов физического осмотра в различных соревнованиях. Проходной балл за экзамен составляет 50 баллов, что представляет собой совокупный балл всех тестов. Поэтому, если человек набирает менее 50 баллов, ему присваивается вторая или первая группа.
Именно так работает нейрон в нашем теле. Чтобы нейрон отправил сигнал, должно быть достигнуто пороговое значение (50 в приведенном выше примере). Если пороговое значение не достигнуто, сигнал не сработает. Алгоритм Perceptron также работает так же, как он смоделирован на основе нейрона. Он либо предсказывает принадлежность учащегося к первой или второй группе в бинарной классификации. Когда дело доходит до нескольких классов, Perceptron использует подход «один против остальных» (Ovr) для классификации образцов.

Математика Perceptron

Когда вы подбираете набор данных с определенным количеством функций, модель персептрона пытается найти правильный правильный вес или влияние для каждой функции. Это как найти наклон прямой. Вес каждого признака определяет степень влияния соответствующего признака на классификацию.

Предположим, что «x» — это образец набора данных, а целевая метка — y. Пусть w будет весовым вектором каждого признака. yi равно 1 всякий раз, когда xi больше «c». Здесь c – пороговое значение.

Мы можем установить порог равным нулю, перенеся «с» в левую часть уравнения. Это «с» в большинстве моделей машинного обучения называется «единицей смещения» и представляется как w0.

Вам может быть интересно, как получаются или инициализируются веса. Ну, они не всегда доступны, когда вы начинаете обучать модель. Изначально мы
присваиваем весовому вектору произвольные значения. Но произвольные значения сосредоточены вокруг 0 со стандартным отклонением 0,01 (стандартное значение равно 0,01, потому что мы не хотим, чтобы наши веса принимали какие-либо большие значения, не зная диапазона значений в наборе данных). веса ​​получаются путем повторных итераций по набору данных и штрафа весов всякий раз, когда модель персептрона ошибочно классифицирует строку выборки.

Это функция обновления, которая будет добавляться к весам каждый раз, когда наша модель предсказывает результат. Здесь lr — скорость обучения, которая является важным параметром, определяющим, насколько быстро мы хотим, чтобы наша модель достигла глобального минимума функции ошибок. yi — это целевая метка для xi, а «yi cap» — прогноз класса нашей модели. Если прогноз правильный, функция «обновления» будет равна нулю, и мы не будем обновлять наши веса, но если он неверен, мы обновим веса. Здесь примерная строка «xi» умножается, потому что мы хотим оштрафовать нашу модель в зависимости от степени ее ошибочности.

Окончательный рабочий процесс модели персептрона показан ниже.

Построение модели персептрона

В этом разделе давайте попробуем построить модель персептрона на основе математики, обсуждавшейся в предыдущем разделе.

Здесь представлена ​​реализация на Python модели персептрона 1 на 1.

Давайте сначала обсудим функцию «подгонки». Функция «подгонки» принимает векторы признаков и целевые метки. Первые две строки функций инициализируют вектор весов, значения которого сосредоточены в 0 со стандартным отклонением 0,01. Здесь важно отметить форму вектора. Он имеет на одно значение больше, чем количество столбцов. Это дополнительное значение является единицей смещения. Функция «подгонки» имеет переменную ошибки, чтобы видеть, увеличиваются или уменьшаются ошибки после ряда итераций. Теперь мы просто снова и снова повторяем рабочий процесс персептрона в течение n_iter раз, которое необходимо указать при использовании модели. Первые три строки внутреннего цикла for образуют ядро ​​алгоритма персептрона. Математическая форма этих линий обсуждалась в предыдущем разделе. Еще одна важная вещь, которую следует отметить, заключается в том, что термин смещения ни на что не умножается, или, чтобы обобщить уравнение, мы можем предположить, что он был умножен на x0, где x0 всегда равен 1.

Функция net_input выполняет скалярное произведение между транспонированным вектором весов и вектором выборки. Функция «предсказать» предсказывает класс на основе вывода функции «net_input».

Тестирование модели

Проверим модель на искусственно подготовленном наборе данных.

Вышеупомянутый искусственно подготовленный набор данных имеет две функции и целевую метку, которая имеет два значения: 1 и -1. Коэффициент «x1» равен 2, а коэффициент «x2» равен -2.

Обратите внимание на второе и третье значения вектора весов. Их абсолютные значения практически равны. Исходные коэффициенты также следуют шаблону. Теперь давайте взглянем на блок смещения. Единица смещения очень близка к нулю, поскольку пороговое значение для этого набора данных равно 0. Вот почему единица смещения очень близка к нулю. Все значения весового вектора следуют математике, которую мы обсуждали в математическом разделе.

Вот как модель персептрона делит обучающие строки. Одним из недостатков персептрона является то, что он хорошо работает только для линейно разделимых данных. Когда обучающие данные не являются линейно разделимыми, персептрон не сможет сходиться к правильному весу для признаков.

Заключение

В этой статье мы увидели математическую и кодовую реализацию алгоритма персептрона. Код здесь предназначен для классификации 1 на 1, но та же концепция применяется для классификации более чем одной задачи класса. Хотя алгоритм кажется простым, за прошедшие годы было создано множество усовершенствованных версий алгоритма и построено много усовершенствованных моделей, основанных на этой модели. Алгоритм персептрона — это только отправная точка.