회귀모델 평가지표 구하기

하는·2024년 3월 16일
0

ML

목록 보기
2/7

알고리즘 설명

사이킷런으로 회귀분석 진행 및 평가
회귀 평가 지표 직접 계산 - 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)

tensorflow 딥러닝 만들고 회귀분석

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)
profile
천천히 꾸준히 취미처럼 냐미😋

0개의 댓글