[재회귀분석] 회귀분석 분석을 통해 보스턴 주택 가격 데이터 집합 분석
개요
scikit-learn 사이트에 Toy 데이터 세트가 몇 개 준비되어 있습니다.
그중의 하나인 보스턴 주택 가격 데이터 집합을 이용하여 재회귀 분석을 하고 잔차도를 그려 보았는데 신경 쓰이는 편차치가 발견되어 그 원인을 고찰했다.
보스턴 주택 가격 데이터 집합 회귀 분석
원하는 라이브러리 가져오기
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
%matplotlib inline
데이터 세트 읽기
df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data', header=None, sep='\s+')
df.columns = ['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PTRATIO','B','LSTAT','MEDV']
데이터 프레임 확인
pd.DataFramae(df.head())
出力結果
특징량 및 정답 지정
데이터 프레임의 출력 결과에 따라 0~13열의 데이터를 특징량(설명 변수), 14행의 MEDV(주택 가격)를 정해(목적 변수)로 한다.
#住宅価格以外のデータを特徴量Xに設定
X = df.iloc[:, 0:13].values
#住宅価格を正解yに設定
y = df['MEDV'].values
특징량과 정답을 8:2로 훈련 데이터와 테스트 데이터로 나누다
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=0)
표준화
예를 들어 방 수량의 특징량은 일반적으로 한 자릿수이지만 방의 크기는 일반적으로 두 자릿수 이상(m2)이다.이 경우 수치의 크기와 편차가 크게 다르기 때문에 같은 기준으로 평가할 수 없다.
따라서 표준화하고 비례를 통일해야 한다.
#特徴量の標準化
sc = StandardScaler()
#訓練データで標準化モデルを作成し変換
X_train_std = sc.fit_transform(X_train)
#作成した標準化モデルでテストデータを変換
X_test_std = sc.transform(X_test)
#標準化された訓練データ
X_train_std[0]
모형의 제작과 훈련
이 모델은 scikit-learn 선형 회귀 모델인 LinerRegression()을 사용합니다.
#モデルの作成
model = LinearRegression()
#モデルの訓練
model.fit(X_train_std,y_train)
경사 및 슬라이스 확인
print('傾き: ' , model.coef_)
print('切片: ' , model.intercept_)
出力結果
계산 MSE
MSE는 모델의 평가 지표 중 하나로 이 값이 낮을수록 모델의 성능이 좋다.
계산 방법은 예측치와 정답의 균형과 오차이다.
scikit-learn에서 제공하는 MSE 계산squared_error 함수를 사용하면 실현할 수 있지만 여기서는 반드시 손으로 계산해야 한다.
#訓練データ、テストデータの住宅価格を予測
y_train_pred = model.predict(X_train_std)
y_test_pred = model.predict(X_test_std)
#MSEの計算
MSE_train = np.mean((y_train_pred - y_train) ** 2)
MSE_test = np.mean((y_test_pred - y_test) ** 2)
print('MSE train: ', MSE_train)
print('MSE test:', MSE_test)
出力結果
잔차도
잔차도는 오차의 편차를 시각화하고 편차가 작을수록 성능이 좋은 모델이다.
그림을 확인한 후 약 -10에서 10까지의 범위 내에서 오차의 편차를 볼 수 있다.
plt.figure(figsize = (8,4)) #プロットのサイズ指定
plt.scatter(y_train_pred, y_train_pred - y_train,
c = 'red', marker = 'o', edgecolors='white',
label = 'Training data')
plt.scatter(y_test_pred, y_test_pred - y_test,
c = 'blue', marker='s', edgecolors='white',
label = 'Test data')
plt.xlabel('Predicted values')
plt.ylabel('Presiduals')
plt.legend(loc='upper left')
plt.hlines(y=0, xmin=-10,xmax=50,color='black', lw=2)
plt.tight_layout()
plt.show()
出力結果
잔차도에서 읽는 편차 값
위의 그림에서 빨간색으로 동그라미를 친 부분의 그림을 주의하세요.
잘 모르겠지만 직선으로 그려서 무슨 상관이 있는 것 같아요.
그럼 가격과 방수의 분포 행렬도를 봅시다.
위 그림의 오른쪽 상단에 있는 산포도를 주의하세요.
듣자니 집값의 상한선이 50이라고 한다.
어떤 의도로 이런 수치가 만들어졌는지는 알 수 없지만 주택가격 상한선이 설정됐기 때문으로 보인다.
총결산
이번에는 보스턴의 주택 가격 데이터 집합을 이용해 주택 가격의 회귀를 진행해 이 과정에서 발생한 편차치를 조사했다.
평소에 나는 무의식중에 도면을 출력해서 왜 이렇게 변했는지 고찰해 보았는데 많은 것을 볼 수 있었다.
또 원래 기계 학습을 할 때 상술한 편차치를 배제하는 경우가 많다.
Reference
이 문제에 관하여([재회귀분석] 회귀분석 분석을 통해 보스턴 주택 가격 데이터 집합 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Antony/items/6ce2d984754ab8d19317텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)