생선 분류 문제를 통해서 K-최근접 이웃 알고리즘을 실습해보았다.
시장에서 여러 생선이 있는데 어떤 생선이 도미와 빙어인지 구분하지 못하는 상황이다. 따라서 생선의 길이와 무게의 데이터 셋을 가지고 도미를 찾아내는 실습 문제였다. 2개의 클래스 중 하나를 고르는 문제로 이진 분류이다.
도미 35마리와 빙어 14마리의 데이터 셋을 준비하였다.
생선 데이터 셋은 캐글에서 공개된 데이터셋을 사용한다. bream은 도미, smelt는 빙어이다. 파이썬에서 matplotlib 맷플롯립 패키지를 통해 과학 계산용 그래프를 그린다. 그리고 scatter()함수를 통해 산점도를 그린다. 도미의 경우에는 파란색 점으로 표시되었고, 빙어는 주황색 점으로 다르게 표시되었다. 점의 모습이 선형인 걸 확인할 수 있다.
k-최근접 알고리즘을 사용하기 위해 도미와 빙어의 데이터 정보를 우선 합쳤다. 합친 데이터를 사이킷런 패키지를 이용하여 나타내려면 2차원 리스트를 만들어야한다. zip() 함수와 리스트 내포 구문을 사용하여 아래와 같이 나타내준다. 그러면 49개의 생선의 길이와 무게가 준비된 것이다.
그 다음에는 이 생선이 도미인지, 빙어인지 확인하기 위한 정답 데이터가 필요하다. 규칙을 찾아 학습시킬 필요가 있다. 도미는 1, 빙어는 0으로 나타낸다. fish_target을 1이 35개, 0이 14개로 해서 나타내주었다. 그 후, k-최근접 이웃 알고리즘을 구현한 클래스인 KNeighborsClassifier를 임포트한다. 임포트한 클래스의 객체를 만든 상태에서 fish_data와 fish_target으로 정답 기준을 훈련시킨다. 그리고 score()함수를 통해 모델을 평가한다. score()을 통해 나온 값이 정확도인데, 1.0에 가까울 수록 매우 높은 것이다!
그 후에, 새로운 데이터로 이 생선이 도미인지 빙어인지 확인하고 싶을 때, predict()함수를 이용한다. 반환되는 값이 1인 걸 보니 도미인걸 알 수 있다. 아래에 49로 설정한 것은 KNeighborsClassifier 클래스 기본값이 5인데 가장 가까운 데이터 49개를 사용하여 예측한 것이다. 하지만 49개 데이터 중 35개가 도미로, 어떤 값을 넣어도 도미로 예측할 것이다.
출처 : 혼자 공부하는 머신러닝 + 딥러닝_박해선 지음
'AI > Machine Learning&Deep Learning' 카테고리의 다른 글
Machine Learning_데이터 전처리 (0) | 2021.03.19 |
---|---|
Machine Learning_훈련 세트와 테스트 세트 (0) | 2021.03.19 |
Machine Learning_지도학습 vs. 비지도학습 (0) | 2021.01.29 |
Machine Learning_판다스의 자료구조 (0) | 2021.01.28 |
파이썬 머신러닝/딥러닝_개발 환경 설정 (0) | 2021.01.27 |