더북(TheBook)

5.3.2 모델 복잡도를 수동으로 조작

지금까지는 sklearn이 그 모든 힘든 작업을 우리를 대신해서 처리해 주었습니다. 지금껏 사용한 모든 예제에서도 sklearn의 메서드를 사용하여 모든 기계의 손잡이를 설정했지요. sklearn 외에도 다른 패키지를 이용해서 최적의 손잡이 설정을 찾을 수 있습니다. 그중 일부는 머신 러닝 또는 수학이나 공학 분야에 특화되어 있습니다.

그중 하나는 NumPy가 제공하는 polyfit 루틴입니다. polyfit은 입력 값과 출력 값 그리고 데이터에 적용할 다항식의 차수를 입력받습니다. 이 함수는 2.8절에서 배웠던 다항식의 계수들을 최적화합니다. np.poly1d는 이 계수들을 입력 값과 출력 값을 취할 수 있는 함수로 변환합니다. 어떻게 작동하는지 다음 코드를 살펴봅시다.

 

In [5]:

# 1차 다항식(직선)을 적합-예측-평가합니다
model_one = np.poly1d(np.polyfit(train_ftr, train_tgt, 1))
preds_one = model_one(test_ftr)
print(preds_one[:3])
[53.218 41.4552 56.8374]

 

흥미롭습니다. 처음 세 개의 예측 값이 LR 모델 결과와 완전히 같습니다. 다른 예측 값도 마찬가지입니다. 실제로 그런지, 또 RMSE는 어떤지 다음에서 살펴보죠.

 

In [6]:

# 예측 값이 모두 일치하는지 확인합니다
print("all close?", np.allclose(sk_preds, preds_one))

# sklearn을 이용해서 평가합니다
mse = metrics.mean_squared_error
print("RMSE:", np.sqrt(mse(test_tgt, preds_one)))
all close? True
RMSE: 86.69151817350722
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.