머신러닝/혼공머신

혼공머신 | Chap 1-03. 마켓과 머신러닝

하카데미 2022. 8. 8. 18:30

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개이므로 올바른 값이 아님!