본문 바로가기
SW 교육

[2024.07.30] 머신러닝 첫구현(knn알고리즘)

by 하루한번토스트 2024. 7. 30.

[주피터를 이용한 산점도 그리기]

1. 과학 계산용 그래프를 그리는 패키지인 "matpltlib"을 추가한다.

import matplotlib.pyplot as plt

 

2. 해당 패키지에있는 scatter을 이용하여 산점도를 그린다.

 

 

[머신러닝 프로그램 만들기]

1. "k-최근접 이웃 알고리즘"을 사용해 도미와 빙어 데이터를 구분하기

=> 최근접 이웃 알고리즘이란 새로운 데이터가 들어왔을때 일정거리안에 있는 기존의 데이터에서 몇개가 속하는지 계산하여 더 많은 데이터를 가진 그룹에 속하게 하는 알고리즘이다.

참고 블로그 : https://m.blog.naver.com/bestinall/221760380344

 

 

사이킷런으로 훈련세트와 테스트 세트 나누기(24.07.31 추가)

1. import해주기

from sklearn.model_selection import train_test_split

 

2. (매우 중요) 훈련 데이터와 테스트 데이터를 자동으로 나누어준다.+자동으로 섞어준다.\

train_input, test_input, train_target, test_target = train_test_split(
    fish_data, fish_target, random_state=42)

 

2-1  위 코드는 우연히 잘 안섞일수도 있는 문제가 있다. 따라서 다음 코드를 사용하여 골고루 섞어준다.

train_input, test_input, train_target, test_target = train_test_split(
    fish_data, fish_target, stratify=fish_target, random_state=42)

 


 

k-nn 알고리즘 >> 다른사람이 이미 잘 짜둠>> k-nn()함수 사용하면 매우 유용

 

1. k-nn 객체를 만들어서 그대로 보내서 사용하기(A알고리즘, B알고리즘, C알고리즘)

2. 훈련 (traing) : fitting

3. 평가:score

4. 예측:predict

 

이제 사이킷런 패키지에서  k-최근접 이웃 알고리즘을 구현한 클래스인 KNeighborsClassifier를 임포트한다.

! pip install scikit-learn
from sklearn.neighbors import KNeighborsClassifier

 

1. k-nn 알고리즘을 사용하기 위한 객체 생성

kn=KNeighborsClassifier()#객체 생성

 

2. 훈련

kn.fit(fish_data, fish_target)#훈련

 

3. 평가(안해도  good)

kn.score(fish_data)#평가하기 << 원래는 다른 데이터를 주어야하지만 여기서는 원본 데이터를 주었음

0~1 사이라 만점이 1.0이다

 

4. 예측 predict

kn.predict([[30,600]]) #길이 30, 무게가 600은 무엇일까요?

array[1]은 무엇인가?

=> kn.fit(fish_data, fish_target)#훈련 시킬때 도미는 1, 빙어는 0으로 가정했기때문에 

    array[1]은 도미이다.

 

총 코드

import matplotlib.pyplot as plt #matplotlib의 pylot 함수를 plt로 줄여서 사용 
from sklearn.neighbors import KNeighborsClassifier

"데이터 준비하기"
#도미 데이터 추가#
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]

length= bream_length+smelt_length; #도미 + 빙어
weight= bream_weight+smelt_weight; #도미 + 빙어

fish_data=[[l,w] for l,w in zip(length,weight)]#총 데이터 생성
fish_target=[1]*35 +[0]*14 #목표 데이터 생성 (앞35개는 도미, 뒤 14개는 빙어)

kn=KNeighborsClassifier()#객체 생성
kn.fit(fish_data, fish_target)#훈련
kn.score(fish_data,fish_target)
kn.predict([[30,600]])

plt.scatter(bream_length,bream_weight)
plt.scatter(smelt_length,smelt_weight)
plt.scatter(30,600,marker="*")
plt.xlabel('lenght')
plt.ylabel('weight')
plt.show()

 

 


훈련세트와 테스트세트

 

테스트 세트 : 평가에 사용하는 데이터

훈련 세트 : 훈련에 사용하는 데이터

 



 

 


 

행렬의 범위에 대한 조건

1번 전체

2번  [0,0]은  제일 왼쪽 위다

3번  [0,1]은  제일 오른쪽 위다

 

다음 9개를 전부 이해했으면 끝이다

 

 

파랑-훈련  세트

주황-테스트 세트

 

표준점수=원점수-평균점수 / 표준편차

 

 

 

[문법 공부]

1. Numpy 사용하여 제작 

 

2. pandas  의 활용