Принцип персептрона
-
Персептрон представляет собой линейную модель с двумя категориями.Его входом является вектор признаков экземпляра, а выходом является категория экземпляра, которые равны +1 и -1 соответственно, которые принадлежат дискриминантной модели. Предполагая, что набор обучающих данных линейно разделим, цель обучения персептрона состоит в том, чтобы получитьГиперплоскость разделения, в которой положительные и отрицательные точки экземпляра точно разделены. Если данные нелинейно разделимы, гиперплоскость не может быть получена в конце
-
расстояние от точки до линии
- Уравнение прямой в формуле имеет вид, точкаКоординаты г..
-
Расстояние от образца до гиперплоскости
- Предположим, что гиперплоскость, в, точка выборкиРасстояние до гиперплоскости заключается в следующем:
-
Гиперпланы
- гиперплоскость в космосеподпространство в. Гиперплоскость в 2D-пространстве — это линия, а гиперплоскость в 3D-пространстве — плоскость.
модель персептрона
- определение2.1Предположим, что входное пространство (пространство признаков) равно, выходное пространствовходитьвектор признаков, представляющий экземпляр, соответствующий точкам во входном пространстве (пространстве признаков); выходПредставляет класс экземпляра. Следующая функция из входного пространства в выходное пространствоназывается перцептроном. ви– параметры модели персептрона,называется весом или весовым вектором,называется предвзятостью,выражатьивнутренний продукт.является символической функцией, то есть:
- Персептрон представляет собой линейную классификационную модель, относящуюся к дискриминационной модели.
- Геометрическая интерпретация персептрона представляет собой линейное уравнение:соответствует пространству признаковгиперплоскость в,в- вектор нормали к гиперплоскости,является точкой пересечения гиперплоскости.
Эта гиперплоскость делит пространство признаков на две части. Точки (собственные векторы), расположенные в двух частях, делятся наположительный и отрицательный.
Поэтому гиперплоскость S становится разделяющей гиперплоскостью, как показано на рис. 2.1.Обучение персептрона из обучающих наборов данных (векторы признаков и категории экземпляров)в, получить модель персептрона, то есть найти параметры моделиПрогнозирование персептрона с помощью изученной модели персептрона дает соответствующую категорию выходных данных для нового входного экземпляра.
- Докажите, почему w является нормальным вектором прямой линии (гиперплоскости в многомерном пространстве).
Стратегии обучения для персептронов
функция потерь
-
Естественным выбором функции потерь является общее количество ошибочно классифицированных точек, но тогда функция потерь не является параметром.иПостоянно доступную функцию нелегко оптимизировать. Другой выбор функции потерь - ошибочная классификация точек на гиперплоскость.Общее расстояние, которое используется персептроном. Для этого сначала запишите входное пространстволюбая точкарасстояние до гиперплоскости S,здесь,шнорма. Во-вторых, для неправильно классифицированных данныхСказать,учредил. потому что когдаВремя,, и когдаВремя,. Следовательно, неправильно классифицированные баллыРасстояние до гиперплоскости S равноТаким образом, предполагая гиперплоскостьНабор ошибочно классифицированных точекТогда общее расстояние от всех ошибочно классифицированных точек до гиперплоскости S равноНе рассматривать, получена функция потерь обучения персептрона.
-
почему бы не рассмотреть? ? кто-то сказалявляется фиксированным значением, но я думаю, что самолет не уникален, и это значение обязательно будет меняться. Ссылаясь на точки зрения других людей и размышляя об этом, я чувствую, что причины могут быть перечислены в виде следующих двух моментов.
- не влияетПоложительные и отрицательные суждения, то есть не влияют на промежуточный процесс алгоритма обучения. Поскольку алгоритм обучения персептрона управляется ошибочной классификацией, здесь следует отметить, что так называемый «привод ошибочной классификации» означает, что нам нужно только судитьположительный и отрицательный, чтобы судить, правильный ли счет или нет, иЭто не влияет на оценку положительных и отрицательных значений. такПромежуточный процесс алгоритма обучения персептрона можно игнорировать.
- Не влияет на конечный результат алгоритма обучения персептрона. Потому что окончательное условие завершения алгоритма обучения персептрона состоит в том, что все входные данные правильно классифицированы, то есть нет ошибочно классифицированных точек. Тогда функция потерь в это время равна 0. Соответственно, то есть числитель равен 0. Видно, чтоНа конечный результат это никак не влияет.
Подводя итог, даже игнорируя, и никак не повлияет на выполнение алгоритма обучения персептрона. Наоборот, это может упростить операцию и повысить эффективность выполнения алгоритма.
Алгоритмы обучения персептрона
первоначальная форма
-
Алгоритм 2.1 (исходная форма алгоритма обучения персептрона)Вход: обучающий набор данных; скорость обучения;
вывод:, ; модель персептрона
- выберите начальное значение,
- Выберите данные в обучающем наборе
- если
- перейти к, пока в обучающей выборке не останется ошибочно классифицированных точек.
- Когда точка экземпляра неправильно классифицирована и находится на неправильной стороне гиперплоскости разделения, отрегулируйте значения w, b, чтобы переместить гиперплоскость разделения в сторону ошибочно классифицированной точки, чтобы уменьшить точку ошибочной классификации и расстояние гиперплоскости до гиперплоскости. пересекает ошибочно классифицированную точку, чтобы сделать ее правильно классифицированной.
двойная форма
-
Алгоритм 2.2 (двойная форма алгоритма обучения персептрона)Вход: линейно разделимый набор данных, в; скорость обучениявывод:модель персептронав
- Выберите данные в обучающем наборе
- если
- перейти кпока нет ошибочно классифицированных данных.
В двойственной форме обучающие экземпляры появляются только в виде внутреннего продукта.Для удобства внутренний продукт между экземплярами в обучающем наборе может быть рассчитан заранее и сохранен в виде матрицы.Эта матрица так называемая матрица Грама.
-
проблема
- Как рассчитывается матрица Грамма?
- Как быть с числами с плавающей запятой, полученными в двойственной форме?Это не обязательно должно быть целое число, числа с плавающей запятой также могут быть
- как понять? ?означает первыйКоличество раз, когда точка выборки была неверно оценена, и персептрон в общей формеНа самом деле этоКоличество ложных позитивов для каждой точки образца умножается наСовокупная сумма , то есть. На каждой итерацииЗначит этоДо сих порКоличество раз, когда точка выборки была неверно оценена, это очень важно. Потому что необходимо многократно пускать вход в точку выборкиУмножьте два на два (вычисляется в общем видеЭто тоже тот случай, когда пора симулировать, а вы сами найдете), поэтому сделайте матрицу и сохраните ее заранее, что аналогично обычному способу зачистки алгоритма. Таким образом, две формы по существу одинаковы, но положимВыразить в другой форме.
считать
размер обучающей выборки,это количество функций
- Двойная форма: подметать один разРасчет каждых данных перед добавлением несколько () раз (когдаВыбиратьчас,Эквивалент градиента i-й группы данныхЕго добавляли несколько раз, причем добавляли сразу после обнаружения точки ошибочной классификации, вместо того, чтобы добавлять каждый раз), т.к.был рассчитан заранее в матрице Грамма, поэтому каждый раз, затем отсканируйте егоэто.
- Необработанная форма: каждый расчет, сложность вычисления этого внутреннего продукта равна
Итак, глядя на это, какой метод расчета выбрать, зависит от размера тренировочного набора и количества функций.
Код
первоначальная форма
- Для входного пространства персептрон отображает его ввыходное пространство
- за все ошибочно классифицированные точки, имеютТаким образом, мы можем определить следующую функцию потери в качестве критерия оптимизации:
- Решая градиент функции потерь,
- Легко получить исходный вид алгоритма обучения персептрона
- Весь алгоритм работы выглядит следующим образом:
- выберите начальное значение
- Произвольно выбирать точки в тренировочном наборе
- еслизатем согласноОбновлять
- повторениепока не будет неправильной классификации
-
from __future__ import division import random import numpy as np import matplotlib.pyplot as plt def sign(v): if v>=0: return 1 else: return -1 def train(train_num,train_datas,lr): w=[0,0] b=0 for i in range(train_num): x=random.choice(train_datas) x1,x2,y=x if(y*sign((w[0]*x1+w[1]*x2+b))<=0): w[0]+=lr*y*x1 w[1]+=lr*y*x2 b+=lr*y return w,b def plot_points(train_datas,w,b): plt.figure() x1 = np.linspace(0, 8, 100) x2 = (-b-w[0]*x1)/w[1] plt.plot(x1, x2, color='r', label='y1 data') datas_len=len(train_datas) for i in range(datas_len): if(train_datas[i][-1]==1): plt.scatter(train_datas[i][0],train_datas[i][1],s=50) else: plt.scatter(train_datas[i][0],train_datas[i][1],marker='x',s=50) plt.show() if __name__=='__main__': train_data1 = [[1, 3, 1], [2, 2, 1], [3, 8, 1], [2, 6, 1]] # 正样本 train_data2 = [[2, 1, -1], [4, 1, -1], [6, 2, -1], [7, 3, -1]] # 负样本 train_datas = train_data1 + train_data2 # 样本集 w,b=train(train_num=800,train_datas=train_datas,lr=0.01) plot_points(train_datas,w,b)
двойная форма
- Короче говоря, двойственная форма персептрона — этообучение сталообучения в его первоначальном виде,Его необходимо обновлять, когда он неправильно классифицируется в каждом раунде итерации, а также при использовании двойного метода для определенной точки.Когда возникает неправильная классификация, нам нужно только обновить ее соответствующуюОК, и, наконец, следуйтеформула может быть рассчитана один раз, В то же время мы выше шагисерединаКак можно видеть,появляется только как внутренний продукт, поэтому мы можем сначала вычислитьизМатрица хранится, так что формальному обучению нужно только посмотреть таблицу, чтобы получитьЗначение , которое может облегчить оптимизацию программы и повысить скорость работы. Обработка параметра b одинакова для примитивной и двойственной форм. Формула
-
from __future__ import division import random import numpy as np import matplotlib.pyplot as plt def train(train_num,train_datas,lr): w=0.0 b=0 datas_len = len(train_datas) alpha = [0 for i in range(datas_len)] train_array = np.array(train_datas) gram = np.dot(train_array[:,0:-1] , train_array[:,0:-1].T) for idx in range(train_num): tmp=0 i = random.randint(0,datas_len-1) yi=train_array[i,-1] for j in range(datas_len): tmp+=alpha[j]*train_array[j,-1]*gram[i,j] tmp+=b if(yi*tmp<=0): alpha[i]=alpha[i]+lr b=b+lr*yi for i in range(datas_len): w+=alpha[i]*train_array[i,0:-1]*train_array[i,-1] return w,b,alpha,gram def plot_points(train_datas,w,b): plt.figure() x1 = np.linspace(0, 8, 100) x2 = (-b-w[0]*x1)/(w[1]+1e-10) plt.plot(x1, x2, color='r', label='y1 data') datas_len=len(train_datas) for i in range(datas_len): if(train_datas[i][-1]==1): plt.scatter(train_datas[i][0],train_datas[i][1],s=50) else: plt.scatter(train_datas[i][0],train_datas[i][1],marker='x',s=50) plt.show() if __name__=='__main__': train_data1 = [[1, 3, 1], [2, 2, 1], [3, 8, 1], [2, 6, 1]] # 正样本 train_data2 = [[2, 1, -1], [4, 1, -1], [6, 2, -1], [7, 3, -1]] # 负样本 train_datas = train_data1 + train_data2 # 样本集 w,b,alpha,gram=train(train_num=500,train_datas=train_datas,lr=0.01) plot_points(train_datas,w,b)