학습 목표
- 크로스 밸리데이션(Cross Validation)으로 모델을 검증하는 방법을 이해합니다.
핵심 키워드
- cross_val_predict()
- r2_score
학습하기
학습 목표
- 크로스 밸리데이션(Cross Validation)으로 모델을 검증하는 방법을 이해합니다.
핵심 키워드
- cross_val_predict()
- r2_score
학습하기
학습내용
머신러닝 알고리즘 가져오기
from sklearn.tree import DecisionTreeRegressor
model = DecisionTreeRegressor(random_state=42)
model
tree 기반 알고리즘을 사용해보겠습니다.
Insulin 데이터는 수치형 데이터를 예측하므로 regression을 사용해야 합니다.
다른 알고리즘도 사용할 수 있지만 tree 기반 알고리즘이 좋은 성능을 내기 때문에 tree 알고리즘을 사용해보겠습니다.
결과 :
model.fit(X_train, y_train)
모델의 정답값을 예측해보겠습니다.
결과 :
Cross validation
from sklearn.model_selection import cross_val_predict
y_predict = cross_val_predict(model, X_train, y_train, cv=5, verbose=2, n_jobs=-1
y_predict
cross validation으로 학습세트의 오차를 측정합니다.
cv는 모의고사를 몇 번에 나눠서 풀 것인지를 지정합니다.
로그를 표시하기 위해 verbose 옵션을 지정합니다.
장비가 4개이기 때문에 4 concurrent workers를 돌린다고 나타나며,
머신러닝을 돌리는 환경과 장비에 따라 다르게 나올 수 있습니다.
cv가 많으면 많을수록 시간이 오래 걸리지만 정확도가 높아집니다.
결과 :
(y_predict == y_train).sum()
정답을 정확하게 맞춘 갯수를 알아봅니다. 전체 300여 개 중에서 매우 적습니다.
결과 :
3
sns.regplot(y_train, y_predict)
regplot을 통해 회귀선이 구해집니다. 회귀라는 것은 수치를 딱 맞추기가 어렵습니다.
이상치 때문에 회귀선이 조금 더 기울어집니다.
200 미만의 값은 예측을 잘 했지만 200 이상의 값들은 실제값과 예측값의 차이가 큽니다.
결과 :
from sklearn.metrics import r2_score
r2_score(y_train, y_predict)
회귀가 잘 되었는지 측정하는 r2_score metric에서는 1에 가까워야 잘 예측한 것인데
회귀값과 예측값이 차이가 큰 경우가 있어서 수치가 낮게 나왔습니다.
결과 :
-0.144292856027
sns.distplot(y_train, hist=False, label="train")
sns.distplot(y_predict, hist=False, label="predict")
정답값과 예측값의 분포를 그립니다.
distplot에서 label을 그릴 때는 hist를 False으로 해야 합니다.
얼추 비슷하게 예측했지만 안 맞는 구간이 있다는 것을 알 수 있습니다.
대체로 Insulin이 800 넘는 것은 500 정도로 예측하고, 500 정도 되는 데이터를 800으로 잘못 예측했습니다.
결과 :
https://colab.research.google.com