AI 이론/Classification (supervised)

[머신러닝] Multiple Linear Regression

jasonshin 2021. 11. 24. 17:44

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

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

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

 

아래는 하나의 변수일때와, 여러개의 변수가 있을때의 leaner regression 을 나타낸다.

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

자, 이제, 오차가 가장 적을때의 b 값들을 찾아보자.

Type Markdown and LaTeX: 𝛼2

 

# Profit 수익을 예측하려 한다.  이것이 디펜더블 베리어블, 나머지는 인디펜더블 베리어블

 

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

catergorical 로 바꿔주면 된다.

Type Markdown and LaTeX: 𝛼2

 

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

 

각각의 피쳐를 분석하여, 어떤 신생 회사의 데이터가 있으면, 그 회사가 얼마의 수익을 낼 지 예측합니다. (투자를 해야 할지 말아야 할지)

 

# NaN 확인한다.
df.isna().sum()

R&D Spend          0
Administration     0
Marketing Spend    0
State              0
Profit             0
dtype: int64

# 어떤 인공지능을 개발할지
# x, y 값을 세팅해준다.

 

X = df.iloc[ : , 0: 3+1]

 

y = df['Profit']

 

# 문자열이 들어있는 컬럼이 있다.
# 따라서 문자열 컬럼은 숫자로 바꿔줘야 한다.
# 문자열 컬럼이 카테고리컬 데이터인지 먼저 확인.

X['State'].describe()

count           50
unique           3
top       New York
freq            17
Name: State, dtype: object

# 알파벳 순으로 정렬
sorted(X['State'].unique())

['California', 'Florida', 'New York']

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

# 'California', 'Florida', 'New York'
#     0             0           1
#     1             0           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)

LinearRegression()
 
# 예측하라
y_pred = regressor.predict(X_test)

 

# MSE를 구해보세요 => 성능평가를 위해서! 

error = y_test - y_pred

X_test['error'] = error

(error ** 2).sum()

800003719.0787009

(error ** 2).mean()

80000371.90787008

 

X_test['y_test'] = y_test

X_test['y_pred'] = y_pred

 

# 실제값과 예측값의 데이터를 차트로 나타내세요 

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

 

반응형