본문 바로가기
인공지능(AI)/파이썬 딥러닝 머신러닝 입문

[머신러닝 입문]-3. 일차함수 관계식 갖기

by LIZ0904 2021. 3. 27.
반응형

첫번째로 가장 기초적인 머신러닝 프로젝트를 생성해봤다.

 

 

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 함수

head()를 통해 데이터프레임의 첫 5개의 행을 볼 수 있다. 추출된 부분도 데이터프레임의 자료구조를 갖는다.

 

tail 함수

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값 예측하기

여러 개의 입력데이터를 통해 예측한 값을 y_pred에 넣어준다. 옳은 결과가 출력된다.

반응형

댓글