본문 바로가기
Drawing (AI)/MachineLearning

Udemy - 머신러닝의 모든 것 (Multiple Linear Regression-2)

by 생각하는 이상훈 2023. 2. 28.
728x90

스타트업 투자 프로그램

위와 같은 데이터가 50개가 존재하는 데이터 셋을 이용한다.

위와 같은 데이터 셋을 이용하여 투자해야할 스타트업을 선정하는 프로그램을 만들어본다.


Data preprocessing

기본적으로 데이터 전처리 과정이 필요하다.

state 항목이 수치형 데이터가 아니라 항목형 데이터이므로 encoding과정을 통해 수치형 데이터로 변환을 해준다.

이때 one-hot encoding 방식, 즉 3개의 범주이므로 3개의 항목을 만들어주어 해당하는 항목에만 1이들어가고 나머지는 전부 0으로 맞춰주는 방식을 이용하여 수치형 데이터로 만들고자 한다.


Training

from sklearn.linear_model import LinearRegression

sklearn(사이킷런) 라이브러리에서 linear_model 모듈의 LinearRegression 클래스를 import해와서 선형 회귀 방식의 학습을 시킨다.


Complete source code

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
# 3번 인덱스 즉, 4번째 열이 범주형 데이터이므로 one-hot encoding 기법을 이용하여 3번 인덱스를 인코딩
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [3])], remainder='passthrough')
X = np.array(ct.fit_transform(X))

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

# 다중 선형 회귀
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

# 예측
y_pred = regressor.predict(X_test)  # 예측 이익 벡터
np.set_printoptions(precision=2)    # 소수점 2째 자리까지 표시
# 실제 profit 벡터와 예측 profit 벡터를 나란히 놓아 정확도 평가
print(np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1))

다중 선형 회귀를 진행하는 코드에서 이용하는 class에서는 설계와 training과정이 포함되어있어서 가변수의 함정을 고려할 필요가 없다. one-hot encoding되어있는 범주 기반 데이터는 LinearRegressin class에서 알아서 처리하는 것이다.

또한 후진 소거법이나 P-값을 고려하여 통계적으로 가장 적절한 데이터를 선별하는 과정도 class에 의해 훈련된 model이 알아서 진행하기 때문에 직접 통계적 선별 과정을 거칠 필요가 없다.

 

예측 결과

[[103015.2  103282.38]
 [132582.28 144259.4 ]
 [132447.74 146121.95]
 [ 71976.1   77798.83]
 [178537.48 191050.39]
 [116161.24 105008.31]
 [ 67851.69  81229.06]
 [ 98791.73  97483.56]
 [113969.44 110352.25]
 [167921.07 166187.94]]

좌측의 예측 profit과 우측의 실제 profit을 비교하면 나쁘지 않은 결과가 나와서 좋은 예측을 진행했음을 알 수 있다.

다중 선형 회귀 모델이 적절하게 이용되었다고 볼 수 있다. 위의 프로그램을 이용하여 스타트업의 데이터만 있다면 어떤 회사가 가장 높은 이익을 낼지 예측할 수 있으므로 좋은 회사에 투자할 수 있을 것으로 보인다.


 

728x90