생선 이름을 자동으로 알려주는 머신러닝 프로그램 만들기
먼저 도미 데이터(길이, 무게) 15개를 준비한다.matplotlib의 pylot함수를 사용하여 도미 데이터의 산점도를 그려본다.
다음으로 빙어 데이터(길이, 무게) 14개를 준비한다. 전체적인 데이터의 분포를 알기 위해서 도미와 빙어 데이터의 산점도를 그려본다.
도미와 빙어의 길이 데이터를 리스트 length 변수에, 도미와 빙어의 무게 데이터를 리스트 weight 변수에 넣어준다.
여기서 우리가 사용하는 머신러닝 패키지가 사이킷런인데, 사이킷런은 2차원 리스트로 만들어 데이터를 처리한다.
그러므로 zip 함수와 리스트 내포 구문을 사용하여 length와 weight 리스트를 2차원 배열로 만들어 fish_data를 생성한다.
fish_data에 대한 정답 리스트 fish_target을 생성한다.
도미를 1로 빙어를 0으로 표현하고, 도미의 데이터는 15개 빙어의 데이터는 14개이므로 1은 15개 0은 14개로 하여 fish_target을 생성한다.
이제 생선 데이터를 훈련하여 프로그램을 실행할 일만 남았다.
해당 모델은 K-최근접 이웃 알고리즘을 구현한 클래스인 KNeighborsClassifer를 사용해준다. K-최근접 이웃 알고리즘은 어떤 데이터에 대한 답을 구할 때 주위의 다른 데이터를 보고 다수를 차지하는 것을 정답으로 한다. 예를 들어 모델이 주변 데이터 5개를 참조하는데 가까이 있는 데이터가 도미 2개, 빙어 3개라면 해당 데이터는 빙어라고 추측한다.
KNeighborsClassifer 클래스의 객체인 kn을 만들어주고, fish_data와 fish_target을 토대로 훈련시킨다. 그런 다음 score 함수로 모델을 평가해보면 1.0 즉 모든 데이터를 정확히 맞혔다는 것을 알 수 있다.
predict 함수를 사용하여 [30,600] 데이터 즉 길이는 30, 무게는 600인 데이터의 생선 종류를 예측해보면 결과는 1(도미)로 예측한다.
KNeighborsClassifer 클래스의 기본값은 5이다. 참고 데이터를 29개로 한 새로운 kn29 모델을 생성한다. 모델을 학습시키고 정확도를 측정해보면 0.51이 나온다. 이는 무슨 값을 넣어도 참고 데이터 29개(도미 15개, 빙어 14개)를 참조하기 때문에 모두 도미라고 예측한다. 그러므로 정확도는 15/29로 0.51가 나온다.
'인공지능(AI) 공부 > 혼자 공부하는 머신러닝+딥러닝' 카테고리의 다른 글
[혼공머신] 02-2. 데이터 전처리 (0) | 2021.05.13 |
---|---|
[혼공머신] 02-1. 훈련 세트와 테스트 세트 (0) | 2021.05.13 |