С Python с использованием правила дельты (градиентный спуск)
В этом посте мы рассмотрим программу, написанную на Python3
с использованием numpy
. Мы обсудим основы того, что такое перцептрон, что такое дельта-правило и как его использовать для конвергенции обучения перцептрона.
Что такое перцептрон?
Персептрон - это алгоритм для обучения с учителем бинарных классификаторов (допустим, {1, 0}
). У нас есть линейная комбинация вектора весов и вектора входных данных, которая проходит через функцию активации и затем сравнивается с пороговым значением. Если линейная комбинация больше порога, мы прогнозируем класс как 1
, иначе 0. Mathematically,
Персептроны представляют собой только линейно разделимые проблемы. Они не могут сходиться, если обучающие примеры не разделимы линейно. Это позволяет увидеть правило дельты.
Правило дельты сводится к наиболее подходящему приближению целевой концепции. Ключевая идея - использовать градиентный спуск для поиска в пространстве гипотез всех возможных весовых векторов.
Примечание: это обеспечивает основу для алгоритма «обратного распространения».
Теперь давайте обсудим текущую проблему. Программа прочитает набор данных (файл, разделенный табуляцией) и обработает первый столбец как целевую концепцию. В целевой концепции представлены значения A и B, мы будем рассматривать A как класс + ve или 1
и B как класс -ve или 0
. Программа реализует правило обучения персептрона в пакетном режиме с постоянной скоростью обучения и скоростью обучения отжига (уменьшающейся по мере увеличения количества итераций), начиная со скоростью обучения, равной 1.
где Y (x, w) - это набор неправильно классифицированных образцов. Мы будем использовать подсчет или количество неправильно классифицированных точек как нашу частоту ошибок (т. Е. | Y (x, w) |). Результатом также будет файл, разделенный табуляцией (tsv), содержащий ошибку для каждой итерации, то есть в нем будет 100 столбцов. Кроме того, у него будет 2 строки, одна для нормальной скорости обучения, а другая для скорости обучения отжига.
Теперь понимание того, что такое перцептрон, что такое дельта-правило и как мы собираемся его использовать. Приступим к реализации Python3
.
В программе мы предоставляем два ввода из командной строки. Они есть:
1. данные - расположение файла данных.
2. вывод - куда писать решение tsv в
Следовательно, программа должна запускаться так:
python3 perceptron.py --data data.tsv --output solution.tsv
Программа состоит из 8 частей, и мы будем рассматривать их по очереди.
Операторы импорта
import argparse # to read inputs from command line import csv # to read and process dataset import numpy as np # to perform mathematical functions
Блок инициализатора выполнения кода
# initialise argument parser and read arguments from command line with the respective flags and then call the main() function if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("-d", "--data", help="Data File") parser.add_argument("-o", "--output", help="output") main()
Функция main()
Последовательность выполнения функции main()
выглядит следующим образом:
- Сохраните соответствующие входные данные командной строки в переменных
- Установить начальную скорость обучения = 1
- Прочтите набор данных, используя
csv
иdelimiter='\t'
, сохраните независимые переменные вX
, а зависимую переменную вY
. Мы добавляем1.0
как предвзятость к нашим независимым данным - Независимые и зависимые данные преобразуются в плавающие.
- Вектор веса инициализируется нулями с такими же размерами, как
X
- normalError и annealError вычисляются путем вызова соответствующих методов.
- Наконец, вывод сохраняется в файл tsv.
Функция calculateNormalBatchLearning ()
Поток calculateNormalBatchLearning()
выглядит следующим образом:
- Инициализация переменной
e
для хранения количества ошибок - Цикл выполняется на 100 итераций.
- Прогнозируемое значение вычисляется на основе правила персептрона, описанного ранее с использованием метода calculatePredicatedValue ().
- Количество ошибок рассчитывается методом calculateError ()
- Веса обновляются на основе приведенного выше уравнения с использованием метода calculateGradient ().
Функция calculateAnnealBatchLearning ()
Поток calculateNormalBatchLearning()
выглядит следующим образом:
- Инициализация переменной
e
для хранения количества ошибок - Цикл выполняется на 100 итераций.
- Прогнозируемое значение вычисляется на основе правила персептрона, описанного ранее с использованием метода calculatePredicatedValue ().
- Количество ошибок рассчитывается методом calculateError ()
- Скорость обучения делится на количество итераций.
- Веса обновляются на основе приведенного выше уравнения с использованием метода calculateGradient ().
Функция calculatePredictedValue ()
Как описано на изображении перцептрона, если линейная комбинация W
и X
больше, чем 0
, то мы прогнозируем класс как 1
в противном случае 0
.
Функция calculateError ()
Мы подсчитываем количество случаев, когда прогнозируемое значение и истинное значение не совпадают, и это становится нашим счетчиком ошибок.
Функция calculateGradient ()
Этот метод является переводом формулы обновления веса, упомянутой выше.
Я раздаю бесплатную электронную книгу о согласованности. Получите бесплатную электронную книгу здесь .
Теперь, когда есть весь код. Давайте посмотрим на выполнение программы.
Вот как выглядит вывод:
Если вам нравится читать подобные истории и вы хотите поддержать меня как писателя, подумайте о подписке, чтобы стать участником Medium. Это 5 долларов в месяц, что дает вам неограниченный доступ к историям на Medium. Если вы зарегистрируетесь по моей ссылке, я получу небольшую комиссию без каких-либо дополнительных затрат для вас.
Вот список моих рассказов: