[ML] 사이킷런(scikit-learn)으로 보스턴 집값 예측하기 - 다중선형회귀(Multiple Linear Regression)
사이킷런의 보스턴 주택 가격 데이터셋을 사용하여 다중선형회귀 분석을 한다. 참고로 해당 데이터셋은 윤리적인 문제로 scikit-learn 1.2 버전 이후로 삭제되었다.
1. 라이브러리 및 데이터 로드
# 필요한 라이브러리
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import pandas as pd
# 보스턴 데이터셋을 boston_dataset 변수에 저장
boston_dataset = load_boston()
# 입력변수와 출력변수 모두 dataframe 형태로 저장
x = pd.DataFrame(diabetes_dataset.data, columns=diabetes_dataset.feature_names)
y = pd.DataFrame(diabetes_dataset.target, columns=['diabetes'])
2. 학습, 테스트 데이터 나누기
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=42)
학습 데이터셋은 80%, 테스트 데이터셋은 20%로 데이터를 나누고 random_state
를 42로 설정하여 데이터 분배 결과를 고정할 수 있도록 한다.
# 잘 나누어졌는지 shape로 확인
print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)
출력 결과
((404, 13), (102, 13), (404, 1), (102, 1))
3. 모델링, 평가
# 선형 회귀
model = LinearRegression()
# 학습데이터로 모델 학습
model.fit(x_train, y_train)
# 학습이 완료된 모델에 테스트 데이터를 입력하여 y값을 예측
y_predict = model.predict(x_test)
# RMSE 값 구하기
mean_squared_error(y_test, y_test_prediction) ** 0.5
출력 결과
4.928602182665323
보스턴 주택 가격 데이터셋을 학습, 테스트 8:2로 데이터를 나누고 선형 회귀로 분석한 결과 약 4.9 정도의 오차를 가지는 모델을 생성하였다. 이전에 범죄율만 가지고 주택 가격을 예측했을 때보다 성능이 좋아졌음을 알 수 있다.(이전 RMSE : 약 7.8)
4. 최적선
# theta 0의 값
model.intercept_
# theta 1, 2, 3 ... 의 값
model.coef_
theta 0의 값 :
array([30.24675099])
theta 1, 2, 3, … , 13의 값 :
array([[-1.13055924e-01, 3.01104641e-02, 4.03807204e-02,
2.78443820e+00, -1.72026334e+01, 4.43883520e+00,
-6.29636221e-03, -1.44786537e+00, 2.62429736e-01,
-1.06467863e-02, -9.15456240e-01, 1.23513347e-02,
-5.08571424e-01]])
이번 결과는 이전에 분석한 결과(입력값이 1개)와는 다르게 입력변수가 13개이기 때문에 시각적으로 표현하기 어렵다. 하지만 다중선형회귀 모델로 최적선의 세타값들은 구할 수 있다.
6. Reference
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기