[TIL] 21.06.09 Multi linear regression

Seung Joo·2021년 6월 9일
0

TIL

목록 보기
15/31
post-thumbnail

two feature Multi linear regression

데이터 중 필요데이터만 요약

# feature와 label 나누기
X = df.drop('price', axis=1)
y = df['price']
from sklearn.model_selection import train_test_split
# 학습, 테스트 데이터로 나누기 (학습데이터 사이즈 = 75%, 테스트 데이터 사이즈 = 25%)
X_train, X_test, y_train, y_test = train_test_split(X,y, train_size=0.75)
X_train.shape, X_test.shape
#
#
# out:
# ((16209, 16), (5404, 16))
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
from math import sqrt
# 회귀모델 생성
lm = LinearRegression()
# 두가지 특성열 선택하여 다중 회귀 모델 생성
X_train = X_train[['sqft_living', 'grade']]
X_test = X_test[['sqft_living', 'grade']]
# 학습 데이터 선형회귀모델로 학습
lm.fit(X_train, y_train)
# 테스트 데이터에 대한 예측
pred = lm.predict(X_test)
t_pred = lm.predict(X_train)
# train 데이터에 대한 MSE, MAE, RMSE, R2
t_mse = mean_squared_error(y_train, t_pred)
t_mae = mean_absolute_error(y_train, t_pred)
t_rmse = sqrt(t_mse)
t_r2 = r2_score(y_train, t_pred)

# test 데이터에 대한 MSE, MAE, RMSE, R2
mse = mean_squared_error(y_test, pred)
mae = mean_absolute_error(y_test, pred)
rmse = sqrt(mse)
r2 = r2_score(y_test, pred)

print(f"모델의 절편 : {lm.intercept_}\n")
print(f"모델의 sqft_living 특성에 대한 회귀 계수 : {lm.coef_[0]}")
print(f"모델의 grade 특성에 대한 회귀 계수 : {lm.coef_[1]}\n")

print("train data MSE, MAE, RMSE, R2")
print(f"MSE : {t_mse}\nMAE : {t_mae}\nRMSE : {t_rmse}\nR2 : {t_r2}\n")

print("test data MSE, MAE, RMSE, R2")
print(f"MSE : {mse}\nMAE : {mae}\nRMSE : {rmse}\nR2 : {r2}")
#
#
# out:
# 모델의 절편 : -623763.8067710708

# 모델의 sqft_living 특성에 대한 회귀 계수 : 175.3032095614536
# 모델의 grade 특성에 대한 회귀 계수 : 104411.56033263664

# train data MSE, MAE, RMSE, R2
# MSE : 61475383701.26112
# MAE : 164744.54346371544
# RMSE : 247942.29913683774
# R2 : 0.5349424211836689

# test data MSE, MAE, RMSE, R2
# MSE : 66643527809.12729
# MAE : 162378.15102719804
# RMSE : 258154.0776534961
# R2 : 0.5324446606536419

결정계수 R2R^2이 학습데이터와 테스트 데이터 간의 차이가 거의 없다고 볼 수 있기 때문에 "일반화가 잘 되었다" 고 판단할 수 있다.

profile
조금씩 천천히

0개의 댓글