본문 바로가기

BLOG/머신러닝

[머신러닝] 사이킷런(Scikit-learn) : 간단한 선형모델 만들기 & 가중치, 절편 구하기

사이킷런(Scikit-learn) 라이브러리를 이용하여 간단한 선형모델을 만들어 볼 수 있는데요, 아래 코드를 보면서 차근차근 살펴보도록 하겠습니다.

 

 

1. 필요한 라이브러리 설치

먼저, 선형모델을 만들기 위한 라이브러리와 데이터에 사용할 난수를 발생시킬 라이브러리를 설치해줍니다.

 

import mglearn
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

 

 

2. 학습시킬 sample data 만들기

그다음, 학습시킬 sample data를 만들어주어야 하는데요, 위에서 import 한 mglearn 라이브러리를 이용하여 sample data를 만들어주겠습니다.

 

X, y = mglearn.datasets.make_wave(n_samples=60)

 

위 코드처럼 mglearn.datasets.make_wave(n_samples=데이터개수) 를 입력하고, 변수 X, y에 받으면 각각 60개의 난수(-2~+2) 가 입력되는데요, 이때 X는 입력값, y는 결과값을 의미합니다.

 

 

3. train data와 test data로 나누기

이제 위에서 만든 데이터 X와 y를 각각 train data, test data로 나눠야 하는데요, train_test_split() 함수를 이용하여 나누어줄 수 있습니다.

 

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

 

위와 같이 코드를 입력하면, train data와 test data의 비율이 75 : 25 로 나누어지고, 각각 X_train, X_test, y_train, y_test 로 나누어져 입력된답니다.

 

 

4. 선형 모델 만들기

train data 와 test data가 만들어졌다면, 선형모델을 만들어줘야 하는데요, 위에서 import 한 LinearRegression 라이브러리를 사용해서 만들 수 있습니다. LinearRegression() 으로 선형모델을 만들어주는 코드는 다음과 같습니다.

 

lr = LinearRegression().fit(X_train, y_train)

 

LinearRegression() 함수 뒤에 .fit(X_train, y_train) 을 입력해줌으로써, 해당 선형 모델이 train data(입력값, 결과값)로 학습을 하도록 입력해주었습니다. 이렇게 입력한 뒤 실행하면, 사실상 학습이 자동으로 이루어지게 됩니다.

 

 

5. 가중치 & 절편 구하기

선형 모델이 학습되었는지를 확인하기 위해 가중치(기울기)와 절편을 구해볼텐데요, 아래와 같이 입력해줌으로써 가중치와 절편 값을 구할 수 있습니다.

 

print("lr.coef_: {}".format(lr.coef_)) #coef_=가중치=계수=기울기
print("lr.intercept_: {}".format(lr.intercept_)) #intercept_=절편

# output :
lr.coef_: [0.44153666]
lr.intercept_: -0.01711124414733381

 

코드 실행 결과, 가중치와 절편 값이 구해진 것을 확인할 수 있습니다.

 

 

 

이렇게 간단하게 선형 모델을 만들고 가중치와 절편 값을 구해보았는데요, 

각자 학습할 데이터를 입력하여 선형 모델을 만들어보시기 바랍니다!

 

 

<전체코드 참고>

import mglearn
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

X, y = mglearn.datasets.make_wave(n_samples=60)

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

lr = LinearRegression().fit(X_train, y_train)

print("lr.coef_: {}".format(lr.coef_)) #coef_=가중치=계수=기울기
print("lr.intercept_: {}".format(lr.intercept_)) #intercept_=절편