[머신러닝] Multiple Linear Regression
아래처럼, 여러개의 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()