๐Ÿ“—
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
  • ์„ ํ˜• ํšŒ๊ท€ (linear regression)
  • ์ตœ์†Œ ์ œ๊ณฑ๋ฒ• (method of least squares)
  • ์ตœ์†Œ ์ œ๊ณฑ๋ฒ•์„ ์ด์šฉํ•œ ์„ ํ˜• ํšŒ๊ท€
  • ํ‰๊ท  ์ œ๊ณฑ ์˜ค์ฐจ (mean square error: MSE)
  • ํ‰๊ท  ์ œ๊ณฑ ์˜ค์ฐจ๋ฅผ ์ด์šฉํ•œ ์„ ํ˜• ํšŒ๊ท€

Was this helpful?

  1. deep-learning

Linear Regression

PreviousGradient DescentNextbackPropagation

Last updated 4 years ago

Was this helpful?

์„ ํ˜• ํšŒ๊ท€ (linear regression)

: ๊ฐ€์žฅ ํ›Œ๋ฅญํ•œ ์˜ˆ์ธก์„  ๊ธ‹๊ธฐ

  • ๋…๋ฆฝ ๋ณ€์ˆ˜ x ๋ฅผ ์‚ฌ์šฉํ•ด ์ข…์† ๋ณ€์ˆ˜ y์˜ ์›€์ง์ž„์„ ์˜ˆ์ธกํ•˜๊ณ  ์„ค๋ช…ํ•˜๋Š” ์ž‘์—…

  • x ๊ฐ’๋งŒ์œผ๋กœ๋„ y ๊ฐ’์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ๋‹จ์ˆœ ์„ ํ˜• ํšŒ๊ท€ (simple linear regresssion)

  • x ๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋Š” ๋‹ค์ค‘ ์„ ํ˜• ํšŒ๊ท€ (multiple linear regression)

  • ์ผ์ฐจ ํ•จ์ˆ˜ ๊ทธ๋ž˜ํ”„์˜ ์‹ Hypothesis : H(x) = Wx + b y = ax + b

์ตœ์†Œ ์ œ๊ณฑ๋ฒ• (method of least squares)

: ์ •ํ™•ํ•œ ์ง์„ ์„ ๊ธ‹์„ ์ˆ˜ ์žˆ๋Š” ๊ณต์‹

  • x์˜ ํŽธ์ฐจ(๊ฐ ๊ฐ’๊ณผ ํ‰๊ท ๊ณผ์˜ ์ฐจ์ด)๋ฅผ ์ œ๊ณฑํ•ด์„œ ํ•ฉํ•œ ๊ฐ’์„ ๋ถ„๋ชจ๋กœ ๋†“๊ณ , x์™€ y์˜ ํŽธ์ฐจ๋ฅผ ๊ณฑํ•ด์„œ ํ•ฉํ•œ ๊ฐ’์„ ๋ถ„์ž๋กœ ๋†“์œผ๋ฉด ๊ธฐ์šธ๊ธฐ๊ฐ€ ๋‚˜์˜จ๋‹ค

    ex) ๊ณต๋ถ€๋Ÿ‰์— ๋”ฐ๋ฅธ ์„ฑ์ ์„ ์˜ˆ์ธก

TIP) ์ตœ์†Œ ์ œ๊ณฑ๋ฒ•์€ ์ฃผ์–ด์ง„ x์˜ ๊ฐ’์ด ํ•˜๋‚˜์ผ ๋•Œ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ x๊ฐ€ ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์„ ์ด์šฉํ•œ๋‹ค

์ตœ์†Œ ์ œ๊ณฑ๋ฒ•์„ ์ด์šฉํ•œ ์„ ํ˜• ํšŒ๊ท€

import numpy as np

# x ๊ฐ’๊ณผ y๊ฐ’
x=[2, 4, 6, 8]
y=[81, 93, 91, 97]

# x์™€ y์˜ ํ‰๊ท ๊ฐ’ 
# mean () : ๋ชจ๋“  ์›์†Œ์˜ ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ๋„˜ํŒŒ์ด ํ•จ์ˆ˜ 
mx = np.mean(x)
my = np.mean(y)
print("x์˜ ํ‰๊ท ๊ฐ’:", mx)
print("y์˜ ํ‰๊ท ๊ฐ’:", my)

# ๊ธฐ์šธ๊ธฐ ๊ณต์‹์˜ ๋ถ„๋ชจ
divisor = sum([(mx - i)**2 for i in x])
# sum()์€ ์‹œ๊ทธ๋งˆ์— ํ•ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜ ์ด๋‹ค 
# **2 ๋Š” ์ œ๊ณฑ์„ ๊ตฌํ•˜๋ผ๋Š” ์˜๋ฏธ 
# for i in x๋Š” x์˜ ๊ฐ ์›์†Œ๋ฅผ ํ•œ๋ฒˆ์”ฉ i ์ž๋ฆฌ์— ๋Œ€์ž…ํ•˜๋ผ๋Š” ์˜๋ฏธ 

# ๊ธฐ์šธ๊ธฐ ๊ณต์‹์˜ ๋ถ„์ž : (x - xํ‰๊ท )*(y - yํ‰๊ท )์˜ ํ•ฉ
def top(x, mx, y, my):
    d = 0
    for i in range(len(x)):
        d += (x[i] - mx) * (y[i] - my)
    return d
dividend = top(x, mx, y, my)

print("๋ถ„๋ชจ:", divisor)
print("๋ถ„์ž:", dividend)

# ๊ธฐ์šธ๊ธฐ์™€ y ์ ˆํŽธ ๊ตฌํ•˜๊ธฐ
a = dividend / divisor
b = my - (mx*a)

# ์ถœ๋ ฅ์œผ๋กœ ํ™•์ธ
print("๊ธฐ์šธ๊ธฐ a =", a)
print("y ์ ˆํŽธ b =", b)
  • ์ถœ๋ ฅ ๊ฐ’

    x์˜ ํ‰๊ท ๊ฐ’: 5.0

    y์˜ ํ‰๊ท ๊ฐ’: 90.5

    ๋ถ„๋ชจ: 20.0

    ๋ถ„์ž: 46.0

    ๊ธฐ์šธ๊ธฐ a = 2.3

    y ์ ˆํŽธ b = 79.0

ํ‰๊ท  ์ œ๊ณฑ ์˜ค์ฐจ (mean square error: MSE)

: ์ตœ์†Œ ์ œ๊ณฑ๋ฒ•์„ ์ด์šฉํ•ด ๊ฐ€์žฅ ํ›Œ๋ฅญํ•œ ์ง์„ ์„ ๊ทธ๋ ธ์ง€๋งŒ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž…๋ ฅ ๊ฐ’์„ ๊ณ„์‚ฐํ•  ๋•Œ๋Š” ์ž„์˜์˜ ์„ ์„ ๊ทธ๋ฆฌ๊ณ  ๋‚œ ํ›„, ์ด ์„ ์ด ์–ผ๋งˆ๋‚˜ ์ž˜ ๊ทธ๋ ค์กŒ๋Š”์ง€๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ ์กฐ๊ธˆ์”ฉ ์ˆ˜์ •ํ•ด ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฅผ์œ„ํ•ด ์ฃผ์–ด์ง„ ์„ ์˜ ์˜ค์ฐจ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ์˜ค์ฐจ ํ‰๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•˜๋ฉฐ, ํ‰๊ท  ์ œ๊ณฑ ์˜ค์ฐจ๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

  • ์ž„์˜์˜ ์ง์„ ์„ ๊ทธ์–ด ์ด์— ๋Œ€ํ•œ ํ‰๊ท  ์ œ๊ณฑ ์˜ค์ฐจ๋ฅผ ๊ตฌํ•˜๊ณ , ์ด ๊ฐ’(์˜ค์ฐจ)์„ ๊ฐ€์žฅ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” a์™€ b ๊ฐ’์„ ์ฐพ์•„ ๊ฐ€๋Š” ์ž‘์—…

  • y^๋Š” x์— ๋Œ€์‘ํ•˜๋Š” '์‹ค์ œ๊ฐ’'์ด๊ณ  y๋Š” x๊ฐ€ ๋Œ€์ž…๋˜์—ˆ์„ ๋•Œ ์ง์„ ์˜ ๋ฐฉ์ •์‹์„ ๋งŒ๋“œ๋Š” '์˜ˆ์ธก๊ฐ’'์ด๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, 2์‹œ๊ฐ„ ๊ณต๋ถ€ํ–ˆ์„ ๋•Œ์˜ ์‹ค์ œ ๋‚˜์˜จ ์ ์ˆ˜(00์ )์™€ ๊ทธ๋ž˜ํ”„ y = ax + b์‹์— x = 0 ๋ฅผ ๋Œ€์ž…ํ–ˆ์„ ๋•Œ (00์ )์˜ ์ฐจ์ด๋ฅผ ์˜ค์ฐจ๋ผ ํ•œ๋‹ค

ํ‰๊ท  ์ œ๊ณฑ ์˜ค์ฐจ๋ฅผ ์ด์šฉํ•œ ์„ ํ˜• ํšŒ๊ท€

  • ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๊ณต๋ถ€ํ•œ ์‹œ๊ฐ„๊ณผ ์ด์— ๋”ฐ๋ฅธ ์„ฑ์ ์„ ํ‰๊ท  ์ œ๊ณฑ ์˜ค์ฐจ๋ฅผ ์ด์šฉ

import numpy as np

#๊ฐ€์ƒ์˜ ๊ธฐ์šธ๊ธฐ a์™€ y ์ ˆํŽธ b
fake_a_b=[3,76]

# x ๊ฐ’๊ณผ y๊ฐ’
data = [[2, 81], [4, 93], [6, 91], [8, 97]]
x = [i[0] for i in data]
y = [i[1] for i in data]

# y=ax + b์— a,b ๊ฐ’ ๋Œ€์ž…ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜
def predict(x):
   return fake_a_b[0]*x + fake_a_b[1]

# MSE ํ•จ์ˆ˜ (ํ‰๊ท  ์ œ๊ณฑ ๊ณต์‹) 
def mse(y, y_hat):
   return ((y - y_hat) ** 2).mean()
   # ์˜ˆ์ธก๊ฐ’(y_hat)๊ณผ ์‹ค์ œ ๊ฐ’(y)์„ ๊ฐ๊ฐ mse ()๋ผ๋Š” ํ•จ์ˆ˜์˜ y_hat์™€ y์ž๋ฆฌ์— ์ž…๋ ฅํ•ด์„œ ํ‰๊ท  ์ œ๊ณฑ์„ ๊ตฌํ•œ๋‹ค 

# MSE ํ•จ์ˆ˜๋ฅผ ๊ฐ y๊ฐ’์— ๋Œ€์ž…ํ•˜์—ฌ ์ตœ์ข… ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
def mse_val(predict_result,y):
   return mse(np.array(predict_result), np.array(y))

# ์˜ˆ์ธก๊ฐ’์ด ๋“ค์–ด๊ฐˆ ๋นˆ ๋ฆฌ์ŠคํŠธ
predict_result = []

# ๋ชจ๋“  x๊ฐ’์„ ํ•œ ๋ฒˆ์”ฉ ๋Œ€์ž…ํ•˜์—ฌ predict_result ๋ฆฌ์ŠคํŠธ์™„์„ฑ.
for i in range(len(x)):
   predict_result.append(predict(x[i]))
   print("๊ณต๋ถ€์‹œ๊ฐ„=%.f, ์‹ค์ œ์ ์ˆ˜=%.f, ์˜ˆ์ธก์ ์ˆ˜=%.f" % (x[i], y[i], predict(x[i])))

# ์ตœ์ข… MSE ์ถœ๋ ฅ
print("MSE ์ตœ์ข…๊ฐ’: " + str(mse_val(predict_result,y)))

์ถœ๋ ฅ๊ฐ’ ๊ณต๋ถ€์‹œ๊ฐ„=2, ์‹ค์ œ์ ์ˆ˜=81, ์˜ˆ์ธก์ ์ˆ˜=82 ๊ณต๋ถ€์‹œ๊ฐ„=4, ์‹ค์ œ์ ์ˆ˜=93, ์˜ˆ์ธก์ ์ˆ˜=88 ๊ณต๋ถ€์‹œ๊ฐ„=6, ์‹ค์ œ์ ์ˆ˜=91, ์˜ˆ์ธก์ ์ˆ˜=94 ๊ณต๋ถ€์‹œ๊ฐ„=8, ์‹ค์ œ์ ์ˆ˜=97, ์˜ˆ์ธก์ ์ˆ˜=100 MSE ์ตœ์ข…๊ฐ’: 11.0

MSE
methodOfLeastSquares