본문 바로가기
개발노트/머신러닝

[머신러닝]K-최근접 이웃 알고리즘 - 예제

by 전지적진영시점 2023. 3. 10.
반응형

개발 환경

---------------------------------

OS : Mac

개발 툴 : colab 

개발 언어 : python

---------------------------------

 

이번 포스팅에서는 K-최근접 이웃 알고리즘 예제다.

 

아래 링크는 K-최근접 이웃 알고리즘 개념이다.

한번 읽고 예제를 보는 것이 도움될 것 같다.

 

https://jpointofviewntoe.tistory.com/127

 

 

이번 포스팅을 포함하여 한동안은 사이킷 런 패키지에 대한 글을 다룰것이다.

 

k-최근접 이웃 알고리즘은 사이킷런 패키지에서 구현한 KNeighborClassifier 클래스이다.

 

 

1. KNeighborClassifier 클래스를 import한다.

 

from sklearn.neighbors import KNeighborsClassifier

 

 

2. 데이터를 준비한다.

 

도미와 빙어의 길이와 무게의 데이터이다.

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, 475.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]

 

빙어 데이터와 도미 데이터를 합쳐서 fish_data를 만들자

 

먼저 도미, 빙어의 길이 데이터와 도미, 빙어의 무게 데이터를 만들거다.

 

weight = bream_weight + smelt_weight
length = bream_length + smelt_length

 

사이킷 런 패키지를 사용하려면 각 특성의 리스트를 세로 방향으로 늘어뜨린 2차원 리스트가 필요하다.

zip() 함수를 사용하여 각 리스트에서 요소 한개씩 뽑아 [l, w]가 하나의 원소로 구성되는 리스트를 만든다.

 

fish_data = [[l,w] for l, w in zip(length,weight)]

 

다음 fish_target을 만든다.

 

fish_target 데이터는 정답 데이터이다. 지금 만드는 모델이 생선의 길이와 무게를 보고 도미와 빙어를 구분하는 규칙을 찾기 위해서는

뭐가 도미이고 뭐가 빙어인지는 알려줘야한다.

 

나는 도미를 찾아낼거니까 도미는 1, 빙어 0으로 가겠다.

 

fish_target = [1] * 35 + [0] * 14

 

 

3. KNeighborClassifier 클래스의 객체를 만들자

kn = KNeighborsClassifier()

 

이 객체에 fish_data와 fish_target을 전달하여 도미를 찾아내기위한 학습을 시킬거다.

이를 머신러닝에서는 훈련이라고 부르며 fit() 메서드가 이 역할을 해줄것이다.

 

 

 

 

4. 훈련

 

fit 메서드로 훈련후 score 메서드를 통해 얼마나 잘 훈련되었는지 평가한다.

0에서 1 사이의 값을 리턴하며 1이면 데이터를 정확히 맞혔다는거다.

 

kn.fit(fish_data, fish_target)

kn.score(fish_data, fish_target)

 

 

5. 데이터 예측

 

predict 메서드는 새로운 데이터의 정답을 예측한다.

길이 30 무게 600 데이터를 넣어보겠다.

kn.predict([[30,600]])

 

결과는 도미다, 맞췄다 !

 

array([1])

 

 

https://www.buymeacoffee.com/jinyyyyleeG

 

cloi

Are you sure? Switching to a new level will terminate your current membership. You will no longer have access to this level or its rewards.

www.buymeacoffee.com

 

반응형

댓글