머신러닝
머신러닝/분류 - 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))