[ 01-3 마켓과 머신 러닝 ]

K - 최근접 이웃 알고리즘

어떤 데이터에 관한 답을 구할 때 주위의 다른 데이터를 보고 다수를 차지하는 것을 정답으로

사용하는 알고리즘

단점 : 데이터가 많은 경우 메모리가 많이 필요, 직선 거리 계산량 증가

문제 풀어보기

#도미

bream_length = [ 25.4 , 26.3 , 26.5 , 29.0 , 29.0 , 29.7 , 29.7 , 30.0 , 30.0 , 30.7 , 31.0 , 31.0 ,
                31.5 , 32.0 , 32.0 , 32.0 , 33.0 , 33.0 , 33.5 , 33.5 , 34.0 , 34.0 , 34.5 , 35.0 ,
                35.0 , 35.0 , 35.0 , 36.0 , 36.0 , 37.0 , 38.5 , 38.5 , 39.5 , 41.0 , 41.0]

bream_weight = [242.0 , 290.0 , 340.0 , 363.0 , 430.0 , 450.0 , 500.0 , 390.0 , 450.0 , 500.0 , 470.0 ,
                500.0 , 500.0, 340.0 , 600.0 , 600.0 , 700.0 , 700.0 , 610.0 , 650.0 , 575.0 , 685.0 , 620.0 , 680.0 ,
                700.0 , 725.0 , 720.0 , 714.0 , 850.0 , 1000.0 , 920.0 , 955.0 , 925.0 , 975.0 , 950.0]
#방어

smelt_length = [ 9.8 , 10.5 , 10.6 , 11.0 , 11.2 , 11.3 , 11.8 , 11.8 , 12.0 ,
                12.2 , 12.4 , 13.0 , 14.3, 15.0 ]
smelt_weight = [ 6.7 , 7.5 , 7.0 , 9.7 , 9.8 , 8.7 , 10.0 , 9.9 , 9.8 , 12.2 , 
                13.4 , 12.2 , 19.7, 19.9 ]

length = bream_length + smelt_length
weight = bream_weight + smelt_weight 

# 생선의(길이,무게) 데이터 만듬 #앞은 도미 뒤에는 방어순
fish_data = [[l,w] for l, w in zip(length, weight)] 

# 정답데이터를 만들어줘야함 - 뭐가 도미고, 뭐가 방어인지 컴퓨터스스로 구분할 수 있는 기준데이터 
#도미가 1이고 방어가 0으로 표현
fish_target  = [1]*35 + [0]*14  

from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
kn49 = KNeighborsClassifier(n_neighbors = 49) 
# 참고하는 데이터를 5개에서 49개로 증진 / 가장가까운 데이터 49개를 사용하여 비교한다는 뜻

kn49.fit(fish_data, fish_target)  #fit은 데이터를 활용하여 모델을 공부시키는 것
kn49.score(fish_data, fish_target) #이kn49의 정확도
  1. 다 새로움
  2. 알고리즘을 가져와서 학습 시키는 코딩을 직접할 수 있다는 게 새로움
  3. 정리한 것들이 거의 다 새롭게 알게 된 것들