본문 바로가기
데이터 사이언스/하계 AI 중급과정

Ch 3. Linear Regression(선형회귀)

by 수학과인데 공대생 2023. 7. 12.
728x90

선형회귀란?

 

선형회귀의 정의는 아래 포스팅을 참조바랍니다.

https://math-love.tistory.com/8

 

1. Linear Regression (선형 회귀)

머신러닝의 목적은 데이터의 알려진 속성들을 학습하여 예측 모델을 만드는데 있다. 이때 잘 찾아 낼 수 있는 가장 직관적이고 간단한 모델은 선(line)이다. 즉, 선형 회귀는 정돈된 데이터들을

math-love.tistory.com

 

 

MSE (Mean Squared Error)

 

 

 

선형 회귀 모델을 이용한 예측

지난 포스팅과 마찬가지로 물고기의 길이와 무게 데이터를 다루어 보겠습니다.

import numpy as np

fish_length = np.array(
    [8.4, 13.7, 15.0, 16.2, 17.4, 18.0, 18.7, 19.0, 19.6, 20.0,
     21.0, 21.0, 21.0, 21.3, 22.0, 22.0, 22.0, 22.0, 22.0, 22.5,
     22.5, 22.7, 23.0, 23.5, 24.0, 24.0, 24.6, 25.0, 25.6, 26.5,
     27.3, 27.5, 27.5, 27.5, 28.0, 28.7, 30.0, 32.8, 34.5, 35.0,
     36.5, 36.0, 37.0, 37.0, 39.0, 39.0, 39.0, 40.0, 40.0, 40.0,
     40.0, 42.0, 43.0, 43.0, 43.5, 44.0]
     )
fish_weight = np.array(
    [5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0,
     110.0, 115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0,
     130.0, 150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0,
     197.0, 218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0,
     514.0, 556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0,
     820.0, 850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0,
     1000.0, 1000.0]
     )

 

우선 그래프를 그려 Linear Regression model에 적합한지 확인해보겠습니다.

plt.scatter(fish_length, fish_weight, color = 'blue')
plt.show()

 

 

주어진 data를 Train_set과 Test_set으로 split해보겠습니다.

sklearn을 활용해야합니다.

random_state = 42로 설정하겠습니다.

from sklearn.model_selection import train_test_split

train_input, test_input, train_target, test_target = train_test_split(fish_length, fish_weight, test_size = 0.2, random_state = 42)

 

train_input의 shape을 확인해보겠습니다.

train_input.shape
-> (44,)

 

열에대한 정보가 없기 때문에 reshape을 통해 Train_set과 Test_set의 형태를 변경해 주어야합니다.

train_input = train_input.reshape(-1, 1)
train_target = train_target.reshape(-1, 1)
test_input = test_input.reshape(-1, 1)
test_target = test_target.reshape(-1, 1)

 

이제 sklearn.linear_model 모듈에서 LinearRegression을 import해 Train_set을 객체에 학습시켜보겠습니다.

from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.fit(train_input, train_target)

 

학습이 완료되었습니다.

length가 50인 물고기의 몸무게를 예측해보겠습니다.

lr.predict([[50]])
-> array([[1238.3175398]])

'1238.3175398'의 무게를 가지는 것으로 확인됩니다.

 

학습된 model의 시각화를 위해 기울기와 y절편을 알아보겠습니다.

lr.coef_, lr.intercept_
-> [[39.05365447]] [-714.36518394]

 

직선 그래프를 그려 시각화 작업을 진행해봅시다.

plt.scatter(train_input, train_target, color = 'blue')

x = np.linspace(15, 60, 100)
y = lr.coef_[0] * x + lr.intercept_[0]
plt.plot(x, y, color = 'red')

plt.show()

 

전체적으로 직선형태에 data들이 fit하게 맞아들어가는 모습을 보이고 있습니다.

 

728x90