*경진대회 및 데이터 분석의 과정

[문제 파악] - [데이터 탐색] - [데이터 전처리] - [모델 학습] - [예측]

 

위의 과정에 따른 간단한 머신러닝 프로젝트를 만들어보겠습니다.


[문제 파악]

x = [-3,  31,  -11,  4,  0,  22, -2, -5, -25, -14]
y = [ -2,   32,   -10,   5,  1,   23,  -1,  -4, -24,  -13]
print(x)
print(y)

각 10개의 숫자를 원소로 갖는 리스트 x와 y가 있습니다.

둘은 y= x + 1 관계에 있습니다.

 

[데이터 탐색]

import matplotlib.pyplot as plt
plt.plot(x, y)
plt.show()

맷플록립(matplolib) 패키지를 활용해 x, y 변수 사이의 관계식을 그래프로 그려봅니다.

가로축은 x, 세로축은 y입니다.

 

[데이터 전처리]

import pandas as pd
df = pd.DataFrame({'X':x, 'Y':y})
df.shape

판다스를 통해 데이터프레임을 만듭니다.

이때 x 리스트는 'X' 열의 데이터, y 리스트는 'Y' 열의 데이터로 변환됩니다.

shape 속성을 통해 (10행, 2열) 구조임을 확인할 수 있습니다.

 

df.head()

head 메소드는 첫 5개의 행 (인덱스 0~4)을 추출해서 보여줍니다.

첫 5행의 출력을 확인할 수 있습니다.

 

df.tail()

반대로 tail 메소드는 마지막 행을 보여줍니다.

마지막 5행의 출력을 확인할 수 있습니다.

 

train_features = ['X']
target_cols = ['Y']
X_train = df.loc[:, train_features]
y_train = df.loc[:, target_cols]
print(X_train.shape, y_train.shape)

설명 변수(X)를 만듭니다. 

'X'열의 데이터를 선택해서 X_train에 저장합니다.

목표 변수(Y)를 만듭니다.

'Y'열의 데이터를 선택해서 y_train에 저장합니다.

 

[모델 학습]

머신러닝 알고리즘을 적용하여 선형 회귀 관계식을 찾아봅니다.

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train)

LinearRegression클래스 함수는 선형회귀 모델을 구현해 놓은 코드라 보면 됩니다.

모델 인스턴스 객체를 생성하고 lr변수에 저장합니다.

fit 메소드는 입력 데이터를 모델에 전달하여 학습시키는 함수 명령입니다.

입력 데이터(X_train)와 목표 레이블(y_train)을 전달하면 선형 관계식을 찾습니다.

 

lr.coef_, lr.intercept_

학습을 끝낸 lr 모델 인스턴스 객체의 coef_ 속성으로부터 X변수의 회귀계수(기울기)를 얻을 수 있습니다.

intercept_ 속성은 상수항(y 절편)을 나타냅니다.

 

print ("기울기: ", lr.coef_[0][0])
print ("y절편: ", lr.intercept_[0])

기울기와 y절편을 출력합니다.

기울기가 1이고, 상수항이 1이므로, lr 모델은 Y = X + 1의 관계식을 갖습니다.

 

[예측]

import numpy as np
X_new = np.array(11).reshape(1, 1)
lr.predict(X_new)

학습을 마친 모델에 predit 메소드를 적용하면 새로운 입력 데이터에 대한 레이블을 예측할 수 있습니다.

X_train이 2차원 구조이므로 predit의 메소드 입력값 또한 2차원 구조로 동일해야 합니다.

넘파이(numpy) 라이브러리의 array 함수로 숫자 11을 배열로 변환하고, reshape 메소드를 적용하여 (1행, 1열) 형태의 2차원 구조로 변형합니다.

 

X_test = np.arange(11, 16, 1).reshape(-1, 1)
X_test

predit 메소드의 입력 데이터로 여러 개의 숫자를 사용합니다.

넘파이 모듈의 arrange 함수를 사용합니다. np.arrange(11, 16, 1)은 11부터 15까지(16 제외) 정수를 1의 간격을 두고 1차원 배열을 만듭니다.

여기에 reshape(-1, 1) 메소드를 적용하면 (n행, 1열) 형태의 2차원 구조로 변환됩니다.

-1은 크기가 정해지지 않았다는 의미입니다.

 

y_pred = lr.predict(X_test)
y_pred

predit 메소드 함수에 X_test 배열을 입력해서 y_pred 값을 예측합니다.

Y = X + 1의 관계식을 갖는 모델이므로 12부터 16의 숫자 배열이 반환됩니다.


본 내용은 '파이썬 딥러닝 머신러닝 입문'을 기반으로 공부한 내용을 정리한 글입니다.

'머신러닝' 카테고리의 다른 글

[머신러닝] 분류 - 붓꽃의 품종 판별 -1  (0) 2022.04.28
[머신러닝] 머신러닝  (0) 2022.04.28
[머신러닝] 판다스 자료구조  (0) 2022.04.28