News & Events
초보자를 위한 데이터 사이언스: Python에서 단순 선형 회귀를 프로그래밍하는 가장 간단한 방법
- 2021년 3월 25일
- Posted by: 인사이트캠퍼스
- Category: 금융/AI/IT 기사
*이 기사는 BetterProgramming에 작성된 Mohammed Ayar의 글을 번역하였습니다.
선형 회귀를 너무 어렵게 생각하지 마세요. 이는 선형 모델 일 뿐입니다. 더 간단한 용어로, 가장 적합한 라인입니다.
Photo by William Warby on Unsplash
선형 회귀는 일반적으로 통계 모델링에서 입력 변수(x)와 출력 변수(y) 간의 관계를 특성화하는 데 사용됩니다. 이것은 일반적으로 머신러닝(ML)에서 데이터 세트의 값을 예측할 수있는 선형 모델을 생성하는 데 사용됩니다.
이 기사의 목적은 다음과 같습니다.
- ML에서 단순 선형 회귀의 기본을 설명합니다.
- 모델 품질의 척도로 최소 제곱 오차(LSE, least squared error)를 사용합니다.
- ML 전문 용어에 익숙해지도록 합니다.
- LSE 및 단순 선형 회귀를 구현하여 Python을 사용한 값의 수학적 모델을 찾습니다.
선형 회귀
머신러닝의 단순 선형 회귀
이 방정식은 통계 모델링에 사용되는 직선 방정식 y = mx + c와 매우 유사합니다. 이 둘은 두 개의 변수를 갖는(bivariate) 데이터에 대한 선형 모델을 만드는 것을 목표로한다는 점에서 비슷합니다. 두 개의 변수를 갖는 데이터는 기본적으로 2 개의 변수가 있으며, 두 변수는 일반적으로 (x, y) 서로 쌍을 이룹니다. 통계 모델링과 달리 머신러닝은 일반적으로 모든 차원에 대해 초평면(hyperplane)을 설명하는 데 사용할 수 있기 때문에 이 형식에서 선형 모델을 나타냅니다.
ML의 단순 선형 회귀 모델은 다음과 같이 작성할 수도 있습니다.
⠀⠀⠀⠀⠀⠀⠀y= b₀ + b₁(x) ⠀⠀⠀⠀⠀⠀⠀or ⠀⠀⠀⠀⠀⠀⠀⠀⠀y= ax + b
단순 선형 회귀 및 최소 제곱 오차 :
두 개의 변수를 갖는 데이터에 대한 Machine Learning에서 가장 적합한 선형 모델을 찾으려면 잔차(residual)에서 최소 제곱 오차의 합(minimum sum of squared errors)을 계산하는 LSE(Least Squared Error) 방법을 사용할 수 있습니다.
Least Squared Error
- 잔차(Residual)는 보라색 점으로 표시되는 데이터 포인트를 설명하는 데 사용되는 용어입니다.
- 오차(Error)는 모델에서 잔차까지의 거리를 설명하는 데 사용되는 용어입니다.
이 방정식을 단순화하고 재정렬하여 가장 적합한 선형 모델을 제공하는 절편 w와 기울기 β를 찾을 수 있습니다.
Equation to find the intercept
Equation to find the slope
방정식을 분석해 보겠습니다.
- x̅ ⠀는 모든 x 값의 평균입니다 .⠀⠀⠀⠀⠀
- y̅ ⠀는 모든 y 값의 평균입니다.
- ∑는 (x — x̅)의 각 값에서 얻은 결과의 합입니다.
- ∑는 (y — y̅)의 각 값에서 얻은 결과의 합입니다.
*는 dot product을 나타내는 데 사용된다는 점에 유의해야합니다. 이것은 행렬의 곱셈을 수반합니다. 지금은 걱정하지 마세요. 여기에서 자세히 알아볼 수 있습니다.
평균 제곱 오차(Mean Squared Error) 및 제곱 평균 오차(Root Mean Squared)와 같은 가장 적합한 모델을 찾는 다른 방법이 있습니다.
Python 프로그래밍
이 섹션에서는 LSE를 구현하는 기능의 기본 단계를 세분화하여 초보자도 쉽게 따라할 수 있도록 하겠습니다. 이 기능을 다음과 같은 기능으로 나눈다.
- Read File: 데이터를 가져 오기 위해 생성되었습니다.
- Splitting the Data: 데이터를 x 및 y 열로 분할하기 위해 생성됨
- Mean: x와 y의 평균값 찾기
- Deviation: 주어진 평균에서 편차 찾기
- Deviation squared: 주어진 평균에서 편차 찾기^2
- Beta: 베타 찾기
- Least Squared Error: 모든 함수를 통합하여 최상의 모델 찾기
def read_file(fileName):
with open(fileName, “r”) as file: #open file, to read ‘r’
data = []
for row in file: #get each row
arr = row.split(‘,’) #put each row in an array, and split it with a comma
list_all = [int(i) for i in arr] #forloop, to change datatype to int(), as inputted as str()
data.append(list_all) #add these values to an array called data – line 3
return(data)
Read file
def two_columns(data):
xvals = [] #create an array to append vals
yvals = [] #create an array to append vals
for val in data: #val is each row of the data (x,y)
xvals.append(val[0]) #val[x]
yvals.append(val[1]) #val[y]
return(xvals,yvals)
Split columns into x and y arrays function
def mean(val):
mean = sum(val)/len(val) #sum of all numbers, divided by length
return(mean)
Mean
def deviation(val, mean): | |
dev = [] | |
for each in val: | |
dev.append(each – mean) #deviation of each val from the mean | |
return (dev) |
Deviation
def dev_sqt(val, mean):
dev = []
for each in val:
i = each – mean
dev.append(i**2) #deviation squared
return (dev)
Deviation Squared
def beta(ymean, xmean, w):
beta = ymean – (xmean * w) #equation for beta
return(beta)
Β
import numpy as np
def LeastSquaredError(xvals, yvals):
#mean values
xmean = mean(xvals)
ymean = mean(yvals)
#numpy arrays, allowing us to calculate the dot product
xdev = np.array(deviation(xvals, xmean))
ydev = np.array(deviation(yvals, ymean))
xdev_sqt = np.array(sqt_vals(xvals, xmean))
#getting the slope w
w = (sum(xdev * ydev)/sum(xdev_sqt))
#getting the intercept beta
b = beta(ymean, xmean, w)
#formatting the equation for output
equation = “y = {:.2f}? + {:.2f}”.format(w,b)
print(“The best fit model for your given ? and y values is: “, equation)
return(“The value of w is {:.2f} & The value of ? is {:.2f} “.format(w,b))
Least Squared Error to find the best model
이 코드에서 반환되는 것은 w와 α의 값으로, 최적 적합 모형의 방정식을 표시합니다.
이 게시물이 도움이 되었기를 바랍니다! 🙂 ❤
REFRENCES
번역 – 핀인 사이트 인턴 연구원 김현우
원문링크 ->