머신러닝 알고리즘의 성능을 제대로 평가하기 위해서는 훈련 데이터와 평가에 사용하는 데이터가 각각 다르게 준비되어야한다. 가장 간단한 방법 중 하나는 평가를 위한 데이터 셋을 따로 준비하거나 이미 준비된 데이터 중에서 일부를 떼어내어 쓰는 것이다. 평가에 사용하는 데이터를 테스트 세트, 훈련에 사용되는 데이터를 훈련 세트라고 한다.
앞의 35개의 데이터는 도미, 뒤의 14개는 빙어에 대한 데이터이다.
주의할 부분은 슬라이싱 연산을 사용하면 마지막 인덱스의 원소는 포함되지 않는다는 것이다.
훈련 데이터를 앞의 35개 데이터로, 테스트 데이터를 뒤의 14개 데이터로 할 경우 , score() 함수를 통해 정확도 결과를 보면 0.0이 나온다. 앞에 35개의 데이터를 담고 있는 훈련 데이터셋이 모두 도미의 데이터로 빙어 데이터가 없는 상황이다. 훈련 셋과 데이터 셋은 골고루 섞여 있어야하는데 샘플링 편향이 발생한 것이다.
골고루 샘플을 뽑기 위해서 파이썬 라이브러리 중 넘파이를 사용할 것이다. numpy를 통해 고차원의 배열을 쉽게 조작할 수 있다. fish_data와 fish_target까지는 그대로 유지해주고, input_arr와 target_arr를 새롭게 생성하였다. seed()함수를 통해 일정한 결과를 내도록 랜덤 시드를 설정하였고, np.arrange()로 1씩 증가하는 배열을 생성한 후 , shuffle로 섞었다.
출력해보면 train_input의 첫 번째 원소는 input_arr의 14번째 원소인 것을 알 수 있다. 끝의 14개 데이터를 test_input과 target으로 넣어주고 산점도를 그려보면 아래와 같이 나타난다. 또한 사이킷런의 KNeighborsClassifier 클래스를 통해 모델 객체를 만들고 훈련시킨 후, 정확도를 보면 1.0으로 100%인 것을 확인해 볼 수 있다.
출처 : 혼자 공부하는 머신러닝 + 딥러닝_박해선 지음
'AI > Machine Learning&Deep Learning' 카테고리의 다른 글
Machine Learning_일차함수 관계식 찾기 (0) | 2021.03.20 |
---|---|
Machine Learning_데이터 전처리 (0) | 2021.03.19 |
Machine Learning_k-최근접 이웃 알고리즘 (0) | 2021.03.15 |
Machine Learning_지도학습 vs. 비지도학습 (0) | 2021.01.29 |
Machine Learning_판다스의 자료구조 (0) | 2021.01.28 |