기계 학습 - 훈련/테스트
모델 평가
기계 학습에서는, 우리는 특정 사건의 결과를 예측하기 위해 모델을 생성합니다. 예를 들어, 이전 장에서 중량과 엔진 배기량을 이해했을 때 자동차의二氧化碳 배출량을 예측했습니다.
모델이 충분히 좋은지 평가하기 위해 훈련/테스트라는 방법을 사용할 수 있습니다.
훈련/테스트는 무엇인가요?
훈련/테스트는 모델의 정확성을 측정하는 방법입니다.
훈련/테스트라고 불리는 이유는 데이터셋을 두 그룹으로 나누었기 때문입니다: 훈련 셋과 테스트 셋.
80%를 훈련에, 20%를 테스트에 사용합니다.
모델을 훈련하기 위해 훈련 셋을 사용할 수 있습니다.
모델을 테스트하기 위해 테스트 셋을 사용할 수 있습니다.
모델을 훈련하는 것은 모델을 생성하는 것입니다.
모델을 테스트하는 것은 모델의 정확성을 테스트하는 것입니다.
데이터셋에서 시작합니다.
테스트할 데이터셋에서 시작합니다.
우리의 데이터셋은 상점에서 100명의 고객 및 그들의 쇼핑 습관을 보여줍니다.
예제
import numpy import matplotlib.pyplot as plt numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x plt.scatter(x, y) plt.show()
결과:
x축은 구매 전의 분을 나타냅니다.
y축은 구매에 지출하는 금액을 나타냅니다.

훈련/테스트 분할
훈련 집합은 원래 데이터의 80%의 무작위 선택이어야 합니다.
테스트 세트는 20%여야 합니다.
train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:]
훈련 집합을 표시합니다
훈련 집합과 동일한 산점도를 표시합니다:
예제
plt.scatter(train_x, train_y) plt.show()
결과:
그것은 원래 데이터 집합과 유사하게 보이므로 합리적인 선택처럼 보입니다:

테스트 세트를 표시합니다
테스트 세트가 완전히 다른 것이 아니기를 확인하기 위해 테스트 세트도 확인해야 합니다.
예제
plt.scatter(test_x, test_y) plt.show()
결과:
테스트 세트는 원래 데이터 집합과 유사하게 보입니다:

데이터 집합을 적합시킵니다
데이터 집합은 어떻게 보이나요? 저는 다항식 회귀가 가장 적합하다고 생각합니다. 따라서 다항식 회귀선을 그려보겠습니다.
데이터 포인트를 따라 선을 그리기 위해 matplotlib 모듈의 plott()
방법:
예제
데이터 포인트를 통과하는 다항식 회귀선을 그립니다:
import numpy import matplotlib.pyplot as plt numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) myline = numpy.linspace(0, 6, 100) plt.scatter(train_x, train_y) plt.plot(myline, mymodel(myline)) plt.show()
결과:

이 결과는 데이터 집합에 대한 다항식 회귀를 적용하는 것을 지지할 수 있으며, 데이터 집합 밖의 값을 예측하려고 시도하면 이상한 결과를 초래할 수 있습니다. 예를 들어: 이 줄은 고객이 상점에서 6분을 쇼핑하면 200달러의 구매를 완료한다는 것을 의미합니다. 이는 과적합의 징후일 수 있습니다.
하지만 R-squared 점수는 어떻게 되나요? R-squared score는 데이터 집합이 모델에 대한 적합도를 잘 나타냅니다.
R2
R2, 또는 R square (R-squared)을 기억하시나요?
x축과 y축의 관계를 측정하며, 0에서 1 사이의 값을 가지며 0은 관계가 없고 1은 완전한 관계를 의미합니다.
sklearn 모듈에는 rs_score()
의 방법, 이 방법은 우리가 이 관계를 찾아내는 데 도움이 될 것입니다.
여기서, 고객이 상점에서 머무는 시간과 지출하는 돈 사이의 관계를 측정해야 합니다.
예제
우리의 훈련 데이터가 다항식 회귀에서 어떤 적합도를 가지고 있는지 알아보겠습니다.
import numpy from sklearn.metrics import r2_score numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) r2 = r2_score(train_y, mymodel(train_x)) print(r2)
주의사항:결과 0.799은 관계가 좋다는 것을 보여줍니다.
테스트 세트를 도입합니다.
현재, 최소한 훈련 데이터 측면에서는 꽤 좋은 모델을 구축했습니다.
그런 다음, 모델을 테스트 데이터로 테스트하여 동일한 결과를 제공하는지 확인해야 합니다.
예제
따라서 테스트 데이터를 사용하여 R2 점수를 결정해 보겠습니다:
import numpy from sklearn.metrics import r2_score numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) r2 = r2_score(test_y, mymodel(test_x)) print(r2)
주의사항:결과 0.809은 이 모델이 테스트 세트에도 적합하다는 것을 의미하며, 이 모델을 미래의 값을 예측하는 데 사용할 수 있다고 확신합니다.
예측 값
우리의 모델이 좋은 모델임을 확인한 후, 새로운 값을 예측하기 시작할 수 있습니다.
예제
고객이 매장에서 5분 동안 머물렀을 때, 그는 얼마를 소비할까요?
print(mymodel(5))
이 예제에서는 고객이 22.88 달러를 소비했음을 예측했으며, 그림과 일치할 것 같습니다:
