티스토리 뷰

머신러닝

머신러닝/분류 - KNN 알고리즘

삼전동해커 2023. 1. 10. 14:39

K - Nearest Neighbor 

KNN

- 특정공간 내에서 K-NN은 새로 들어온 입력값이 어떤 그룹의 데이터와 가장 가까운가 분류하는 알고리즘

- k는 몇 번째로 가까운 데이터까지 살펴볼 것인가를 정함

 

 

- k의 default는5, k의 값이 짝수일 경우 동점이 되어 하나의 결과를 도출할 수 없으므로 홀수를 사용함

 

장점

- 높은 정확도

- 단순하며 효율적(모델을 미리 생성하지 않음)

- 상위 k개의 데이터만 활용하기 때문에 오류 데이터가 결과에 미치지 않음

- 데이터 분산에 대한 추정을 만들 필요 없음

 

단점

- 데이터가 많을수록 처리 시간 증가

- 모델이 미리 생성되지 않아 새로운 데이터에 대한 학습 시간보다 분류/예측 시간이 더 걸림

 

거리 기준(유클리드 제곱 거리)

- 새로운 데이터와 k개의 데이터들과의 거리를 측정하기 위한 수식

최대-최소 정규화

- 변수 간에 서로 단위가 다른 데이터가 존재할 경우, 범위를 0~1로 설정하여 데이터를 관찰하는 방법

Z-점수 정규화

- 변수 간에 서로 단위가 다른 데이터가 존재할 경우, 서로 다른 값을 동일 범위로 구성하는 작업

- 변수들의 데이터를 평균이 0, 표준편차가1인 정규분포로 만드는 것

 

구현

from sklearn.datasets import load_breast_cancer

breast_cancer_data = load_breast_cancer()
import pandas as pd

df_data = pd.DataFrame(breast_cancer_data.data)
df_labels = pd.DataFrame(breast_cancer_data.target)
def min_max_normalize(lst):
    mm_nor_list = list()

    for i in lst:
        maxi = max(lst)
        mini = min(lst)
        
        new_data = (i - mini) / (maxi - mini)
        mm_nor_list.append(new_data)

    return mm_nor_list
#데이터 정규화
for x in range(0, len(df_data.columns)):
    df_data[x] = min_max_normalize(df_data[x])
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

training_data, validation_data , training_labels, validation_labels = train_test_split(df_data, df_labels, test_size = 0.2, random_state = 100)

classifier = KNeighborsClassifier(n_neighbors = 3)    #k = 3, weights = "distance"로 가까운 이웃의 영향을 도 많이 받도록 가중치 설정
classifier.fit(training_data,training_labels)
print(classifier.score(validation_data, validation_labels))
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함