Today, I will

fetch_california_housing 데이터로 선형 회귀 분석, R² 스코어 본문

Computer Science/인공지능,딥러닝

fetch_california_housing 데이터로 선형 회귀 분석, R² 스코어

Lv.Forest 2024. 9. 27. 20:19
from sklearn import linear_model, datasets
import pandas as pd
import seaborn as sns
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
# 데이터 불러오기 (California Housing)
data = datasets.fetch_california_housing()
print(data.keys())
print(data.feature_names)
print(data.target_names)
df = pd.DataFrame(data=data.data, columns=data.feature_names)
df['target'] = data.target
df.head()
# 데이터 통계 확인
df.describe()
print(df.isnull().sum())
df.plot()
sns.pairplot(df)
X_train = data.data
y_train = data.target
# y = wx + b
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
print('used features: {}'.format(np.sum(model.coef_ != 0)))
print(model.score(X_train, y_train)) # 0~1

이 단계에서 0.606232685199805 이 출력되었다.

 

print(model.score(X_train, y_train)에서 출력된 값은 R² 스코어로,

이 값은 모델이 얼마나 잘 학습되었는지를 평가하는 지표 중 하나로, 0과 1 사이의 값을 가진다.

R² 스코어란?

  • R² 스코어 (결정 계수): 이 값은 모델이 데이터를 얼마나 잘 설명하는지를 나타낸다.
    • 1: 모델이 데이터를 완벽하게 설명한다는 의미.
    • 0: 모델이 데이터를 전혀 설명하지 못한다는 의미.
    • 음수: 모델이 무의미하며, 평균값을 예측하는 것보다도 나쁘다는 의미.

현재 스코어 0.606에 대한 의미

  • 현재 모델의 R² 스코어가 0.606이므로, 이 모델은 약 **60.6%**의 데이터를 설명할 수 있다는 의미이다. 즉, 이 모델이 예측하는 값과 실제 데이터 간에 어느 정도의 일치도가 있지만, 40% 정도는 예측하지 못하고 있다는 뜻이다.
  • 회귀 문제에서 R² 스코어가 0.6 이상이면, 모델이 어느 정도 괜찮게 작동하고 있음을 의미하지만 더 좋은 성능을 위해서는 모델을 개선할 여지가 있다.

왜 1이 아닌가?

  1. 데이터의 복잡성: 선형 회귀는 입력과 출력 간에 직선 관계가 있다고 가정한다. 하지만 실제 데이터는 복잡한 비선형 관계일 수 있다. fetch_california_housing 데이터는 주택 가격을 예측하는 문제인데, 단순한 선형 모델로는 모든 변수를 잘 설명하기 어려울 수 있다.
  2. 과소적합(Underfitting): 현재 선형 회귀 모델은 데이터의 패턴을 충분히 학습하지 못했을 수 있다. 더 복잡한 모델(예: Ridge, Lasso, ElasticNet)을 사용해보면 성능이 개선될 수 있다.
  3. 데이터에 잡음이 포함: 주택 가격은 다양한 외부 요인에 영향을 받을 수 있다. 예를 들어, 경제 상황, 금리, 위치 등의 다양한 변수들이 모델에서 완전히 설명되지 않았을 수 있다.

다음 단계

  1. 더 복잡한 회귀 모델 사용: Ridge, Lasso 같은 규제 회귀 모델을 사용하면 성능이 더 나아질 수 있다.
  2. 비선형 모델 사용: 결정 트리(Decision Tree)나 랜덤 포레스트(Random Forest) 같은 모델은 비선형 데이터에 더 적합할 수 있다.
  3. 특성 엔지니어링: 주어진 특성에서 더 중요한 정보를 추출하거나 새로운 특성을 추가해 모델 성능을 높일 수 있다.

현재 점수가 나쁘지는 않지만, 더 높은 R² 스코어를 얻으려면 다양한 회귀 모델을 시도해보고 데이터를 분석하는 추가 작업이 필요할 수 있다.