본문 바로가기
머신러닝 (지도학습)/회귀분석

[파이썬 머신러닝] 다중 회귀분석 (보스톤 집값)

by 만다린망고 2023. 9. 7.
반응형

파이썬에서 다중 회귀분석 하는 방법을 알아봅시다. 설명은 주석에 달아놓았습니다. 절차를 간단히 설명하겠습니다. 

- boston 집값 데이터를 불러옴
- 독립변수 종속변수를 추출하고 데이터프레임으로 만듦
- 상관관계 행렬 그래프를 그려봄
- 데이터를 train set과 test set 으로 분할함
- 데이터를 정규화함 (min max)
- 회귀 모델을 학습함
- train 데이터로 평가함
- test 데이터로 평가함 

평가지표는 mse(mean squared error), rmse, $R^2$ 입니다. 

import pandas as pd
import numpy as np
from sklearn.datasets import load_boston

########################################
#데이터 불러오기
boston=load_boston()

#독립변수, 종속변수 변수 생성
x=boston.data
y=boston.target

#데이터프레임으로 만들기
df=pd.DataFrame(x,columns=boston.feature_names)
df['PRICE']=y


########################################
#데이터 살펴보기
df.T
df.shape
df.info()
df.isna().sum() #결측치 확인

########################################
#상관관계 행렬 그래프 그리기
import matplotlib.pyplot as plt
import seaborn as sns

corr = df.corr() #상관관계 행렬
sns.heatmap(corr, annot=True, 
            vmax=1, vmin=-1, center=0, cmap='vlag')
plt.show()


########################################
#데이터 분할
from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=99)

#Min-max 정규화
from sklearn.preprocessing import MinMaxScaler
x_train_scaled=MinMaxScaler().fit_transform(x_train)
x_test_scaled=MinMaxScaler().fit_transform(x_test)

########################################
#회귀분석 수행

##모델학습
from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.fit(x_train_scaled,y_train)

##train 데이터로 평가
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score

x_train_pred=lr.predict(x_train_scaled)

mse=mean_squared_error(y_train,x_train_pred)
rmse=np.sqrt(mse)
r2=r2_score(y_train,x_train_pred)

print('mse: {:.2f}'.format(mse))
print('rmse: {:.2f}'.format(rmse))
print('r2: {:.2f}'.format(r2))

##test 데이터로 평가
x_train_pred=lr.predict(x_train_scaled)

mse=mean_squared_error(y_train,x_train_pred)
rmse=np.sqrt(mse)
r2=r2_score(y_train,x_train_pred)

print('mse: {:.2f}'.format(mse))
print('rmse: {:.2f}'.format(rmse))
print('r2: {:.2f}'.format(r2))

 

회귀계수와 절편을 출력하는 방법은 아래와 같습니다. 

 

>>> lr.coef_
array([-1.10076150e+01,  4.56642180e+00,  5.69080470e-01,  1.91614625e+00,
       -7.05740571e+00,  2.01227498e+01, -1.58800661e-03, -1.60490873e+01,
        6.29081905e+00, -6.25426937e+00, -8.71864884e+00,  2.90024095e+00,
       -1.89181408e+01])
>>> lr.intercept_ 
27.119267954463865
반응형

댓글