궁금하니 가장 작은 개수의 조합(k = 3)에서 높은 검증 데이터셋 성능을 내는 특성이 어떤 것인지 확인해 보죠.
>>> k3 = list(sbs.subsets_[10])
>>> print(df_wine.columns[1:][k3])
Index(['Alcohol', 'Malic acid', 'OD280/OD315 of diluted wines'], dtype='object')
이 코드는 sbs.subsets_ 속성의 11번째 위치에 있는 세 개의 특성에 대한 열 인덱스를 얻습니다.18 이 열 인덱스로부터 판다스 Wine DataFrame의 특성 이름을 출력합니다.
이제 원래 테스트 데이터셋에서 KNN 분류기의 성능을 평가해 보죠.
>>> knn.fit(X_train_std, y_train)
>>> print(... 정확도:', knn.score(X_train_std, y_train))
훈련 정확도: 0.967741935483871
>>> print('테스트 정확도:', knn.score(X_test_std, y_test))
테스트 정확도: 0.9629629629629629
전체 특성 조합을 사용하여 훈련 데이터셋에서 약 97% 정확도와 테스트 데이터셋에서 약 96% 정확도를 얻었습니다. 새로운 데이터에도 잘 일반화될 것으로 보입니다. 이제 선택된 세 개의 특성에서 KNN 성능이 얼마나 되는지 확인해 보죠.
>>> knn.fit(X_train_std[:, k3], y_train)
>>> print(... 정확도:', knn.score(X_train_std[:, k3], y_train))
훈련 정확도: 0.9516129032258065
>>> print('테스트 정확도:', knn.score(X_test_std[:, k3], y_test))
테스트 정확도: 0.9259259259259259
18 역주 전체 특성으로 시작해서 하나씩 제거하기 때문에 subsets_ 속성의 11번째 원소가 특성이 세 개 남았을 때입니다.