Серия алгоритмов машинного обучения (1) - Алгоритм обучения персептрона (PLA)

машинное обучение
Серия алгоритмов машинного обучения (1) - Алгоритм обучения персептрона (PLA)

Базовые знания, необходимые для прочтения этой статьи: базовые знания математики, немного знаний в области программирования.

Введение

   В предыдущем разделе мы узнали о серии алгоритмов машинного обучения (〇) - базовые знания. Далее мы официально приступаем к изучению алгоритмов машинного обучения. Сначала мы начнем с самого простого алгоритма, алгоритма обучения персептрона.
   Когда мы пользуемся электронной почтой, то должны заметить, что современные почтовые ящики имеют функции защиты от спама.Система автоматически определяет, спам ли это, исходя из содержания письма, что экономит наше время.Представьте, как должна быть реализована эта функция?0.png

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

2. Введение в модель

  Вспомните нервную клетку, представленную в учебнике по биологии для младших классов средней школы, которая представляет собой структуру, состоящую из дендритов, аксонов, синапсов и клеточных тел. Активирует ли нервная клетка и выдает электрические сигналы, определяется количеством входных сигналов, которые она получает, и силой ее синапсов.Когда сумма превышает определенный порог, тело клетки возбуждается и выдает электрические сигналы. Исходя из поведения этой нервной клетки, предлагается концепция персептрона и соответствующий алгоритм обучения персептрона.
  датчик1(Персептрон) — это бинарный линейный классификатор, который делит линейно разделимый набор данных на два типа с помощью линейной комбинации. В области искусственных нейронных сетей перцептроны также называют однослойными искусственными нейронными сетями.
  Геометрический смысл: найти прямую линию в двумерной плоскости, которая полностью разделяет два типа данных. Разделение двух типов данных в многомерном пространстве для поиска гиперплоскости.1.png

By Elizabeth Goodspeed - Own work, CC BY-SA 4.0

  Математическое определение: сопоставьте вход X (вектор с действительным знаком) в матрице с выходным значением h(x) (двоичное значение -1 или +1). Предполагая, что есть d x s, взвешенная сумма w возвращает +1, если она больше определенного критического значения, и возвращает -1, если она меньше определенного критического значения.

i=1dwixi>критическое значение+1(AКлассификация)i=1dwixi<критическое значение1(BКлассификация)\begin{array}{cc} \sum_{i=1}^{d} w_{i} x_{i}>\text {порог} & +1(A \text {класс}) \\ \sum_{ i =1}^{d} w_{i} x_{i}

  Запишите приведенную выше формулу в виде функции (знаковая функция называетсясимволическая функция2, когда вход меньше 0, выход равен -1, а когда вход больше 0, выход равен +1)

h(x)=sign(i=1dwixiкритическое значение)h(x) = \operatorname{sign}\left(\sum_{i = 1}^dw_ix_i - критическое значение\right)

   обрабатывать отрицательные пороги как 0-й w, положительный 1 как 0-й x

h(x)=sign((i=1dwixi)+(критическое значение)w0(+1)x0)h(x)=\operatorname{sign}(\left(\sum_{i=1}^{d} w_{i} x_{i}\right)+\underbrace{(-\text {критическое значение})} _{w_{0}} \cdot \underbrace{(+1)}_{x_{0}})

  Критическое значение может быть объединено в операцию непрерывного сложения от 1 до d, нижняя граница операции непрерывного сложения становится равной 0

h(x)=sign(i=0dwixi)h(x) = \operatorname{sign}\left(\sum_{i=0}^dw_ix_i\right)

   Последняя функция может быть переписана как скалярное произведение двух векторов (w, x)

h(x)=sign(wTx)h(x) = \operatorname{sign}\left( w^Tx \right)

Персептрон представляет собой очень простую модель линейной классификации, но его существенный недостаток заключается в том, что он не может обрабатывать линейно неразделимые задачи.В следующих подразделах будет представлен алгоритм, который может допускать некоторые ошибки и может обрабатывать линейно неразделимые наборы данных - карманные алгоритмы (Pocket Algorithm )

3. Шаги алгоритма

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

Инициализировать вектор w, например, w инициализируется нулевым вектором
петля т = 0, 1, 2 ...
   Просматривайте все данные по порядку или случайным образом и вычисляйте h(x), пока не найдете один из данных, чей h(x) не соответствует целевому значению y
  sign(wtTxn(t))yn(t)\operatorname{sign}\left(w_{t}^{T} x_{n(t)}\right) \neq y_{n(t)}
   вектор коррекции w
  wt+1wt+yn(t)xn(t)w_{t+1} \leftarrow w_{t}+y_{n(t)} x_{n(t)}
Выйти из цикла без ошибок до тех пор, пока не будут получены результаты всех данных, а результирующий w будет решением системы уравнений

4. Доказательство принципа

   Предположим, что окончательный целевой весовой коэффициент равен wf, а оптимизируемый весовой коэффициент равен w. Используйте скалярное произведение модуля wf и модуля w в качестве критерия близости двух векторов. (Чем больше скалярное произведение двух единичных векторов, тем ближе два вектора. Когда два вектора направлены в одном направлении и коллинеарны, скалярное произведение двух является наибольшим)
   Поскольку все классификации целевого весового коэффициента wf верны, произведение расчетного значения каждой точки данных и целевого значения должно быть больше минимального значения в произведении и больше 0 (правильная классификация означает тот же знак)

yn(t)wfTxn(t)minnynwfTxn>0y_{n(t)} w_{f}^{T} x_{n(t)} \geq \min _{n} y_{n} w_{f}^{T} x_{n}>0
(Формула 1)

Оптимизируемый весовой коэффициент равен w. Он обновляется только при неправильной классификации набора данных, поэтому произведение значения, рассчитанного в этой точке данных, и целевого значения должно быть меньше или равно 0 (ошибка классификации отличается знаком )

sign(wtTxn(t))yn(t)yn(t)wtTxn(t)0\operatorname{sign}\left(w_{t}^{T} x_{n(t)}\right) \neq y_{n(t)} \Leftrightarrow y_{n(t)} w_{t}^{T} x_{n(t)} \leq 0
(Формула 2)

  Правило обновления весового коэффициента

wt=wt1+yn(t)xn(t)w_{t}=w_{t-1}+y_{n(t)} x_{n(t)}
(Формула 3)

Нижняя граница скалярного произведения целевого весового коэффициента и весового коэффициента, подлежащего оптимизации, может быть получена из трех приведенных выше формул:
(1) Приведение формулы 3 в можно получить
(2) После расширения используйте формулу 1, чтобы заменить второй элемент
(3) После T раундов обновления оно должно быть больше или равно w0 + T минимальным значениям.
(4) Начальный весовой коэффициент равен нулевому вектору

wfTwt=wfT(wt1+yn(t1)xn(t1))wfTwt1+minnynwfTxnw0+TminnynwfTxnTminnynwfTxn\begin{aligned} w_{f}^{T} w_{t} &=w_{f}^{T}\left(w_{t-1}+y_{n(t-1)} x_{n(t-1)}\right) \\ & \geq w_{f}^{T} w_{t-1}+\min _{n} y_{n} w_{f}^{T} x_{n} \\ & \geq \ldots \\ & \geq w_{0}+T \cdot \min _{n} y_{n} w_{f}^{T} x_{n} \\ & \geq T \cdot \min _{n} y_{n} w_{f}^{T} x_{n} \end{aligned}

Верхняя граница квадрата модуля оптимизируемого весового коэффициента может быть получена из трех приведенных выше формул:
(1) Приведение формулы 3 в можно получить
(2) Развернуть плоский метод
(3) Из формулы 2 можно узнать, что средний член должен быть меньше или равен 0, поэтому ее можно упростить
(4) Поскольку целевое значение y имеет только +1 и -1, квадрат должен быть равен 1, а квадрат модуля каждой точки данных должен быть меньше или равен квадрату модуля наибольшей точки данных.
(5) После T циклов обновления оно должно быть меньше или равно квадрату модуля w0 + квадрату модуля T наибольших точек данных.
(6) Квадрат модуля начального весового коэффициента равен 0

wt2=wt1+yn(t1)xn(t1)2=wt12+2yn(t1)wt1Txn(t1)+yn(t1)xn(t1)2wt12+0+yn(t1)xn(t1)2wt12+maxnxn2w02+Tmaxnxn2Tmaxnxn2\begin{aligned} \left\|w_{t}\right\|^{2} &=\left\|w_{t-1}+y_{n(t-1)} x_{n(t-1)}\right\|^{2} \\ &=\left\|w_{t-1}\right\|^{2}+2 y_{n(t-1)} w_{t-1}^{T} x_{n(t-1)}+\left\|y_{n(t-1)} x_{n(t-1)}\right\|^{2} \\ & \leq\left\|w_{t-1}\right\|^{2}+0+\left\|y_{n(t-1)} x_{n(t-1)}\right\|^{2} \\ & \leq\left\|w_{t-1}\right\|^{2}+\max _{n}\left\|x_{n}\right\|^{2} \\ & \leq \ldots \\ & \leq\left\|w_{0}\right\|^{2}+T \cdot \max _{n}\left\|x_{n}\right\|^{2} \\ & \leq T \cdot \max _{n}\left\|x_{n}\right\|^{2} \end{aligned}

Из приведенных выше двух результатов вывода можно узнать, что нижняя граница скалярного произведения единицы wf и единицы w
(1) Приведите два приведенных выше результата вывода, чтобы получить
(2) Упростить и предложить только одну переменную
(3) Поскольку все члены второго множителя постоянны и положительны, нижняя граница скалярного произведения единицы wf и единицы w связана только с количеством циклов T

wfTwfwtwtTminnynwfTxnwfTmaxnxn2TminnynwfTxnwfmaxnxn2Tпостоянный\begin{align} \frac{w_{f}^{T}}{\left\|w_{f}\right\|} \frac{w_{t}}{\left\|w_{t}\right \|} & \geq \frac{T \cdot \min _{n} y_{n} w_{f}^{T} x_{n}}{\left\|w_{f}\right\| \sqrt {T \cdot \max _{n}\left\|x_{n}\right\|^{2}}} \\ & \geq \sqrt{T} \cdot \frac{\min _{n} y_ {n} w_{f}^{T} x_{n}}{\left\|w_{f}\right\|\sqrt{\max _{n}\left\|x_{n}\right\| ^{2}}} \\ & \geq \sqrt{T} \cdot \text {константа} \end{выровнено}

  Из приведенного выше вывода видно, что при увеличении количества петель, чем больше скалярное произведение, тем ближе два единичных вектора. Поскольку скалярное произведение единичного вектора не больше 1, что указывает на то, что существует верхняя граница количества петель T, алгоритм в конечном итоге остановится.

Пять, реализация кода

Реализовать PLA на Python:

import numpy as np

def pla(X, y):
    """
    感知器学习算法实现
    注意:只能处理线性可分的数据集,输入线性不可分的数据集函数将无法停止
    args:
        X - 训练数据集
        y - 目标标签值
    return:
        w - 权重系数
    """
    done = False
    # 初始化权重系数
    w = np.zeros(X.shape[1])
    # 循环
    while(done == False):
        done = True
        # 遍历训练数据集
        for index in range(len(X)):
            x = X[index]
            # 判定是否与目标值不符
            if x.dot(w) * y[index] <= 0:
                done = False
                # 修正权重系数
                w = w + y[index] * x
    return w

6. Реализация сторонней библиотеки

scikit-learn3выполнить:

from sklearn.linear_model import Perceptron

# 初始化感知器
clf = Perceptron()
# 用随机梯度下降拟合线性模型
clf.fit(X, y)
# 权重系数
w = clf.coef_

Семь, демонстрация анимации

Простая классификация обучающих наборов данных:14.gif

Сложная классификация обучающих наборов данных:15.gif

Восемь, интеллект-карта

16.jpeg

9. Ссылки

  1. Это.Wikipedia.org/wiki/%E6%84…
  2. This.Wikipedia.org/wiki/%E7%AC…
  3. SCI kit-learn.org/stable/Modu…

Нажмите для полной демонстрацииздесь

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