기계 학습 알고리즘 - kNN 알고리즘

1617 단어 기계 학습
kNN - --- k - 인접 알고리즘
1. kNN 은 non - parametric 분류 기 로 분포 식 가설 을 하지 않 고 데이터 에서 확률 밀 도 를 직접 평가 합 니 다.
2. kNN 은 고 차원 데이터 에 적용 되 지 않 습 니 다.
장점:
1. 매개 변 수 를 평가 할 필요 가 없고 훈련 할 필요 가 없다.
2. 다 분류 문제 에 특히 적합 하 다.
단점:
1. 견본 의 용량 불 균형 은 새로운 견본 을 입력 하 는 것 이다. 이 견본 의 K 개 이웃 값 에서 대 용량 견본 이 다 수 를 차지 하고 분류 에 불리 하 다.
2. 계 산 량 이 너무 많 으 면 분류 할 텍스트 가 모든 견본 의 거 리 를 계산 해 야 한다.
개선 방법:
1. 견본 속성 을 적당 하 게 삭제 하고 결과 에 영향 을 미 치 는 작은 속성 을 삭제 합 니 다.
2. 거리 가중 권 에 대해 샘플 과 거리 가 작은 분류 대상 텍스트 의 거리 권 이 중대 하 다.
알고리즘 위조 코드:
1. 이미 알 고 있 는 분류 데이터 가 집 중 된 점 과 현재 점 사이 의 거 리 를 계산한다.
2. 거리 에 따라 차례로 정렬 하기;
3. 현재 점 과 가장 작은 k 개 점 선택 하기;
4. 앞의 k 개 점 이 있 는 분류의 출현 빈 도 를 확인한다.
5. 돌아 가기 전 k 개 점 에서 주파수 가 가장 높 은 유형 을 현재 점 의 예측 분류 로 한다.
python 코드 구현 KNN 알고리즘
def kNN(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]                        #shape[0]        ,         
    diffMat = tile(inX, (dataSetSize,1)) - dataSet        #      
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort()              #             
    classCount={}          
    for i in range(k):                                    # labels      
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)    #  ,  k       
    return sortedClassCount[0][0]
inX: 분류 에 사용 되 는 입력 벡터 입 니 다.곧 분류 할 것 이다.
dataSet: 훈련 샘플 세트
라벨 벡터
k: k 값

좋은 웹페이지 즐겨찾기