머신러닝

Multiple Linear Regression

HooSL 2022. 3. 28. 11:44

아래처럼, 여러개의 features를 기반으로, 수익을 예측하려 합니다.

위와 같이, 여러개의 변수들을 통해, 수익과의 관계를 분석하고,

이를 통해 새로운 데이터가 들어왔을 때, 수익이 어떻게 될 지를 예측하고자 합니다.

 

아래는 하나의 변수일 때와, 여러개의 변수가 있을 때의 Linear Regression을 나타냅니다.

2차원에서는 선이지만, 3차원에서는 평면이 됩니다.

이제, 오차가 가장 적을때의 b값들을 찾아봅니다.

 

Profit 수익을 예측하려 한다.

이것이 디펜더블 배리어블, 나머지는 인티펜더블 베리어블

 

1. 먼저 식을 세운다. 이때 숫자가 아닌 값은 어떻게 처리해야할까

catergorical 로 바꿔주면 된다.

 

구글드라이브 import

from google.colab import drive
drive.mount('/content/drive')

필요한 라이브러리 import

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

 50_Startups.csv 데이터를 읽고 각각의 피쳐를 분석하여, 어떤 신생 회사의 데이터가 있으면, 그 회사가 얼마의 수익을 낼 지 예측합니다.

50_Startups.csv
0.00MB

df=pd.read_csv('/content/drive/MyDrive/위치/50_Startups.csv')

 

Nan을 확인합니다.

df.isna().sum()

어떤 인공지능을 개발할지 X,y 값을 세팅해줍니다.

X=df.loc[: , 'R&D Spend': 'State']
y=df['Profit']

문자열이 들어있는 컬럼이 있습니다.

따라서 문자열 컬럼은 숫자로 바꿔줘야합니다.

 

문자열 컬럼이 카테고리컬 데이터인지 먼저 확인합니다

X['State'].describe()

 

알파벳순으로 정렬합니다.

sorted(X['State'].unique())

 

카테고리컬 데이터가 3개이상이므로 원 핫 인코딩을 합니다.

'California', 'Florida', 'New York'

      0           0           1

      1           0           0

      0           1           0

X = pd.get_dummies(X,columns=['State'])

모두 숫자로 변경되었으니, train / test 데이터로 분리합니다.

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=27)

인공지능 모델링

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train,y_train)
y_pred = regressor.predict(X_test)

MSE를 구합니다 -> 성능평가

error = y_test-y_pred
error
X_test['Real'] = y_test
X_test['Pred'] = y_pred
X_test['error'] = error
(X_test['error']**2).mean()

실제값과 예측값의 데이터를 차트로 나타내봅니다.

plt.plot(y_test.values)
plt.plot(y_pred)
plt.legend(['Real','Pred'])
plt.savefig('chart.jpg')
plt.show()