안녕하십니까 다제입니다.
오늘은 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가 왜 나오게 되었는지?
그리고 그게 머하는건지? 에 대한 개념을 잡아드리겠습니다.
- 선형회귀란 우리가 가진 데이터에 적절한 일차방정식을 찾는 것입니다.
- 이렇게 적절한 일차방정식을 찾아가는 과정에서 a방정식 맞을까? b방정식이 맞을까?
- 이렇게 하나하나 도입해보는 함수들을 가설함수라고 말합니다.
- 여러번 시도를 하다보면 가설함수가 많아질텐데 그중 가장 적합한 것을 어떻게 찾을 수 있을까?
- 이를 한번에 비교할 수 있는 방법이 있는데 이를 손실함수라고 합니다.
-
손실이 적게 나와야 우리가 만든 모델이 적합하다는 것을 의미한다.(편차 이야기와 MSE를 생각하시면 됩니다.)
-
지금까지는 이러한 손실을 줄이기 위해서 우리는 경사하강법(linear regression)을 사용하였지만, 손실을 줄이는 방법은 경사하강법만 있는게 아닙니다.
- 여러번 반복해서 찾아가기 귀찮으니까 한번에 팍! 손실이 최소가 되는 부분으로 가는 방법이 없을까?라는 질문을 해결하기 위해 나온 방법이 정규방정식(OLS)입니다.
- 이는 우리가 가지고 있는 데이터를 미분하여 세타값이 0이 되는 부분을 찾으면 된다! 그게 정규방정식이다
이렇게 OLS가 나오게된 것입니다.
모든 학문은 탄생된 원인이 있습니다.
즉, 그 시대사람들이 고민했던 고민이 있습니다.
우리가 그 고민을 조금만 생각해보면 모든 학문이
줄을 지어 연결됩니다.
저는 이렇게 그물을 만들어서 공부하는 걸 좋아합니다.
안그러면 까먹잖아요..........
다시 마음을 차분하게 하여 공부에 집중하셨으면 좋겠습니다.
오늘도 읽어주셔서 너무 감사합니다.
'Code > 머신러닝(ML)' 카테고리의 다른 글
[DataScience]선형회귀(Linear regression)로 분류를 하지 않는 이유 (0) | 2021.01.30 |
---|---|
[DataScience] 분산/편향 트레이드오프(Multiple Linear Regression) (0) | 2021.01.29 |
[DataScience] 머신러닝, k means clustering( feat. just go ) (1) | 2021.01.18 |
[DataScience] 머신러닝을 위한 차원축소 ( feat. PCA) (0) | 2021.01.18 |
[DataScience] 머신러닝을 위한 미분 ( feat. 평균변화율 -> 순간변화율 ) (6) | 2021.01.12 |