auto-mpg.csv 데이터를 통해,
mpg (mile per gallern, 자동차 연비) 를 예측하는 모델을 만드세요.
# 필요한 import를 한번에 정리
# numpy와 pnadas 데이터 시각화에 필요
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sb
# 데이터 인코딩에 필요
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer
# 스케일링에 필요
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# 데이터 트레이닝 테스트용 분리에 필요
from sklearn.model_selection import train_test_split
# 데이터 한글인식에 필요
import platform
from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False
if platform.system() == 'Darwin':
rc('font', family='AppleGothic')
elif platform.system() == 'Windows':
path = "c:/Windows/Fonts/malgun.ttf"
font_name = font_manager.FontProperties(fname=path).get_name()
rc('font', family=font_name)
else:
print('Unknown system... sorry~~~~')
# 데이터를 불러와 실습 진행
df = pd.read_csv('../data/auto-mpg.csv')
# 컬럼 정보 :
MPG (miles per gallon - 연비),
cylinders (실린더 갯수)
engine displacement (inches 배기량),
horsepower (마력),
vehicle weight (lbs. 무게),
time to accelerate from O to 60 mph (sec. 60mph까지 걸리는 시간),
model year ,
origin of car (1. American, 2. European, 3. Japanese).
Also provided are the car labels (types)
< 데이터 프리프로세싱 순서에 따라 데이터를 가공하고 예측해보자 >
# mpg (mile per gallern, 자동차 연비) 예측 모델
# 1. NaN 데이터 확인
df.isna().sum()
mpg 0
cyl 0
displ 0
hp 0
weight 0
accel 0
yr 0
origin 0
name 0
dtype: int64
# 2. 없으므로 X,y 분리
# X 는 name만 빼고 지정 y 는 mpg로
y = df['mpg']
0 18.0
1 15.0
2 18.0
3 16.0
4 17.0
...
387 27.0
388 44.0
389 32.0
390 28.0
391 31.0
Name: mpg, Length: 392, dtype: float64
X = df.loc[ : , 'cyl' : 'origin' ]
# 문자열이 없어 보이지만 origin은 레이블 인코딩이 되어있는 데이터임
# 오류가 생길수 있으므로 원-핫 인코딩으로 바꾸어주는게 좋음
# 3. 인코딩
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer( [('encoder', OneHotEncoder(), [6])] , remainder='passthrough' )
ct.fit_transform(X)
array([[1.000e+00, 0.000e+00, 0.000e+00, ..., 3.504e+03, 1.200e+01,
7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, ..., 3.693e+03, 1.150e+01,
7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, ..., 3.436e+03, 1.100e+01,
7.000e+01],
...,
[1.000e+00, 0.000e+00, 0.000e+00, ..., 2.295e+03, 1.160e+01,
8.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, ..., 2.625e+03, 1.860e+01,
8.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, ..., 2.720e+03, 1.940e+01,
8.200e+01]])
# 변수로 재지정하여 메모리에 업로드
X = ct.fit_transform(X)
# 4. 린이어는 피쳐 스케일링이 필요없음
# 5. 트레이닝 테스트용 나누기
train_test_split( X , y, test_size=0.2, random_state=1)
[array([[1.000e+00, 0.000e+00, 0.000e+00, ..., 2.490e+03, 1.570e+01,
8.100e+01],
[1.000e+00, 0.000e+00, 0.000e+00, ..., 3.620e+03, 1.870e+01,
7.800e+01],
[0.000e+00, 1.000e+00, 0.000e+00, ..., 2.219e+03, 1.650e+01,
7.400e+01],
...,
[1.000e+00, 0.000e+00, 0.000e+00, ..., 4.098e+03, 1.400e+01,
7.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, ..., 2.051e+03, 1.700e+01,
7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, ..., 4.209e+03, 1.200e+01,
7.100e+01]]),
array([[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 1.200e+02, 9.700e+01,
2.506e+03, 1.450e+01, 7.200e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.700e+01, 7.500e+01,
2.171e+03, 1.600e+01, 7.500e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 1.080e+02, 7.500e+01,
2.350e+03, 1.680e+01, 8.100e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 1.210e+02, 1.120e+02,
2.868e+03, 1.550e+01, 7.300e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.100e+01, 6.700e+01,
1.995e+03, 1.620e+01, 8.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 9.800e+01, 8.300e+01,
2.075e+03, 1.590e+01, 7.700e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 9.600e+01, 6.900e+01,
2.189e+03, 1.800e+01, 7.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.180e+02, 1.500e+02,
4.237e+03, 1.450e+01, 7.300e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.700e+01, 9.200e+01,
2.288e+03, 1.700e+01, 7.200e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 1.070e+02, 7.200e+01,
2.290e+03, 1.700e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.310e+02, 1.150e+02,
3.245e+03, 1.540e+01, 7.900e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 9.800e+01, 7.600e+01,
2.144e+03, 1.470e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.050e+02, 1.300e+02,
3.840e+03, 1.540e+01, 7.900e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 8.500e+01, 7.000e+01,
1.945e+03, 1.680e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.350e+02, 8.400e+01,
2.525e+03, 1.600e+01, 8.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.020e+02, 1.400e+02,
3.449e+03, 1.050e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.350e+02, 8.400e+01,
2.370e+03, 1.300e+01, 8.200e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 9.000e+01, 4.800e+01,
2.335e+03, 2.370e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.540e+02, 2.200e+02,
4.354e+03, 9.000e+00, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 1.000e+02,
2.914e+03, 1.600e+01, 7.500e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 1.160e+02, 7.500e+01,
2.246e+03, 1.400e+01, 7.400e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.580e+02, 1.100e+02,
3.632e+03, 1.800e+01, 7.400e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.180e+02, 1.500e+02,
3.399e+03, 1.100e+01, 7.300e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.500e+02, 1.700e+02,
4.165e+03, 1.140e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.290e+02, 1.980e+02,
4.341e+03, 1.000e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.600e+02, 1.500e+02,
3.940e+03, 1.300e+01, 7.900e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.800e+01, 6.800e+01,
2.045e+03, 1.850e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.250e+02, 1.000e+02,
3.651e+03, 1.770e+01, 7.600e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.310e+02, 1.100e+02,
3.039e+03, 1.500e+01, 7.500e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.350e+02, 8.400e+01,
2.385e+03, 1.290e+01, 8.100e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.050e+02, 1.450e+02,
3.425e+03, 1.320e+01, 7.800e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.510e+02, 8.800e+01,
2.740e+03, 1.600e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.500e+02, 1.550e+02,
4.502e+03, 1.350e+01, 7.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 1.120e+02,
2.835e+03, 1.470e+01, 8.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.310e+02, 1.050e+02,
3.425e+03, 1.690e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.050e+02, 1.400e+02,
4.215e+03, 1.300e+01, 7.600e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.250e+02, 9.500e+01,
3.785e+03, 1.900e+01, 7.500e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.310e+02, 1.050e+02,
3.535e+03, 1.920e+01, 7.800e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.100e+01, 6.700e+01,
1.965e+03, 1.500e+01, 8.200e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.700e+01, 8.800e+01,
2.130e+03, 1.450e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.000e+02, 1.900e+02,
4.325e+03, 1.220e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.000e+02, 1.750e+02,
4.385e+03, 1.200e+01, 7.200e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 6.000e+00, 1.560e+02, 1.220e+02,
2.807e+03, 1.350e+01, 7.300e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 1.000e+02,
2.901e+03, 1.600e+01, 7.400e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 1.000e+02,
2.789e+03, 1.500e+01, 7.300e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.580e+02, 1.100e+02,
3.730e+03, 1.900e+01, 7.500e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.000e+02, 1.500e+02,
4.997e+03, 1.400e+01, 7.300e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.100e+01, 6.800e+01,
1.970e+03, 1.760e+01, 8.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.250e+02, 1.000e+02,
3.233e+03, 1.540e+01, 7.600e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.400e+02, 2.150e+02,
4.735e+03, 1.100e+01, 7.300e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.040e+02, 1.500e+02,
3.672e+03, 1.150e+01, 7.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.000e+02, 9.500e+01,
3.155e+03, 1.820e+01, 7.800e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.510e+02, 9.000e+01,
2.678e+03, 1.650e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.350e+02, 8.400e+01,
2.295e+03, 1.160e+01, 8.200e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 8.900e+01, 6.200e+01,
1.845e+03, 1.530e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 1.710e+02, 9.700e+01,
2.984e+03, 1.450e+01, 7.500e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 1.730e+02, 1.150e+02,
2.595e+03, 1.130e+01, 7.900e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.000e+02, 8.500e+01,
2.587e+03, 1.600e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.510e+02, 9.000e+01,
2.556e+03, 1.320e+01, 7.900e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.100e+01, 6.000e+01,
1.800e+03, 1.640e+01, 7.800e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.620e+02, 8.500e+01,
3.015e+03, 1.700e+01, 8.200e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 1.070e+02, 8.600e+01,
2.464e+03, 1.550e+01, 7.600e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 8.500e+01, 6.500e+01,
1.975e+03, 1.940e+01, 8.100e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 2.600e+02, 1.100e+02,
3.365e+03, 1.550e+01, 7.800e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 9.000e+01,
3.085e+03, 1.760e+01, 7.600e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 9.000e+01,
3.211e+03, 1.700e+01, 7.500e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 1.200e+02, 8.800e+01,
3.270e+03, 2.190e+01, 7.600e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.400e+02, 1.600e+02,
3.609e+03, 8.000e+00, 7.000e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 8.900e+01, 7.100e+01,
1.925e+03, 1.400e+01, 7.900e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.830e+02, 1.800e+02,
4.955e+03, 1.150e+01, 7.100e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 1.190e+02, 9.200e+01,
2.434e+03, 1.500e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 2.670e+02, 1.250e+02,
3.605e+03, 1.500e+01, 7.900e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.180e+02, 1.500e+02,
3.755e+03, 1.400e+01, 7.600e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 9.700e+01, 7.800e+01,
2.188e+03, 1.580e+01, 8.000e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 1.210e+02, 1.130e+02,
2.234e+03, 1.250e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 9.800e+01, 8.000e+01,
1.915e+03, 1.440e+01, 7.900e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.550e+02, 2.250e+02,
3.086e+03, 1.000e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.000e+02, 1.500e+02,
4.464e+03, 1.200e+01, 7.300e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.500e+02, 1.650e+02,
4.274e+03, 1.200e+01, 7.200e+01]]),
334 27.2
258 18.6
139 29.0
310 37.2
349 33.0
...
203 28.0
255 19.4
72 13.0
235 30.5
37 14.0
Name: mpg, Length: 313, dtype: float64,
81 23.0
165 29.0
351 32.4
119 19.0
379 38.0
...
23 26.0
293 35.7
13 14.0
90 13.0
61 13.0
Name: mpg, Length: 79, dtype: float64]
# 트레이닝용과 테스트용으로 따로 변수 저장하여 메모리 업로드
X_train, X_test, y_train, y_test = train_test_split( X , y, test_size=0.2, random_state=1 )
X_train
array([[1.000e+00, 0.000e+00, 0.000e+00, ..., 2.490e+03, 1.570e+01,
8.100e+01],
[1.000e+00, 0.000e+00, 0.000e+00, ..., 3.620e+03, 1.870e+01,
7.800e+01],
[0.000e+00, 1.000e+00, 0.000e+00, ..., 2.219e+03, 1.650e+01,
7.400e+01],
...,
[1.000e+00, 0.000e+00, 0.000e+00, ..., 4.098e+03, 1.400e+01,
7.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, ..., 2.051e+03, 1.700e+01,
7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, ..., 4.209e+03, 1.200e+01,
7.100e+01]])
X_test
array([[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 1.200e+02, 9.700e+01,
2.506e+03, 1.450e+01, 7.200e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.700e+01, 7.500e+01,
2.171e+03, 1.600e+01, 7.500e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 1.080e+02, 7.500e+01,
2.350e+03, 1.680e+01, 8.100e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 1.210e+02, 1.120e+02,
2.868e+03, 1.550e+01, 7.300e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.100e+01, 6.700e+01,
1.995e+03, 1.620e+01, 8.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 9.800e+01, 8.300e+01,
2.075e+03, 1.590e+01, 7.700e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 9.600e+01, 6.900e+01,
2.189e+03, 1.800e+01, 7.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.180e+02, 1.500e+02,
4.237e+03, 1.450e+01, 7.300e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.700e+01, 9.200e+01,
2.288e+03, 1.700e+01, 7.200e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 1.070e+02, 7.200e+01,
2.290e+03, 1.700e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.310e+02, 1.150e+02,
3.245e+03, 1.540e+01, 7.900e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 9.800e+01, 7.600e+01,
2.144e+03, 1.470e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.050e+02, 1.300e+02,
3.840e+03, 1.540e+01, 7.900e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 8.500e+01, 7.000e+01,
1.945e+03, 1.680e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.350e+02, 8.400e+01,
2.525e+03, 1.600e+01, 8.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.020e+02, 1.400e+02,
3.449e+03, 1.050e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.350e+02, 8.400e+01,
2.370e+03, 1.300e+01, 8.200e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 9.000e+01, 4.800e+01,
2.335e+03, 2.370e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.540e+02, 2.200e+02,
4.354e+03, 9.000e+00, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 1.000e+02,
2.914e+03, 1.600e+01, 7.500e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 1.160e+02, 7.500e+01,
2.246e+03, 1.400e+01, 7.400e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.580e+02, 1.100e+02,
3.632e+03, 1.800e+01, 7.400e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.180e+02, 1.500e+02,
3.399e+03, 1.100e+01, 7.300e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.500e+02, 1.700e+02,
4.165e+03, 1.140e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.290e+02, 1.980e+02,
4.341e+03, 1.000e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.600e+02, 1.500e+02,
3.940e+03, 1.300e+01, 7.900e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.800e+01, 6.800e+01,
2.045e+03, 1.850e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.250e+02, 1.000e+02,
3.651e+03, 1.770e+01, 7.600e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.310e+02, 1.100e+02,
3.039e+03, 1.500e+01, 7.500e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.350e+02, 8.400e+01,
2.385e+03, 1.290e+01, 8.100e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.050e+02, 1.450e+02,
3.425e+03, 1.320e+01, 7.800e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.510e+02, 8.800e+01,
2.740e+03, 1.600e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.500e+02, 1.550e+02,
4.502e+03, 1.350e+01, 7.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 1.120e+02,
2.835e+03, 1.470e+01, 8.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.310e+02, 1.050e+02,
3.425e+03, 1.690e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.050e+02, 1.400e+02,
4.215e+03, 1.300e+01, 7.600e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.250e+02, 9.500e+01,
3.785e+03, 1.900e+01, 7.500e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.310e+02, 1.050e+02,
3.535e+03, 1.920e+01, 7.800e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.100e+01, 6.700e+01,
1.965e+03, 1.500e+01, 8.200e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.700e+01, 8.800e+01,
2.130e+03, 1.450e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.000e+02, 1.900e+02,
4.325e+03, 1.220e+01, 7.700e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.000e+02, 1.750e+02,
4.385e+03, 1.200e+01, 7.200e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 6.000e+00, 1.560e+02, 1.220e+02,
2.807e+03, 1.350e+01, 7.300e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 1.000e+02,
2.901e+03, 1.600e+01, 7.400e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 1.000e+02,
2.789e+03, 1.500e+01, 7.300e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.580e+02, 1.100e+02,
3.730e+03, 1.900e+01, 7.500e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.000e+02, 1.500e+02,
4.997e+03, 1.400e+01, 7.300e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.100e+01, 6.800e+01,
1.970e+03, 1.760e+01, 8.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.250e+02, 1.000e+02,
3.233e+03, 1.540e+01, 7.600e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.400e+02, 2.150e+02,
4.735e+03, 1.100e+01, 7.300e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.040e+02, 1.500e+02,
3.672e+03, 1.150e+01, 7.200e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.000e+02, 9.500e+01,
3.155e+03, 1.820e+01, 7.800e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.510e+02, 9.000e+01,
2.678e+03, 1.650e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.350e+02, 8.400e+01,
2.295e+03, 1.160e+01, 8.200e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 8.900e+01, 6.200e+01,
1.845e+03, 1.530e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 1.710e+02, 9.700e+01,
2.984e+03, 1.450e+01, 7.500e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 1.730e+02, 1.150e+02,
2.595e+03, 1.130e+01, 7.900e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.000e+02, 8.500e+01,
2.587e+03, 1.600e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 1.510e+02, 9.000e+01,
2.556e+03, 1.320e+01, 7.900e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 9.100e+01, 6.000e+01,
1.800e+03, 1.640e+01, 7.800e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.620e+02, 8.500e+01,
3.015e+03, 1.700e+01, 8.200e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 1.070e+02, 8.600e+01,
2.464e+03, 1.550e+01, 7.600e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 8.500e+01, 6.500e+01,
1.975e+03, 1.940e+01, 8.100e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 2.600e+02, 1.100e+02,
3.365e+03, 1.550e+01, 7.800e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 9.000e+01,
3.085e+03, 1.760e+01, 7.600e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 6.000e+00, 2.320e+02, 9.000e+01,
3.211e+03, 1.700e+01, 7.500e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 1.200e+02, 8.800e+01,
3.270e+03, 2.190e+01, 7.600e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.400e+02, 1.600e+02,
3.609e+03, 8.000e+00, 7.000e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 8.900e+01, 7.100e+01,
1.925e+03, 1.400e+01, 7.900e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.830e+02, 1.800e+02,
4.955e+03, 1.150e+01, 7.100e+01],
[0.000e+00, 0.000e+00, 1.000e+00, 4.000e+00, 1.190e+02, 9.200e+01,
2.434e+03, 1.500e+01, 8.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 2.670e+02, 1.250e+02,
3.605e+03, 1.500e+01, 7.900e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.180e+02, 1.500e+02,
3.755e+03, 1.400e+01, 7.600e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 9.700e+01, 7.800e+01,
2.188e+03, 1.580e+01, 8.000e+01],
[0.000e+00, 1.000e+00, 0.000e+00, 4.000e+00, 1.210e+02, 1.130e+02,
2.234e+03, 1.250e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 4.000e+00, 9.800e+01, 8.000e+01,
1.915e+03, 1.440e+01, 7.900e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.550e+02, 2.250e+02,
3.086e+03, 1.000e+01, 7.000e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 4.000e+02, 1.500e+02,
4.464e+03, 1.200e+01, 7.300e+01],
[1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.500e+02, 1.650e+02,
4.274e+03, 1.200e+01, 7.200e+01]])
## 데이터 프리프로세싱은 완료!! 이제 인공지능을 만들어 학습시킨후 예측 실행 ##
< 인공지능 학습 및 예측 실행 >
from sklearn.linear_model import LinearRegression
# 보편적으로 Regression 인공지는 이름은 regressor 로 사용
# 깡통 regressor 생성
regressor = LinearRegression()
# regressor 학습
regressor.fit(X_train, y_train)
# regressor 실행
regressor.predict(X_test)
array([23.94462531, 28.64761934, 32.33077781, 21.99464755, 35.28265957,
28.12319115, 26.45524167, 12.58160302, 25.56306456, 32.04254865,
23.32597109, 32.29214001, 20.14095012, 31.77638576, 29.46904954,
15.04190357, 30.0344167 , 32.62473165, 10.92503097, 22.93824236,
27.20037833, 17.75867846, 18.10527569, 16.16985336, 10.79919676,
20.03178998, 31.66807007, 18.42520819, 21.73299914, 29.1359896 ,
21.92214974, 24.36825885, 10.33853798, 28.57027834, 20.81243752,
14.53200154, 16.94944932, 21.21237735, 35.27195558, 24.73713275,
16.12598196, 11.89879942, 22.60011043, 22.26645573, 22.1334667 ,
17.99528974, 8.68452228, 35.73286016, 21.07296509, 10.51727695,
15.10201083, 23.20486955, 27.21539361, 30.31799228, 34.51063284,
20.79063836, 26.05083995, 20.90202994, 26.71031312, 33.73741146,
28.52415583, 27.14325924, 35.16257625, 22.03416555, 22.81474093,
20.99775758, 22.69550132, 14.0908763 , 32.84090607, 6.40461693,
30.72823425, 20.98887219, 18.35621099, 32.14480289, 23.79497128,
30.57166865, 20.49454935, 12.24164985, 11.67133326])
# 이 실행한 값을 예측값이라는 의미로 하여 변수로 저장하여 메모리 업로드
y_pred = regressor.predict(X_test)
y_pred
array([23.94462531, 28.64761934, 32.33077781, 21.99464755, 35.28265957,
28.12319115, 26.45524167, 12.58160302, 25.56306456, 32.04254865,
23.32597109, 32.29214001, 20.14095012, 31.77638576, 29.46904954,
15.04190357, 30.0344167 , 32.62473165, 10.92503097, 22.93824236,
27.20037833, 17.75867846, 18.10527569, 16.16985336, 10.79919676,
20.03178998, 31.66807007, 18.42520819, 21.73299914, 29.1359896 ,
21.92214974, 24.36825885, 10.33853798, 28.57027834, 20.81243752,
14.53200154, 16.94944932, 21.21237735, 35.27195558, 24.73713275,
16.12598196, 11.89879942, 22.60011043, 22.26645573, 22.1334667 ,
17.99528974, 8.68452228, 35.73286016, 21.07296509, 10.51727695,
15.10201083, 23.20486955, 27.21539361, 30.31799228, 34.51063284,
20.79063836, 26.05083995, 20.90202994, 26.71031312, 33.73741146,
28.52415583, 27.14325924, 35.16257625, 22.03416555, 22.81474093,
20.99775758, 22.69550132, 14.0908763 , 32.84090607, 6.40461693,
30.72823425, 20.98887219, 18.35621099, 32.14480289, 23.79497128,
30.57166865, 20.49454935, 12.24164985, 11.67133326])
# 오차값 구하기 (MSE 값)
y_test - y_pred
81 -0.944625
165 0.352381
351 0.069222
119 -2.994648
379 2.717340
...
23 2.205029
293 5.128331
13 -6.494549
90 0.758350
61 1.328667
Name: mpg, Length: 79, dtype: float64
error = y_test - y_pred
(error ** 2).mean()
11.882268558597172
# 차트로 비교해 보자
y_test
81 23.0
165 29.0
351 32.4
119 19.0
379 38.0
...
23 26.0
293 35.7
13 14.0
90 13.0
61 13.0
Name: mpg, Length: 79, dtype: float64
# 실제 결과에 예상 결과를 삽입한후 차트를 그려야하기 때문에 frame 형태로 변환후 컬럼으로 삽입해준다.
df_test = y_test.to_frame()
df_test['y_pred'] = y_pred
df_test
# 차트 분석을 용이하게 하기 위해서 인덱스 정렬
df_test.reset_index(drop=True, inplace=True)
df_test.plot()
plt.show()
< 신규 데이터가 생겼다고 가정 후 적용하여 실행해 보자 >
# 새로운 차가 나왔습니다. 이 차의 연비를 예측하세요.
# displ 301, hp 133, cyl 8, weight 2900, accel 10.7, yr 81, origin 유럽차
# 데이터 생성
new_data = [ 8, 301, 133, 2900, 10.7, 81, 2 ]
# 기계 학습은 numpy로 시켜야함 . 행렬 nparray
np.array(new_data)
array([8.00e+00, 3.01e+02, 1.33e+02, 2.90e+03, 1.07e+01, 8.10e+01,
2.00e+00])
new_data = np.array(new_data)
# 2차원이어야 학습시킨 인공지능이 분석할수 있음
# 1개 자동차가 추가된거고 컬럼은 7개 이므로 reshape 진행
new_data.reshape(1, 7)
array([[8.00e+00, 3.01e+02, 1.33e+02, 2.90e+03, 1.07e+01, 8.10e+01,
2.00e+00]])
new_data = new_data.reshape(1, 7)
# 그대로 시행하면 이전 원-핫 인코딩을 통해 9개 컬럼으로 인공지능을 만들었기 때문에 오류가 뜸 똑같이 인코딩 진행 해야됨
regressor.predict( new_data )
# new_data 도 인코딩 진행
ct.transform(new_data)
array([[0.00e+00, 1.00e+00, 0.00e+00, 8.00e+00, 3.01e+02, 1.33e+02,
2.90e+03, 1.07e+01, 8.10e+01]])
# 변수로 메모리에 재업로드
new_data = ct.transform(new_data)
# 재실행
regressor.predict( new_data )
array([30.17837904])
# 정상동작하니 파일로 저장하여 서버로 보내준다고 가정
# 인코딩 작업을 위해 ct 변수와, 인공지능인 regressor 두개 파일을 저장해야 한다.
import joblib
joblib.dump(ct, 'ct.pkl')
['ct.pkl']
joblib.dump( regressor, 'regressor.pkl')
['regressor.pkl']
ㄴ 정상적으로 파일로 저장된것까지 확인
다음 실습문제로 계속
'MACHINE LEARNING > Machine Learning Project' 카테고리의 다른 글
ML(머신러닝) 실습 : 티처블 머신(teachable machine) 으로 food 예측 하기 (2) | 2024.05.02 |
---|---|
ML(머신러닝) 실습 : Clustering (K-Means, Agglomerative)을 활용한 고객 파악 (0) | 2024.04.30 |
ML(머신러닝) 실습 : K-Means Clustering (for 문을 활용해 Elbow Method 찾기) (0) | 2024.04.24 |
ML(머신러닝) 실습 : Logistic Regression 분류 모델 (up sampling, SMOTE 활용법) (2) | 2024.04.22 |