С 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. Сохраните соответствующие входные данные командной строки в переменных
  2. Установить начальную скорость обучения = 1
  3. Прочтите набор данных, используя csv и delimiter='\t', сохраните независимые переменные в X, а зависимую переменную в Y. Мы добавляем 1.0 как предвзятость к нашим независимым данным
  4. Независимые и зависимые данные преобразуются в плавающие.
  5. Вектор веса инициализируется нулями с такими же размерами, как X
  6. normalError и annealError вычисляются путем вызова соответствующих методов.
  7. Наконец, вывод сохраняется в файл tsv.

Функция calculateNormalBatchLearning ()

Поток calculateNormalBatchLearning() выглядит следующим образом:

  1. Инициализация переменной e для хранения количества ошибок
  2. Цикл выполняется на 100 итераций.
  3. Прогнозируемое значение вычисляется на основе правила персептрона, описанного ранее с использованием метода calculatePredicatedValue ().
  4. Количество ошибок рассчитывается методом calculateError ()
  5. Веса обновляются на основе приведенного выше уравнения с использованием метода calculateGradient ().

Функция calculateAnnealBatchLearning ()

Поток calculateNormalBatchLearning() выглядит следующим образом:

  1. Инициализация переменной e для хранения количества ошибок
  2. Цикл выполняется на 100 итераций.
  3. Прогнозируемое значение вычисляется на основе правила персептрона, описанного ранее с использованием метода calculatePredicatedValue ().
  4. Количество ошибок рассчитывается методом calculateError ()
  5. Скорость обучения делится на количество итераций.
  6. Веса обновляются на основе приведенного выше уравнения с использованием метода calculateGradient ().

Функция calculatePredictedValue ()

Как описано на изображении перцептрона, если линейная комбинация W и X больше, чем 0, то мы прогнозируем класс как 1 в противном случае 0.

Функция calculateError ()

Мы подсчитываем количество случаев, когда прогнозируемое значение и истинное значение не совпадают, и это становится нашим счетчиком ошибок.

Функция calculateGradient ()

Этот метод является переводом формулы обновления веса, упомянутой выше.

Я раздаю бесплатную электронную книгу о согласованности. Получите бесплатную электронную книгу здесь .

Теперь, когда есть весь код. Давайте посмотрим на выполнение программы.

Вот как выглядит вывод:

Финальная программа

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



Вот список моих рассказов: