첫번째로 가장 기초적인 머신러닝 프로젝트를 생성해봤다.
1. 문제파악 (예제)
y=x+1의 일차함수 관계의 식이 있다고 하자.
리스트 x,y는 각각 10개의 숫자를 원소로 갖는다.
x=[-3, 31, -11, 4, 0, 22, -2, -5, -25, -14]
y=[-2, 32, -10, 5, 1, 23, -1, -4, -24, -13]
2. 데이터 탐색
x,y 변수 사이의 관계식을 그래프로 그려볼건데, 이때 맷플롯립(matplolib) 패키지를 활용한다.
import matplotlib.pyplot as plt
x=[-3, 31, -11, 4, 0, 22, -2, -5, -25, -14]
y=[-2, 32, -10, 5, 1, 23, -1, -4, -24, -13]
plt.plot(x, y)
plt.show()
pyplot 모듈의 plot 함수를 실행하고, 입력값으로 z,y 변수의 데이터를 전달했다.
그 결과로 x(가로축), y(세로축)의 선그래프를 화면에서 볼 수 있었다.
3. 데이터 전처리
import pandas as pd
x=[-3, 31, -11, 4, 0, 22, -2, -5, -25, -14]
y=[-2, 32, -10, 5, 1, 23, -1, -4, -24, -13]
df=pd.DataFrame({'X':x, 'Y':y}) #데이터 프레임 생성
df.shape #shape속성을 통해 구조 파악 가능: 10행 2열
데이터 프레임을 생성한 뒤, shape속성을 통해 구조를 파악해보면, 결과값으로 (10, 2)가 나옴을 알 수 있다. 이는 10행 2열이라는 의미다.
head()를 통해 데이터프레임의 첫 5개의 행을 볼 수 있다. 추출된 부분도 데이터프레임의 자료구조를 갖는다.
tail()은 뒤에서부터 5개의 행을 보여준다.
train_features=['X'] #설명변수 X (입력데이터)
target_cols=['Y'] #목표변수 Y
x_train=df.loc[:, train_features] #x열의 데이터를 선택해 X_train에 저장
y_train=df.loc[:,target_cols] #y열의 데이터를 선택해 y_train에 저장
print(x_train.shape, y_train.shape)
모델 학습에 사용할 설명 변수 x를 만뒤, x열의 데이터를 x_train에 저장한다. 목표변수 y를 만든 뒤, y열의 데이터를 y_train에 저장한다.
4. 모델 학습
머신러닝 알고리즘을 적용해 선형회귀 관계식을 찾아봤다. 사이킷런(sklearn) 패키지의 linear_model 모듈에서 LinearRegression 클래스 함수를 불러서 사용한다.
from sklearn.linear_model import LinearRegression
lr=LinearRegression()
lr.fit(x_train, y_train) #x_train: 입력데이터, y_train: 목표레이블
LinearRegression 클래스 함수는 선형회귀 모델을 구현해 놓은 코드이다. 모델 인스턴스 객체를 생성하고 lr 변수에 저장한다.
fit 메소드는 입력 데이터를 모델에 전달한 뒤 학습 시키는 함수다. 입력 데이터와 목표레이블을 전달하면 선형 관계식을 찾아준다.
lr.coef_, lr.intercept_
학습을 끝낸 lr 모델 인스턴스 객체의 coef_속성으로부터 x변수의 기울기(회귀계수)를 얻을 수 있다. intercept_속성은 y절편(상수항)을 나타낸다.
x변수의 회귀계수(기울기)가 1이고, 상수항(y절편)은 1이므로, lr 모델은 y=x+1의 관계식을 갖는다.
5. 예측
학습을 마친 모델에 predict 메소드를 적용하면, 새로운 x에 대한 y를 예측할 수 있다. 이때, 학습에 사용한 x_train이 2차원 구조였으므로, predict 메소드의 입력값 또한 2차원 구조로 넘겨줘야 한다.
import numpy as np
x_new=np.array(11).reshape(1,1) #새로운 입력변수 x 설정 (2차원 구조)
lr.predict(x_new) #예측값 반환
넘파이(numpy) 라이브러리의 array()로 숫자 11을 배열로 변환하고, reshape()를 적용해 (1행, 1열) 형태의 2차원 구조로 변형한다.
옳은 예측값이 12가 출력됨을 확인할 수 있다.
predict 메소드에 여러개의 입력데이터를 넣을 수도 있다. numpy 모듈의 arange 함수를 사용한다.
np.arange(11, 16, 1): 11부터 15까지 1의 간격을 두고 1차원 배열을 만들 것
reshape(-1, 1): (n행, 1열) 형태의 2차원 구조로 변환할 것
여기서 -1은 크기가 정해지지 않았다는 뜻이다. 현재 모두 5개의 원소가 있으므로, -1은 5를 의미하게 되면서 5개의 행을 출력한다.
여러 개의 입력데이터를 통해 예측한 값을 y_pred에 넣어준다. 옳은 결과가 출력된다.
'인공지능(AI) > 파이썬 딥러닝 머신러닝 입문' 카테고리의 다른 글
[머신러닝 입문]-5 회귀(Regression)-보스턴 주택가격예측 (1) | 2021.03.31 |
---|---|
[머신러닝 입문]-4. 분류(Classification)-붓꽃의 품종 판별 (1) | 2021.03.30 |
[머신러닝 입문]-2. 머신러닝에 대하여 (0) | 2021.03.27 |
[머신러닝 입문]-1. 판다스(Pandas) 자료구조 (0) | 2021.03.24 |
개발 환경 설정_구글 코랩(Google Colab) (0) | 2021.03.24 |
댓글