Python 기계 학습 k-근린 알고리즘(K Nearest Neighbor)실례 상세 설명

본 논문 의 사례 는 Python 기계 학습 k-근린 알고리즘 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
작업 원리
훈련 견본 집 이 존재 하고 모든 견본 은 자신 만 의 라벨 이 있다.즉,우 리 는 모든 견본 이 집중 적 으로 속 하 는 유형 을 알 고 있다.라벨 이 없 는 새로운 데 이 터 를 입력 한 후 새로운 데이터 의 모든 특징 과 샘플 집중 데이터 에 대응 하 는 특징 을 비교 한 다음 에 샘플 집중 과 가장 가 까 운 k 개의 샘플 을 추출 합 니 다.이 k 개의 견본 의 라벨 을 관찰 하고 통계 하 며 수량 이 가장 많은 라벨 을 이 새로운 데이터 의 라벨 로 선택 하 십시오.
다음 그림 을 사용 하면 kNN 알고리즘 을 잘 설명 할 수 있 습 니 다.

서로 다른 모양 의 점,서로 다른 라벨 의 점.그 중에서 녹색 점 은 알 수 없 는 태그 의 데이터 점 입 니 다.지금 은 녹색 점 을 예측 해 야 한다.그림 에서 나 오기 어렵 지 않다.
4.567917.k=3 이 라면 녹색 점 에서 가장 가 까 운 것 은 빨간색 삼각형 2 개 와 파란색 정사각형 1 개가 있 는데 이 3 개 점 은 투표 하기 때문에 녹색 의 이 분류 점 은 빨간색 삼각형 에 속한다4.567917.만약 에 k=5 라면 녹색 점 에서 가장 가 까 운 것 은 빨간색 삼각형 2 개 와 파란색 정사각형 3 개가 있 는데 이 5 개 점 은 투표 하기 때문에 녹색 의 이 분류 점 은 파란색 의 정사각형 에 속한다kNN 알고리즘 실시
의사 코드
알 수 없 는 속성의 데이터 가 집 중 된 각 점 에 대해 다음 작업 을 수행 합 니 다.
1.이미 알 고 있 는 유형 별 데이터 집중 점 과 현재 점 사이 의 거 리 를 계산 합 니 다.
2.거리 증가 순서에 따라 정렬
3.현재 점 과 가장 작은 k 개 점 선택
4.앞의 k 개 점 이 있 는 분류의 출현 빈 도 를 확인한다.
5.돌아 가기 전 k 개 점 에서 주파수 가 가장 높 은 유형 을 현재 점 의 예측 분류 로 한다.
유럽식 거리(두 점 사이 의 거리 공식 계산)
계산 점 x 와 점 y 사이 의 유럽식 거리

python 코드 구현

# -*- coding:utf-8 -*-
#! python2
import numpy as np
import operator
#    
data_set = np.array([[1., 1.1],
           [1.0, 1.0],
           [0., 0.],
           [0, 0.1]])
labels = ['A', 'A', 'B', 'B']
def classify_knn(in_vector, training_data, training_label, k):
  """
  :param in_vector:      
  :param training_data:      
  :param training_label:      
  :param k:          
  :return:      in_vector      
  """
  data_size = training_data.shape[0] # .shape[0]          
  diff_mat = np.tile(in_vector, (data_size, 1)) - data_set # np.tile(array, (3, 2))   array    3×2        
  sq_diff_mat = diff_mat ** 2
  sq_distances = sq_diff_mat.sum(axis=1) # .sum(axis=1)       
  # distances = sq_distances ** 0.5 #            ,          
  distances_sorted_index = sq_distances.argsort() # .argsort()  array               
  class_count_dict = {} #          
  for i in range(k):
    label = training_label[distances_sorted_index[i]]
    try:
      class_count_dict[label] += 1
    except KeyError:
      class_count_dict[label] = 1
  class_count_dict = sorted(class_count_dict.iteritems(), key=operator.itemgetter(1), reverse=True) #      value          
  return class_count_dict[0][0]
if __name__ == '__main__':
  vector = [0, 0] #       
  print classify_knn(in_vector=vector, training_data=data_set, training_label=labels, k=3)

실행 결과:B
알고리즘 평가
장점:정밀도 가 높 고 이상 치 에 민감 하지 않 으 며 데이터 입력 가정 이 없다단점:계산 복잡 도가 높 고 공간 복잡 도가 높다사용 데이터 범위:데이터 형 과 표기 형적용:kNN 방법 은 보통 더 복잡 한 분류 알고리즘 의 일부분 에 사용 된다.예 를 들 어 우 리 는 그것 의 평가 치 를 대상 의 특징 으로 할 수 있다.때때로 간단 한 kNN 알고리즘 은 좋 은 선택의 특징 에 있어 서 매우 뛰어난 표현 을 할 수 있다Python 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기