과제: Boston 주택 가격 Linear Regression 예측
- Boston 주택 가격 데이터셋을 사용하여 주택 가격을 예측하는 회귀 모델을 만드세요.
- Linear Regeression을 사용하세요
- MSE로 성능을 평가하세요
- 아래와 같이 데이터를 불러오세요
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
X, y = housing['data'], housing['target']
위 과제에선 전처리를 하지 않아도 된다는 조건이 있었으므로
단순히 선형회귀분석 사이클을 돌려보는 연습을 한다는 마음으로 복습부터 시작했다.
1. 데이터 프레임 생성하기
# 주어진 데이터
housing.data
housing.target
# data 데이터프레임화하기
housing_data_df = pd.DataFrame(data=housing.data, columns=housing.feature_names)
housing_data_df.info()
# target 데이터프레임화하기
housing_target_df = pd.DataFrame(data=housing.target, columns=housing.target_names)
housing_target_df.info()
# CONCAT 활용해 housing 데이터프레임 생성하기
housing_df = pd.concat([housing_data_df, housing_target_df], axis=1)
housing_df.head(3)
housing_df에서 MedInc, HouseAge, AveRooms, AveBedrms, Population, AveOccup, Latitude, Longitude 중 MedHouseVal(종속변수)와 선형 관계가 있는 독립변수(들)을 찾아 선형회귀분석을 실행하면 된다.
2. 선형 관계 확인하기 - seaborn 활용해 pairplot 그려보기
사실 내가 예상한 아름다운 선형 관계를 보여주는 컬럼은 없었지만,
굳이 하나 꼽자면 MedInc이 선형 관계를 보여주고 있으므로 독립변수, 종속변수를 설정하고 가설을 세워준다.
3. 변수 확립 후 가설 세우기
- 독립변수 = MedInc
- 종속변수 = MedHouseVal
- 귀무가설: MedHouseVal은 MedInc에 영향을 받지 않을 것이다.
- 대립가설: MedHouseVal은 MedInc에 영향을 받을 것이다.
4. 테스트-트레인 데이터 분류 (3:7)
문제에서 주어진 대로 3:7의 비율로 테스트-트레인으로 데이터를 분류해 선형회귀모델에 트레인 데이터를 학습시킨다.
# 변수 할당하기
X=housing_df[['MedInc']]
y=housing_df[['MedHouseVal']]
# 테스트-트레인 분류
X_train, X_test, y_train, y_test = train_test_split(housing_df[['MedInc']], housing_df[['MedHouseVal']],
test_size=0.3, shuffle=True, random_state=42)
5. 선형회귀모델 학습 및 예측
# 선형회귀모델 불러오기
from sklearn.linear_model import LinearRegression
model_lr = LinearRegression()
# 모델 학습시키기
model_lr.fit(X_train,y_train)
# 학습한 모델에 테스트값 넣어 예측하기
y_pred=model_lr.predict(X_test)
6-1. 검정 - MSE, r2 score
위 선형회귀모델이 얼마나 정확도를 가지는지 검정한다.
from sklearn.metrics import mean_squared_error, r2_score
print('MSE 값:', mean_squared_error(y_true, y_pred))
print('r2 값:', r2_score(y_true, y_pred))
MSE 값: 0.6917979868048499
r2 값: 0.47293192589970245
6-2. 검정 - OLS
import statsmodels.api as sm
results = sm.OLS(y, sm.add_constant(X)).fit()
results.summary()
7. 검정 해석하기
① MSE: MSE값이 낮을수록 모델의 예측이 실제값에 더 가깝다는 것을 의미
약 0.69
⇒ 다른 변수 4개를 넣고 분석했을 때 약 1.14가 나왔으므로 이와 비교해서는 예측이 실제값에 더 가깝다는 것을 알 수 있음.
② r2 score: 모델의 설명력을 보여주는 지표로 0과 1사이의 값을 가지며 1에 가까울수록 믿을 수 있다고 판단
약 0.47
⇒ 다른 변수 4개를 넣고 분석했을 때 약 0.12가 나왔으므로 이와 비교해서는 예측이 실제값에 더 가깝다는 것을 알 수 있음.
③ Prob(f-statistic): f-검정 p-value 값으로 도출된 회귀식이 회귀분석모델 전체에 대해 통계적으로 의미가 있는지 파악
0
⇒ 0.05보다 작으므로 신뢰 가능
④ P>|t|: t-검정 p-value 값으로 각 변수가 종속변수에 미치는 영향이 유의한지 파악
0
⇒ 0.05보다 작으므로 신뢰 가능
선형회귀모델 복습하면서 과제 2번 끝냈다.
아무것도 모르는 상태에서 기본 프로세스를 아는 상태가 된 것같아 뿌듯하다.
전처리, 정규화, 과적합 여부 판단 등 더 정확한 분석을 하기 위해 거쳐야할 과정들은 많지만..
'머신러닝' 카테고리의 다른 글
[앙상블] 보팅(Voting), 배깅(Bagging), 부스팅(Boosting) (0) | 2024.06.25 |
---|---|
[머신러닝] 로지스틱회귀 (0) | 2024.06.04 |
[머신러닝] 선형회귀분석 및 검정 (1) | 2024.06.03 |