Логистическая регрессия является важной, поэтому для оптимизации ее решений работает значительное количество алгоритмов. Здесь мы рассмотрим другой алгоритм под названием Perceptron.

Я снова попытался найти код для его написания с нуля. Надеюсь, тебе понравится!

Я также включил два других варианта реализации персептрона: средний персептрон и алгоритм пегасоса, которые довольно интуитивно понятны.

Набор данных: самостоятельно созданный со случайными числами

Процесс последовал:

  • Здесь классы закодированы как 1 и -1, а не 0 и 1 в логистической регрессии. Потому что так работает этот алгоритм. Это не имеет большого значения, потому что это всего лишь ярлыки, которые мы им даем.
  • После создания данных переходим к написанию одношаговых функций обновления для персептрона и пегаса, а для среднего это следует непосредственно в финальной функции вызова. Все семейство алгоритмов персептрона следуют одному и тому же шаблону с немного разными правилами обновления.

Псевдокод персептрона

# Perceptron Algorithm
# initialize θ and θ₀ with 0
θ = 0  (vector)
θ₀ = 0 (scalar)
# totally T epoches to iterate
for t = 1 .. T do                     
    # totally m data points    
    for i = 1 .. m do
        # misclassify data points                 
        if y⁽ⁱ⁾(θ ⋅ x⁽ⁱ⁾ + θ₀) ≦ 0     
        then
            θ  = θ + y⁽ⁱ⁾ ⋅ x⁽ⁱ⁾
            θ₀ = θ₀ + y⁽ⁱ⁾
return θ, θ₀

Средний псевдокод

# Average Perceptron Algorithm# initialize θ, θ₀, sum_θ, sum_θ₀, and counter with 0
θ = 0  (vector)
θ₀ = 0 (scalar)
sum_θ = 0  (vector)
sum_θ₀ = 0 (scalar)
counter = 0# totally T epoches to iterate
for t = 1 .. T do                     
    # totally m data points    
    for i = 1 .. m do  
        # misclassify data points               
        if y⁽ⁱ⁾(θ ⋅ x⁽ⁱ⁾ + θ₀) ≦ 0     
        then
            θ  = θ + y⁽ⁱ⁾ ⋅ x⁽ⁱ⁾
            θ₀ = θ₀ + y⁽ⁱ⁾        sum_θ = sum_θ + θ
        sum_θ₀ = sum_θ₀ + θ₀
        counter = counter + 1return (sum_θ/counter), (sum_θ₀/counter)

Пегас Псевдокод

# Pegasos Algorithm# initialize θ, θ₀, and counter with 0
θ = 0  (vector)
θ₀ = 0 (scalar)
counter = 0# totally T epoches to iterate
for t = 1 .. T do 
    # totally m data points                    
    for i = 1 .. m do                 
        counter = counter + 1
        η = 1/√counter 
         
        if y⁽ⁱ⁾(θ⋅x⁽ⁱ⁾ + θ₀) ≦ 1    
        then
            θ  = (1 - ηλ)θ + ηy⁽ⁱ⁾⋅x⁽ⁱ⁾
            θ₀ = θ₀ + ηy⁽ⁱ⁾
        else
        then
            θ  = (1 - ηλ)θ
            θ₀ = θ₀return θ,  θ₀
  • Здесь реализован стохастический градиентный спуск, который обновляет параметры после повторения каждого наблюдения. Также мы пытаемся получить график, который показывает сравнительные цифры, где все три типа персептрона отображают границу решения для каждой итерации.

Как бы ни выглядели репозитории простого исполнения, разобраться в них гораздо важнее и сложнее. Так что нахожу способ выучить их буквально, а не просто грабя. Смотрите и другие мои статьи.

Буду очень признателен, если вы оставите заметку, если вы дочитали до конца. Любые рекомендации и мысли приветствуются.

Удачи в обучении!!! 💪
Шайли Джейн

Станьте частью моего сообщества в Instagram 👇