훈련 데이터를 표준화한 후 퍼셉트론 모델을 훈련합니다. 사이킷런의 알고리즘은 대부분 기본적으로 OvR(One-versus-Rest) 방식을 사용하여 다중 분류(multiclass classification)를 지원합니다. 세 개의 붓꽃 클래스를 퍼셉트론에 한 번에 주입하겠습니다. 코드는 다음과 같습니다.
>>> from sklearn.linear_model import Perceptron
>>> ppn = Perceptron(eta0=0.1, random_state=1)
>>> ppn.fit(X_train_std, y_train)
사이킷런의 인터페이스는 2장에서 직접 구현한 퍼셉트론과 비슷합니다. linear_model 모듈에서 Perceptron 클래스를 로드하고 새로운 Perceptron 객체를 생성한 후 fit 메서드를 사용하여 모델을 훈련합니다. 모델 매개변수 eta0은 2장에서 직접 구현한 퍼셉트론에서 사용했던 학습률 eta와 같습니다. max_iter 매개변수는 (훈련 데이터셋을 반복할) 에포크 횟수를 정의합니다.6
2장에서 했던 것처럼 적절한 학습률을 찾으려면 어느 정도 실험이 필요합니다. 학습률이 너무 크면 알고리즘은 전역 최솟값을 지나칩니다. 학습률이 너무 작으면 학습 속도가 느리기 때문에 특히 대규모 데이터셋에서 수렴하기까지 많은 에포크가 필요합니다. 에포크마다 훈련 데이터셋을 섞은 결과가 나중에 그대로 재현되도록 random_state 매개변수를 사용합니다.
사이킷런에서 모델을 훈련하고 2장 퍼셉트론 구현처럼 predict 메서드로 예측을 만들 수 있습니다. 코드는 다음과 같습니다.
>>> y_pred = ppn.predict(X_test_std)
>>> print('잘못 분류된 샘플 개수: %d' % (y_test != y_pred).sum())
잘못 분류된 샘플 개수: 1
6 역주 Perceptron과 SGDClassifier 클래스의 max_iter 기본값은 1000입니다.