본문 바로가기
수업 복습/머신러닝과 딥러닝

다양한 모델 적용

by 김복칠 2024. 1. 9.

1. 데이터 불러오기 및 분배

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

air_df = pd.read_csv('/content/drive/MyDrive/머신러닝과 딥러닝/data/AirQualityUCI.csv')
air_df.info()

  • 이번 차례에서는 다양한 모델들의 성능을 비교해보겠습니다
  • 먼저 필요한 모듈들을 import 한 뒤 데이터 프레임의 컬럼 및 데이터 정보를 확인합니다
# Date, Time 컬럼을 제거
air_df = air_df.drop(['Date','Time'], axis=1)

# heatmap을 통해 상관관계를 확인
plt.figure(figsize=(12,12))
sns.heatmap(air_df.corr(),cmap='coolwarm',vmin=-1, vmax=1,annot=True)

  • 학습을 위해서 float 형태의 데이터가 아닌 컬럼을 확인하여 제거합니다
  • 이후 컬럼별 상관관계를 확인해봅니다
# StandardScaler로 독립변수(RH를 제외한 컬럼) 정규화
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler
from sklearn.metrics import mean_squared_error

scaler = StandardScaler()
X = air_df.drop('RH', axis=1) # 독립변수, 변하지 않는 값
y = air_df['RH'] # 종속변수, 추출하고자 하는 값
Xscaler = scaler.fit_transform(X)

# train : 80%, val : 20% 데이터를 분할
X_train, X_test, y_train, y_test = train_test_split(Xscaler,y,test_size=0.2, random_state=2023)

X_train.shape, y_train.shape
# 결과 : ((7485, 14), (7485,))

X_test.shape, y_test.shape
# 결과 : ((1872, 14), (1872,))
  • 이번 학습과정에서는 RH를 제외한 컬럼들을 바탕으로 RH를 예측하였습니다
  • 이를 위해서 RH를 제외한 모든 컬럼을 X(독립변수, 고정)으로 RH 컬럼은 Y(종속변수, 예측) 변수로 만들어 줍니다
  • 이후 데이터를 8:2 비율로 train, test로 나누었습니다

2. 모델별 성능 확인을 위한 점수

my_predictions = {}
colors = ['r', 'c', 'm', 'y', 'k', 'khaki', 'teal', 'orchid', 'sandybrown',
          'greenyellow', 'dodgerblue', 'deepskyblue', 'rosybrown', 'firebrick',
          'deeppink', 'crimson', 'salmon', 'darkred', 'olivedrab', 'olive',
          'forestgreen', 'royalblue', 'indigo', 'navy', 'mediumpurple', 'chocolate',
          'gold', 'darkorange', 'seagreen', 'turquoise', 'steelblue', 'slategray',
          'peru', 'midnightblue', 'slateblue', 'dimgray', 'cadetblue', 'tomato']

def plot_predictions(name_, pred, actual):
  df = pd.DataFrame({'prediction': pred, 'actual': y_test})
  df = df.sort_values(by='actual').reset_index(drop=True)
  plt.figure(figsize=(12, 9))
  plt.scatter(df.index, df['prediction'], marker='x', color='r')
  plt.scatter(df.index, df['actual'], alpha=0.7, marker='o', color='black')
  plt.title(name_, fontsize=15)
  plt.legend(['prediction', 'actual'], fontsize=12)
  plt.show()

def mse_eval(name_, pred, actual):
  global my_predictions
  global colors
  plot_predictions(name_, pred, actual)
  mse = mean_squared_error(pred, actual)
  my_predictions[name_] = mse
  y_value = sorted(my_predictions.items(), key=lambda x: x[1], reverse=True)
  df = pd.DataFrame(y_value, columns=['model', 'mse'])
  print(df)
  min_ = df['mse'].min() - 10
  max_ = df['mse'].max() + 10
  length = len(df)
  plt.figure(figsize=(10, length))
  ax = plt.subplot()
  ax.set_yticks(np.arange(len(df)))
  ax.set_yticklabels(df['model'], fontsize=15)
  bars = ax.barh(np.arange(len(df)), df['mse'])
  for i, v in enumerate(df['mse']):
    idx = np.random.choice(len(colors))
    bars[i].set_color(colors[idx])
    ax.text(v + 2, i, str(round(v, 3)), color='k', fontsize=15, fontweight='bold')
  plt.title('MSE Error', fontsize=18)
  plt.xlim(min_, max_)
  plt.show()
  • 먼저 모델의 성능을 시각적으로 쉽게 보기 위해 함수를 만들어줍니다
  • 이후 학습할 다섯가지 모델의 성능 결과 그래프를 추가적으로 쌓아서 보여줍니다
# Linear Regression
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train)
pred = lr.predict(X_test)
rs1 = np.sqrt(mean_squared_error(y_test, pred))

# Decision Tree Regression
from sklearn.tree import DecisionTreeRegressor
dtr = DecisionTreeRegressor(random_state=2023)
dtr.fit(X_train,y_train)
pred1 = dtr.predict(X_test)
rs2 = np.sqrt(mean_squared_error(y_test, pred1))

# Random Forest Regression
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
rf.fit(X_train, y_train)
pred2 = rf.predict(X_test)
rs3 = np.sqrt(mean_squared_error(y_test, pred2))

# Suppert Vector Machine
from sklearn.svm import SVR
model = SVR()
model.fit(X_train, y_train)
pred3 = model.predict(X_test)
rs4 = np.sqrt(mean_squared_error(y_test, pred3))

# lightGBM
from lightgbm import LGBMRegressor
base_model = LGBMRegressor(random_state=2023)
base_model.fit(X_train, y_train)
pred4 = base_model.predict(X_test)
rs5 = np.sqrt(mean_squared_error(y_test, pred4))

  • 확인 결과 서포트벡터머신이 가장 좋지 않은 성능을 보였고 랜덤포레스트가 가장 좋은 성능을 보였습니다

 

'수업 복습 > 머신러닝과 딥러닝' 카테고리의 다른 글

파이토치  (1) 2024.01.09
KMeans(미완성)  (0) 2024.01.09
lightGBM  (0) 2024.01.09
랜덤 포레스트  (0) 2024.01.09
서포트벡터 머신  (0) 2024.01.08