[Scikit-Learn] K-최근접 이웃(K-nearest Neightbors, KNN) 알고리즘_분류

실행 순서
1. 데이터 수집
2. 데이터 전처리
3. 훈련 모델 생성(fit)
4. 모델 검증(score)
5. 예측(predict)

1. 데이터 수집

  • 임의 데이터 생성
# - 도미 길이와 무게
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]
  • 산점도로 데이터 확인
plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)

(해석)

파란색 : 도미, 주황색 : 빙어

도미와 빙어는 길이에 따라 무게가 증가하는 형태를 보임

 

2. 데이터 전처리

  • 데이터 합치기
    • 도미와 빙어의 길이는 길이끼리, 무게는 무게끼리
# 문자열 합치기
length = bream_length + smelt_length
weight = bream_weight + smelt_weight

 

  • 하나의 데이터 셋으로 만들기 (2차원 데이터셋으로 생성)
    • 형태 : [[길이, 무게], [길이, 무게],...]]
    • 변수명 : fish_data
    • zip() : 각각의 리스트 안에서 각 인덱스의 쌍을 반환해줍니다
fish_data = [[leng, wei] for leng, wei in zip(length, weight)]

 

  • 정답 데이터셋 만들기(종속변수)
    • 1차원 리스트로 생성
    • 종속변수의 갯수와 독립변수 갯수는 동일해야함
    • 도미 : 1, 빙어 : 0
    • 변수명 : fish_target
fish_target = [1] * 35 + [0] * 14

 

  • 데이터셋 분리(훈련/테스트)
    • [방법1] 샘플링 편향 문제가 있을 수 있으므로 shuffle() 함수 사용
      • 데이터를 랜덤으로 섞어서 배치
      • shuffle() 함수 사용 후 임의로 비율나누기 추가작업 필요
    • [방법2] train_test_split() 함수사용 : 섞어주기, 비율로 나누기
from sklearn.model_selection import train_test_split
# test_size = 비율 나누기
# random_state = seed값 설정(고정)
train_input, test_input, train_target, test_target = \
	train_test_split(fish_data, fish_target, test_size=0.25, random_state=42)

 

 

3. 훈련 모델 생성

  • 사전 작업 : conda install scikit-learn
from sklearn.neighbors import KNeighborsClassifier
  • class 객체 생성하기
kn = KNeighborsClassifier()
  • 훈련모델 생성(모델 학습)
    • 훈련데이터 변수명 : train_x or train_data
    • 훈련데이터의 정답 변수명 : train_y or train_target
    • 테스트 데이터 변수명 : test_x, test_data

 

'Python > MachineLearning' 카테고리의 다른 글

Tensorflow dataset 'cats_vs_dogs' 이미지 분류  (0) 2024.04.01
[Tensorflow] 'contib()' 오류 해결  (0) 2022.06.02