사이킷런으로 회귀분석 진행 및 평가
회귀 평가 지표 직접 계산 - mse, mae, r2 score
딥러닝 모델 만들어 회귀분석 진행 및 평가
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import pandas as pd
import numpy as np
# 데이터 로딩
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
X = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
y = raw_df.values[1::2, 2]
# 데이터 표준화 - Standard Scaling 사용
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 데이터 분할 (훈련 세트와 테스트 세트)
tr_x, te_x, tr_y, te_y = train_test_split(X, y)
# 선형 회귀 모델 생성 및 훈련
lr = LinearRegression()
# 테스트 세트에 대한 예측
lr.fit(tr_x, tr_y)
pre_y = lr.predict(te_x)
# 회귀 평가 지표 계산 mse, mae, r2 score 사용
print('mse:', mean_squared_error(pre_y, te_y))
print('mae:', mean_absolute_error(pre_y, te_y))
print('r2_score:', r2_score(pre_y, te_y))
# mse
tt = (te_y - pre_y)**2
sum(tt)/len(tt)
# mae
tt = abs(te_y - pre_y)
sum(tt)/len(tt)
# r2 score
# 총 제곱합 (Total Sum of Squares, TSS)
mean_y = np.mean(te_y)
tss = np.sum((te_y - mean_y)**2)
# 잔차 제곱합 (Residual Sum of Squares, RSS)
rss = np.sum((te_y - pre_y)**2)
# R^2 스코어 계산
r2 = 1 - (rss / tss)
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 데이터 로딩
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
X = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
y = raw_df.values[1::2, 2]
# 데이터 표준화 - Standard Scaling 사용
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 훈련 세트와 테스트 세트로 분할
tr_x, te_x, tr_y, te_y = train_test_split(X, y)
# 모델 정의
model = Sequential()
model.add(Dense(64, input_dim=X.shape[1], activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(1))
# 모델 컴파일
model.compile(optimizer='adam', loss='mse')
# 모델 훈련
model.fit(tr_x, tr_y, epochs=100, batch_size=32, validation_data=(te_x, te_y))
# 모델 평가
loss = model.evaluate(te_x, te_y)
print(f'Test loss: {loss}')
# 모델 예측
pre_y = model.predict(te_x)