๐Ÿ“—
JunegLee's TIL
  • TIL
  • python
    • class
    • String Basic
    • regularExpression
    • String function
    • Generator
    • String format
    • getset
    • module
    • while
    • numpy
    • print()
    • matplotlib
    • for
    • Boolean
    • tuple
    • package
    • input(variable)
    • list
    • if
    • file
    • type()
    • pandas
    • function
    • dictionary
    • ๊ตฌ๋ฌธ ์˜ค๋ฅ˜์™€ ์˜ˆ์™ธ
    • builtinFunction
    • Constructor
  • algorithm
    • sort
      • mergeSort
      • insertionSort
      • bubbleSort
      • heapSort
      • quickSort
      • selectionSort
    • recursion
    • Greedy
    • DepthFirstSearch
    • basic
      • DataStructure
    • hash
    • BreadthFirstSearch
  • tensorflow
    • keras
      • layers
        • Flatten
        • Flatten
        • Dense
        • Dense
        • Conv2D
        • Conv2D
    • tensorflow1x
    • tensorflow2x
  • DB
    • setting
    • join
    • subQuery
    • overview
  • deep-learning
    • neuralNetwork
    • perceptron
    • neuralNetworkLearning
    • convolution neural network
    • Gradient Descent
    • Linear Regression
    • backPropagation
    • logistic regression
    • overview
  • textPreprocessing
    • overview
  • java
    • basics
      • generic
      • Variable
      • String
    • theory
      • Object Oriented Programing
  • NLP
    • Embedding
    • Natural Language Processing
Powered by GitBook
On this page
  • ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ (logistic regression)
  • ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜
  • ๋กœ๊ทธ ํ•จ์ˆ˜
  • ์ฝ”๋”ฉ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€

Was this helpful?

  1. deep-learning

logistic regression

PreviousbackPropagationNextoverview

Last updated 4 years ago

Was this helpful?

๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ (logistic regression)

: ์ฐธ์ธ์ง€ ๊ฑฐ์ง“์ธ์ง€๋ฅผ ๊ตฌ๋ถ„

  • ์ฐธ(1) ๊ณผ ๊ฑฐ์ง“(0) ์‚ฌ์ด๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” s์ž ํ˜•ํƒœ์˜ ์„ ์„ ๊ทธ์–ด ์ฃผ๋Š” ์ž‘์—…

์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜

  • a๋Š” ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์‚ฌ๋„๋ฅผ ๊ฒฐ์ •, a๊ฐ€ ์ปค์ง€๋ฉด ๊ฒฝ์‚ฌ๊ฐ€ ์ปค์ง€๊ณ , a ๊ฐ’์ด ์ž‘์•„์ง€๋ฉด ๊ฒฝ์‚ฌ๊ฐ€ ์ž‘์•„์ง„๋‹ค

  • b๋Š” ๊ทธ๋ž˜ํ”„์˜ ์ขŒ์šฐ ์ด๋™์„ ์˜๋ฏธ, b ๊ฐ’์ด ํด ๋•Œ ์ขŒ๋กœ ์ด๋™, b ๊ฐ’์ด ์ž‘์•„์งˆ ๋•Œ ์šฐ๋กœ ์ด๋™

  • a์™€ b์˜ ๊ฐ’์— ๋”ฐ๋ผ ์˜ค์ฐจ๊ฐ€ ๋ณ€ํ•˜๋ฉฐ, a ๊ฐ’์ด ์ž‘์•„์ง€๋ฉด ์˜ค์ฐจ๋Š” ๋ฌดํ•œ๋Œ€๋กœ ์ปค์ง„๋‹ค.

  • ๊ทธ๋Ÿฐ๋ฐ a ๊ฐ’์ด ์ปค์ง„๋‹ค๊ณ  ํ•ด์„œ ์˜ค์ฐจ๊ฐ€ ๋ฌดํ•œ๋Œ€๋กœ ์ปค์ง€์ง€๋Š” ์•Š๋Š”๋‹ค

  • ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜์—์„œ a์™€ b์˜ ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์ด๋‹ค

  • ์‹ค์ œ๊ฐ’์— ๋”ฐ๋ผ ์˜ˆ์ธก๊ฐ’์— ๊ฐ€๊นŒ์›Œ ์ง€๋ฉด ์˜ค์ฐจ๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋•Œ ๊ณต์‹์€ ๋กœ๊ทธ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค

๋กœ๊ทธ ํ•จ์ˆ˜

  • ์‹ค์ œ ๊ฐ’์ด 1์ผ ๋•Œ -logh ๊ทธ๋ž˜ํ”„๋ฅผ ์“ฐ๊ณ , 0์ผ ๋•Œ๋Š” -log(1 - h)๊ทธ๋ž˜ํ”„๋ฅผ ์จ์•ผ ํ•œ๋‹ค

  • ์‹ค์ œ ๊ฐ’์ด y ์ผ ๋•Œ, ์ด ๊ฐ’์ด 1์ด๋ฉด, ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์˜ ์—†์ด์ง€๊ณ ,

  • ๋ฐ˜๋Œ€๋กœ 0์ด๋ฉด ์™ผ์ชฝ ๋ถ€๋ถ„์ด ์—†์–ด์ ธ์„œ ์‹ค์ œ ๊ฐ’์— ๋”ฐ๋ผ์„œ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ณ€ํ•œ๋‹ค

์ฝ”๋”ฉ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#๊ณต๋ถ€์‹œ๊ฐ„ X์™€ ์„ฑ์  Y์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
data = [[2, 0], [4, 0], [6, 0], [8, 1], [10, 1], [12, 1], [14, 1]]

x_data = [i[0] for i in data] # ๊ณต๋ถ€์‹œ๊ฐ„
y_data = [i[1] for i in data] # ์„ฑ์ 

#๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด ๋ด…๋‹ˆ๋‹ค.
plt.scatter(x_data, y_data)
plt.xlim(0, 15)
plt.ylim(-.1, 1.1)

# ๊ธฐ์šธ๊ธฐ a์™€ ์ ˆํŽธ b์˜ ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•ฉ๋‹ˆ๋‹ค.
a = 0
b = 0

#ํ•™์Šต๋ฅ ์„ ์ •ํ•ฉ๋‹ˆ๋‹ค.(์ž„์˜๋กœ ์ •ํ•จ)
lr = 0.05 

#์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
def sigmoid(x):
    return 1 / (1 + np.e ** (-x))

#๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
for i in range(2001):
    for x_data, y_data in data:
        a_diff = x_data*(sigmoid(a*x_data + b) - y_data)  # a์— ๊ด€ํ•œ ํŽธ๋ฏธ๋ถ„, ์•ž์จ ์ •์˜ํ•œ sigmoid ํ•จ์ˆ˜ ์‚ฌ์šฉ
        b_diff = sigmoid(a*x_data + b) - y_data           # b์— ๊ด€ํ•œ ํŽธ๋น„๋ถ„
        a = a - lr * a_diff                               # a๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด, a_diff์— ํ•™์Šต๋ฅ ์„ lr์„ ๊ณ ํ•ฉ ๊ฐ’์„ a์—์„œ ๋ป„ 
        b = b - lr * b_diff                               # b๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด, b_diff์— ํ•™์Šต๋ฅ ์„ lr์„ ๊ณ ํ•ฉ ๊ฐ’์„ b์—์„œ ๋ป„ 
        if i % 1000 == 0:    # 1000๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๋งˆ๋‹ค ๊ฐ x_data๊ฐ’์— ๋Œ€ํ•œ ํ˜„์žฌ์˜ a๊ฐ’, b๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
            print("epoch=%.f, ๊ธฐ์šธ๊ธฐ=%.04f, ์ ˆํŽธ=%.04f" % (i, a, b))


# ์•ž์„œ ๊ตฌํ•œ ๊ธฐ์šธ๊ธฐ์™€ ์ ˆํŽธ์„ ์ด์šฉํ•ด ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค ๋ด…๋‹ˆ๋‹ค.
plt.scatter(x_data, y_data)
plt.xlim(0, 15)
plt.ylim(-.1, 1.1)
x_range = (np.arange(0, 15, 0.1)) #๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ผ x๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.
plt.plot(np.arange(0, 15, 0.1), np.array([sigmoid(a*x + b) for x in x_range]))
plt.show()
epoch=0, ๊ธฐ์šธ๊ธฐ=-0.0500, ์ ˆํŽธ=-0.0250
epoch=0, ๊ธฐ์šธ๊ธฐ=-0.1388, ์ ˆํŽธ=-0.0472
epoch=0, ๊ธฐ์šธ๊ธฐ=-0.2268, ์ ˆํŽธ=-0.0619
epoch=0, ๊ธฐ์šธ๊ธฐ=0.1201, ์ ˆํŽธ=-0.0185
epoch=0, ๊ธฐ์šธ๊ธฐ=0.2374, ์ ˆํŽธ=-0.0068
epoch=0, ๊ธฐ์šธ๊ธฐ=0.2705, ์ ˆํŽธ=-0.0040
epoch=0, ๊ธฐ์šธ๊ธฐ=0.2860, ์ ˆํŽธ=-0.0029
epoch=1000, ๊ธฐ์šธ๊ธฐ=1.4978, ์ ˆํŽธ=-9.9401
epoch=1000, ๊ธฐ์šธ๊ธฐ=1.4940, ์ ˆํŽธ=-9.9411
epoch=1000, ๊ธฐ์šธ๊ธฐ=1.4120, ์ ˆํŽธ=-9.9547
epoch=1000, ๊ธฐ์šธ๊ธฐ=1.4949, ์ ˆํŽธ=-9.9444
epoch=1000, ๊ธฐ์šธ๊ธฐ=1.4982, ์ ˆํŽธ=-9.9440
epoch=1000, ๊ธฐ์šธ๊ธฐ=1.4984, ์ ˆํŽธ=-9.9440
epoch=1000, ๊ธฐ์šธ๊ธฐ=1.4985, ์ ˆํŽธ=-9.9440
epoch=2000, ๊ธฐ์šธ๊ธฐ=1.9065, ์ ˆํŽธ=-12.9489
epoch=2000, ๊ธฐ์šธ๊ธฐ=1.9055, ์ ˆํŽธ=-12.9491
epoch=2000, ๊ธฐ์šธ๊ธฐ=1.8515, ์ ˆํŽธ=-12.9581
epoch=2000, ๊ธฐ์šธ๊ธฐ=1.9057, ์ ˆํŽธ=-12.9514
epoch=2000, ๊ธฐ์šธ๊ธฐ=1.9068, ์ ˆํŽธ=-12.9513
epoch=2000, ๊ธฐ์šธ๊ธฐ=1.9068, ์ ˆํŽธ=-12.9513
epoch=2000, ๊ธฐ์šธ๊ธฐ=1.9068, ์ ˆํŽธ=-12.9513

-๋งŒ์•ฝ ์—ฌ๊ธฐ์— ์ž…๋ ฅ ๊ฐ’์ด ์ถ”๊ฐ€๋˜์–ด ์„ธ๊ฐœ ์ด์ƒ์˜ ์ž…๋ ฅ ๊ฐ’์„ ๋‹ค๋ฃฌ๋‹ค๋ฉด, ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์†Œํ”„ํŠธ๋งฅ์Šค (softmax)๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์จ์•ผ ํ•œ๋‹ค

sigmoidfunction
logfunction
logisticregression