코딩일기

[DataScience] 제발! 쉽게 가자~ Linear regression야! 본문

Code/머신러닝(ML)

[DataScience] 제발! 쉽게 가자~ Linear regression야!

daje 2021. 1. 28. 23:37
728x90
반응형

https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols_ridge_variance.html#sphx-glr-auto-examples-linear-model-plot-ols-ridge-variance-py

 

 

안녕하십니까 다제입니다. 

 

오늘은 Linear regression에 대해서 공부를 진행해보도록 하겠습니다. 

 

저는 선형회귀를 공부하는데 정말 많이 많이 많이 어려웠습니다. 

 

그러나, 큰 그림을 잡고나서 다시 보니 생각보다 간단한 거구나?

 

하는 마음이 들었습니다. 

 

이에, 학습하시는 자료와 데이터는 분명히 있을거라 생각하고 

 

제가 이해한 선형회귀에 대한 큰 그림을 아래와 같이 설명드리겠습니다. 

 

 


개요

-. Linear regression(선형회귀)은 무엇을 하는 것인가?

-. Linear regression(선형회귀)을 위해 알아할 것들은 무엇이 있는가?

-. OLS(최소승자법)는 왜 나온거에요? 그게 무엇이죠??

 


1.  Linear regression(선형회귀) is So What?

 

 

위 그림은 방수에 대한 집값을 점을 표현한 그래프 입니다. 

 

선형회귀라는 것은 위 그림에서 데이터를 가장 적절하게 대표하는 노란선을 찾는 것이라고 생각하시면 됩니다. 

 

"가장 적절하게 선을 찾는 것"이라는 의미는 

위 표시된 노란색 선이 이리 저리 움직이면서

파란색 점들과의 간격이 최소한의 오차를 낼 수 있는 곳에 찾는 것이라고 생각하시면 됩니다. 

 

그럼 또 의문이 들죠? 그 위치를 찾아서 멀하려고?

네! 맞습니다. 의문이 드시는게 당연합니다. 

 

저희는 최소한의 오차를 만들어내는 직선을 찾아

저희에게 주어지지 않은 집값 정보를 예측해보고자 하는 것입니다. 

 

더 나아가 이 집의 가격이 오를까?

오르지 않을까? 이런 것도 예측해볼 수 있겠죠?

(물론... 성공할지 못할지는... 장담이 안됩니다...)

 


2.  Linear regression(선형회귀)을 위해 알아야 할 것들은?

 

 

일단 뉴비들도 이해할 수 있도록 최소한으로, 또 가장 이해하기 쉽게 기재해보겠습니다. 

 

일단 위에서 "노란색 선이 이리저리 움직인다"라고 표현했습니다. 

 

이리저리 움직이는 것은

노란색 선의 일차방정식을 가정해보고 그 일차방정식과 점들간의 

오차(편차)를 계산하여 가장 적은 편차를 나타내는 모델을 선정하는 것입니다. 

(이때 들어가는 개념 : 경사하강법, OLS, 미분, 행렬)

 

그러나, 처음 배우실때는 저 모든걸 알고 할 수는 없습니다. 

또한, 실제 현장에서는 저희가 수십번 계산을 하고 선을 그리는 일은 없습니다. 

 

이미 착하고 훌륭한 개발자분들께서 저희를 위해 코드 몇줄만 치면 바로 될 수 있도록 다 구현을 해놓으셨습니다. 

 

백번 말로 하는 것보다 한번 보여드릴게요~

아래 코드가 전부 입니다. 

 

1. 무엇을 하시든 예측해보고 싶은 값을 선정하고

2. 집값을 잘 나타낼 수 있는 특징(역세권, 학교와의 거리 등)을 선택합니다. ( 상관관계를 이용하여 찾을 수 있겠죠?)

3. 모델이 학습할 데이터와 모델이 분석할 데이터를 나누어줍니다. 

4. 모델에게 학습을 시킵니다. 

5. 학습된 모델을 가지고 예측을 해봅니다. 

6. 모델이 잘 학습되었는지 MSE(평균 제곱근 오차)라는 방식으로 점검을 해봅니다. -> 위에서 말하는 편차를 계산하는 방법 

 

from sklearn.linear_model import LinearRegression # 선형회귀 모델 import함 
from sklearn.model_selection import train_test_split # 데이터를 train과 test set으로 자동 분류해주는 것 
from sklearn.metrics import mean_squared_error # MSE를 만든 선형회귀 모델을 평가하고자 함  


url = "https://raw.githubusercontent.com/daje0601/pandas_study/main/kc_house_data.csv"

df = pd.read_csv(url)
df.head()

#데이터 준비 
# 우리가 예측해보고 싶은 값(타켓이라고 많이 말합니다.)
y = df[['price']]

# 우리가 예측하기 위해 사용되는 특징
X = df[['sqft_living']]

# 학습시킬 데이터와 분석할 데이터를 자동으로 나누는 코드 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=5 )

model = LinearRegression() # 모델 정의 
model.fit(X_train,y_train) # 모델 학습 
y_test_prediction = model.predict(X_test) # 모델 예측 

mean_squared_error(y_test, y_test_prediction) ** 0.5 # 모델 평가

 


자 위 글을 읽어보신 후 다시 여러분이 학습하고 계셨던 곳으로

가셔서 다시 천천히 읽어보기 훨씬 와닿을 거라 확신합니다. 

 

제가 그랬거든요....! 

 

저는 여러분에게 큰 그림을 그려드리기 위해 최선을 다하겠습니다. 

또한, 이 다음에 배울 내용과 유기적으로 연결시켜 드리는 걸 목표로 하고 있습니다.

 

모든 디테일을 다 설명할 수 없어 죄송합니다. 

 

 


이 다음에 배우실 내용은 OLS이실겁니다. 

보통 그렇거든요... 아닐 수도 있쬬..

 

제가 OLS가 왜 나오게 되었는지? 

그리고 그게 머하는건지? 에 대한 개념을 잡아드리겠습니다. 

 

  1. 선형회귀란 우리가 가진 데이터에 적절한 일차방정식을 찾는 것입니다.
  2. 이렇게 적절한 일차방정식을 찾아가는 과정에서 a방정식 맞을까? b방정식이 맞을까?
  3. 이렇게 하나하나 도입해보는 함수들을 가설함수라고 말합니다.
  4. 여러번 시도를 하다보면 가설함수가 많아질텐데 그중 가장 적합한 것을 어떻게 찾을 수 있을까?
  5. 이를 한번에 비교할 수 있는 방법이 있는데 이를 손실함수라고 합니다.
  6. 손실이 적게 나와야 우리가 만든 모델이 적합하다는 것을 의미한다.(편차 이야기와 MSE를 생각하시면 됩니다.)

  7. 지금까지는 이러한 손실을 줄이기 위해서 우리는 경사하강법(linear regression)을 사용하였지만, 손실을 줄이는 방법은 경사하강법만 있는게 아닙니다.

  8. 여러번 반복해서 찾아가기 귀찮으니까 한번에 팍! 손실이 최소가 되는 부분으로 가는 방법이 없을까?라는 질문을 해결하기 위해 나온 방법이 정규방정식(OLS)입니다. 
  9. 이는 우리가 가지고 있는 데이터를 미분하여 세타값이 0이 되는 부분을 찾으면 된다! 그게 정규방정식이다

 

이렇게 OLS가 나오게된 것입니다. 

모든 학문은 탄생된 원인이 있습니다. 

즉, 그 시대사람들이 고민했던 고민이 있습니다. 

 

우리가 그 고민을 조금만 생각해보면 모든 학문이 

줄을 지어 연결됩니다. 

 

저는 이렇게 그물을 만들어서 공부하는 걸 좋아합니다. 

안그러면 까먹잖아요..........

 

다시 마음을 차분하게 하여 공부에 집중하셨으면 좋겠습니다. 

오늘도 읽어주셔서 너무 감사합니다. 

728x90
반응형
Comments