Python 기계 학습 k-근린 알고리즘(K Nearest Neighbor)실례 상세 설명
작업 원리
훈련 견본 집 이 존재 하고 모든 견본 은 자신 만 의 라벨 이 있다.즉,우 리 는 모든 견본 이 집중 적 으로 속 하 는 유형 을 알 고 있다.라벨 이 없 는 새로운 데 이 터 를 입력 한 후 새로운 데이터 의 모든 특징 과 샘플 집중 데이터 에 대응 하 는 특징 을 비교 한 다음 에 샘플 집중 과 가장 가 까 운 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.