단순 선형 회귀 분석하기

·2021년 12월 6일
0

NIPA AI 교육

목록 보기
8/31
  1. 데이터 전처리
    기계학습 라이브러리 scikit-learn 을 사용하면 Loss 함수를 최솟값으로 만드는 β0, β1을 쉽게 구할 수 있습니다.

    주어진 데이터를 sklearn에서 불러 올 선형 모델에 적용하기 위해서는 전 처리가 필요합니다.

    이번 실습에서는 sklearn에서 제공하는 LinearRegression을 사용하기 위한 데이터 전 처리를 수행해보겠습니다.

    sklearn의 LinearRegression 입력 값 형태
    LinearRegression 모델의 입력값으로는 Pandas의 DataFrame의 feature (X) 데이터와 Series 형태의 label (Y) 데이터를 입력 받을 수 있습니다.

    X, Y의 샘플의 개수는 같아야 합니다.

지시사항
X 데이터를 column 명이 X인 DataFrame으로 변환하고 train_X에 저장합니다.
리스트 Y를 Series 형식으로 변환하여 train_Y에 저장합니다.

import matplotlib as mpl
mpl.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

import elice_utils
eu = elice_utils.EliceUtils()

    
X = [8.70153760, 3.90825773, 1.89362433, 3.28730045, 7.39333004, 2.98984649, 2.25757240, 9.84450732, 9.94589513, 5.48321616]
Y = [5.64413093, 3.75876583, 3.87233310, 4.40990425, 6.43845020, 4.02827829, 2.26105955, 7.15768995, 6.29097441, 5.19692852]

"""
1. X의 형태를 변환하여 train_X에 저장합니다.
"""
train_X = pd.DataFrame(X, columns=['X'])

"""
2. Y의 형태를 변환하여 train_Y에 저장합니다.
"""
train_Y = pd.Series(Y)

# 변환된 데이터를 출력합니다.
print('전 처리한 X 데이터: \n {}'.format(train_X))
print('전 처리한 X 데이터 shape: {}\n'.format(train_X.shape))

print('전 처리한 Y 데이터: \n {}'.format(train_Y))
print('전 처리한 Y 데이터 shape: {}'.format(train_Y.shape))
  1. 학습하기
    [실습1]에서 전 처리한 데이터를 LinearRegression 모델에 입력하여 학습을 수행해봅시다.

    LinearRegression (sklearn)
    LinearRegression을 사용하기 위해서는 우선 해당 모델 객체를 불러와 초기화해야 합니다. 아래 코드는 lrmodel에 모델 객체를 초기화 하는 것을 보여줍니다.

    lrmodel = LinearRegression()

    모델 초기화를 수행했다면 전 처리된 데이터를 사용하여 학습을 수행할 수 있습니다. 아래코드와 같이 fit 함수에 학습에 필요한 데이터를 입력하여 학습을 수행합니다.

    lrmodel.fit(train_X, train_Y)

    LinearRegression의 β0, β1
    값을 구하기 위해서는 아래 코드를 사용하여 구할 수 있습니다.

    beta_0 = lrmodel.intercept_
    beta_1 = lrmodel.coef_[0]

지시사항
sklearn의 LinearRegression() 모델을 lrmodel에 초기화 합니다.
fit을 사용하여 train_X, train_Y 데이터를 학습합니다.

import matplotlib as mpl
mpl.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

import elice_utils
eu = elice_utils.EliceUtils()


X = [8.70153760, 3.90825773, 1.89362433, 3.28730045, 7.39333004, 2.98984649, 2.25757240, 9.84450732, 9.94589513, 5.48321616]
Y = [5.64413093, 3.75876583, 3.87233310, 4.40990425, 6.43845020, 4.02827829, 2.26105955, 7.15768995, 6.29097441, 5.19692852]

train_X = pd.DataFrame(X, columns=['X'])
train_Y = pd.Series(Y)

"""
1. 모델을 초기화 합니다.
"""
lrmodel = LinearRegression()

"""
2. train_X, train_Y 데이터를 학습합니다.
"""
lrmodel.fit(train_X, train_Y)


# 학습한 결과를 시각화하는 코드입니다.
plt.scatter(X, Y) 
plt.plot([0, 10], [lrmodel.intercept_, 10 * lrmodel.coef_[0] + lrmodel.intercept_], c='r') 
plt.xlim(0, 10) 
plt.ylim(0, 10) 
plt.title('Training Result')
plt.savefig("test.png") 
eu.send_image("test.png")
  1. 예측하기
    LinearRegression (sklearn)
    LinearRegression을 사용하여 예측을 해야한다면 아래와 같이 predict 함수를 사용합니다.

    pred_X = lrmodel.predict(X)
    predict 함수는 DataFrame 또는 numpy array인 X 데이터에 대한 예측값을 리스트로 출력합니다.

지시사항
lrmodel을 학습하고 train_X의 예측값을 구하여 pred_X에 저장합니다.

import matplotlib as mpl
mpl.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression

import elice_utils
eu = elice_utils.EliceUtils()


    
X = [8.70153760, 3.90825773, 1.89362433, 3.28730045, 7.39333004, 2.98984649, 2.25757240, 9.84450732, 9.94589513, 5.48321616]
Y = [5.64413093, 3.75876583, 3.87233310, 4.40990425, 6.43845020, 4.02827829, 2.26105955, 7.15768995, 6.29097441, 5.19692852]

train_X = pd.DataFrame(X, columns=['X'])
train_Y = pd.Series(Y)

# 모델을 트레이닝합니다.
lrmodel = LinearRegression()
lrmodel.fit(train_X, train_Y)

"""
1. train_X에 대해서 예측합니다.
"""
pred_X = lrmodel.predict(train_X)
print('train_X에 대한 예측값 : \n{}\n'.format(pred_X))
print('실제값 : \n{}'.format(train_Y))

train_X 대신 X, Y, train_Y를 넣으면 ValueError
ValueError: Expected 2D array, got 1D array instead:

profile
백엔드 개발자. 공동의 목표를 함께 이해한 상태에서 솔직하게 소통하며 일하는 게 가장 즐겁고 효율적이라고 믿는 사람.

0개의 댓글