728x90
What is Model Validation
  • 우리는 모델을 만들었습니다. 하지만 그게 얼마나 좋은 걸까요?

  • 이번 수업에서는, 여러분은 여러분의 모델의 질을 측정하기 위한 모델 검증(model validation)을 사용하는 법을 배울 것입니다. 모델의 질을 측정하는 것은 여러분의 모델을 반복해서 향상시키기 위한 핵심입니다.

What is Model Validation

  • 여러분은 여러분이 만드는 거의 모든 모델의 가치를 평가하고 싶을 것입니다. 대부분의(비록 모든 것은 아니지만) 어플리케이션의 경우, 모델의 질에 대한 적절한 측정 방법은 예측의 정확도입니다. 다시 말해, 모델의 예측이 실제로 일어나는 것과 유사한가를 보는 것입니다.

  • 많은 사람들은 정확도 예측에 있어 큰 실수를 하곤 합니다. 그들은 그들의 학습 데이터를 이용해 예측을 한 뒤 학습 데이터의 목표값과 비교합니다. 이러한 접근법에 대한 문제점과 해결법은 잠시 후 알게 되겠지만, 먼저 어떻게 해야 할 지에 대해 알아보도록 합시다.

  • 여러분은 먼저 이해할 수 있는 방식으로 모델의 질을 요약할 필요가있습니다. 만약 10000가구에 대한 예측과 실제 집값을 비교한다고 할 때, 여러분은 아마 좋거나 나쁜 예측의 혼합을 보게 될 것입니다. 10000개의 예측과 실제 값을 보는 것에는 핵심을 볼 수 없습니다. 우리는 이것을 하나의 계측값으로 요약할 필요가 있습니다.

  • 모델의 질을 요약하기 위한 많은 계측법이 있지만, 우리는 Mean Absolute Error(평균 절대 오차 - MAE라고도 불리는) 것으로 시작해볼 것입니다. 마지막 단어인, 오차로부터 시작해봅시다.

  • 각 집값의 예측되는 오차는 :

error=actual−predicted
  • 그래서, 만약 집값이 $150000이고, 여러분이 예측이 $100000이라면 오차는 $50000이 됩니다.

  • MAE 계량을 통해, 우리는 각 오차의 절대값을 얻을 수 있습니다. 이 방법은 각 오차를 양수로 변환해줍니다. 우리는 그 뒷 각 오차의 평균값을 계산합니다. 이 방법이 모델의 질을 측정하기 위한 우리의 계량법입니다. 순수하게 영어로 표현하면,

On average, our predictions are off by about X.

  • MAE를 계산하기 위해서는, 먼저 모델이 필요합니다.(코드 중략) 일단 모델을 생성하고 나면, 평균절대오차를 계산하는 방법은 다음과 같습니다.
from sklearn.metrics import mean_absolute_error predicted_home_prices = melbourne_model.predict(X) mean_absolute_error(y, predicted_home_prices)
434.71594577146544

The Problem with "In-Sample" Scores

  • 우리가 계산한 측정값은 표본 내 성적("In-Sample" Scores)이라고 부를 수 있습니다. 우리는 모델을 구축하고 평가하기 위해 집들에 대한 하나의 "샘플"을 사용했습니다. 이게 왜 좋지 않은가에 대해 알아봅시다.

  • 생각해봅시다, 거대한 부동산 시장에서, 문 색깔은 집값과 그다지 연관이 없습니다.

  • 하지만, 여러분이 모델을 만들때 쓴 샘플에서, 녹색의 문을 갖는 모든 집들은 매우 비싼 것으로 나타났습니다. 이 모델의 역할은 집값을 예측하기 위해 패턴을 찾는 것이고, 그래서 이러한 패턴을 찾아내어, 녹색의 집이 매우 비쌀 것이라는 예측을 할 것입니다.

  • 이러한 패턴이 학습 데이터에서 나타났기 때문에, 학습 데이터에서 이 모델은 정확할 것으로 나타날 것입니다.

  • 하지만 모델이 새 데이터를 볼 때 이러한 패턴이 잡히지 않는다면, 이 모델은 연습때보다 매우 부정확할 것입니다.

  • 모델의 실험값은 새 데이터에 대한 예측에서 오기 때문에, 우리는 모델을 만들 때 쓰이지 않은 데이터를 성능 측정에 사용합니다. 이를 위한 가장 직접적인 방법은 모델 제작 시 일부 데이터를 제외하고, 이전에 보이지 않은 데이터를 정확도 측정 테스트에 사용하는 것입니다. 이 데이터를 검증 데이터(Validation data)라고 부릅니다.

Coding It

  • scikit-learn 라이브러리는 데이터를 둘로 나누기 위해 train_test_split이라는 함수를 갖고 있습니다. 우리는 이 데이터중 일부를 모델 피팅을 위한 학습 데이터로 사용하고, 나머지 데이터를 mean_absolute_error를 계산하기 위한 검증 데이터로 사용할 것입니다.

  • 코드는 다음과 같습니다:

from sklearn.model_selection import train_test_split # split data into training and validation data, for both features and target # The split is based on a random number generator. Supplying a numeric value to # the random_state argument guarantees we get the same split every time we # run this script. train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 0) # Define model melbourne_model = DecisionTreeRegressor() # Fit model melbourne_model.fit(train_X, train_y) # get predicted prices on validation data val_predictions = melbourne_model.predict(val_X) print(mean_absolute_error(val_y, val_predictions))
260991.8108457069
728x90

+ Recent posts