1. 생선 분류 문제
생선 이름을 자동으로 알려주는 머신러닝 개발하자!
머신러닝: 아무도 기준을 알려주지 않으므로, 스스로 기준을 찾아서 일을 한다.
예) 30~40cm 길이의 생선은 도미다.
머신러닝을 사용해 도미와 빙어 구분하기.
- 클래스: 도미, 빙어
- 특성(feature): 길이, 무게
- 데이터 규모: 도미 35마리, 빙어 14마리
- 생선 데이터셋의 출처: https://www.kaggle.com/aungpyaeap/fish-market
- 예제 도미 데이터: http://bit.ly/bream_list
- 예제 빙어 데이터: http://bit.ly/smelt_list
데이터 산점도
import matplotlib.pyplot as plt
plt.scatter(bream_length, bream_weight) # 도미의 길이, 무게
plt.scatter(smelt_length, smelt_weight) # 빙어의 길이, 무게
plt.xlabel('length') # x축: 길이
plt.ylabel('weight') # y축: 무게
plt.show()

k-최근접 이웃(k-Nearest Neighbors)
: 어떤 데이터에 대한 답을 구할 때 주위의 다른 데이터를 보고 다수를 차지하는 것을 정답으로 사용.
# 도미, 빙어 데이터 합치기
length = bream_length + smelt_length
weight = bream_weight + smelt_weight
# 길이와 무게를 2차원 리스트로 생성
fish_data = [[l, w] for l, w in zip(length, weight)]
fish_target = [1] * 35 + [0] * 14 #1: 도미, 0: 빙어
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
kn.fit(fish_data, fish_target)
kn.score(fish_data, fish_target)
Test 데이터 시각화
plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.scatter(30, 600, marker='^')
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

kn.predict([[30, 600]]) # 출력: array([1]) → 도미로 예측
print(kn._fit_X) # _fit_X 속성에 전달한 fish_data를 모두 갖고 있음
print(kn._y) #_y 속성에 fish_target을 갖고 있음
KNeighborsClassifier 클래스의 참고할 데이터 기본값 = 5
kn49 = KneighborsClassifier(n_neighbors=49) #참고 데이터를 49개로 한 모델
※ 총 데이터가 49개이므로 올바른 값이 아님!
'머신러닝 > 혼공머신' 카테고리의 다른 글
혼공머신 | Chap 03-3. 특성 공학과 규제 (0) | 2022.08.24 |
---|---|
혼공머신 | Chap 03-2. 선형 회귀 (0) | 2022.08.23 |
혼공머신 | Chap 03-1. k-최근접 이웃 회귀 (0) | 2022.08.22 |
혼공머신 | Chap 02-2. 데이터 전처리 (0) | 2022.08.17 |
혼공머신 | Chap 02-1. 훈련 세트와 테스트 세트 (0) | 2022.08.11 |