整体思想:计算一个点A与其它点之间的距离,取出与该点最近的k个点,然后统计这k个点里面所属分类比例最大的,则A点属于该分类。
k值的选取需要考虑实际情况,没有万能的算法,只有在一定使用环境下最优的算法。
从训练集中找到与新数据最接近的K条记录,然后根据它们的主要分类来决定新数据的类别。算法中涉及的3主要因素:训练集、距离或相似的衡量、k的大小。
计算step:
step1:算距离,给定测试对象,计算它与训练集中的每个对象的距离
step2:找邻居,圈定距离最近的k个训练对象,作为测试对象的近邻
step3:做分类,根据这k个近邻归属的主要类别,确定对测试对象的分类
example:
import numpy as np
from sklearn import neighbors
knn=neighbors.KNeighborsClassifier()
data=np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]])
labels=np.array([1,1,1,2,2,2])
knn.fit(data,labels)
knn.predict([[18,90]]) #if it is ([18,90]), there is a ValueError.
具体实现见anaconda练习文件。
#-*- coding:utf-8 -*-
from sklearn import datasets
from sklearn .neighbors import KNeighborsClassifier
import numpy as np
np.random.seed(0)
iris=datasets.load_iris()
iris_x=iris.data
iris_y=iris.target
indices=np.random.permutation(len(iris_x))
iris_x_train=iris_x[indices[:-10]]
iris_y_train=iris_y[indices[:-10]]
iris_x_test=iris_x[indices[-10:]]
iris_y_test=iris_y[indices[-10:]]
knn=KNeighborsClassifier()
knn.fit(iris_x_train,iris_y_train)
iris_y_predict=knn.predict(iris_x_test)
probability=knn.predict_proba(iris_x_test)
neighborpoint=knn.kneighbors([iris_x_test[-1]],5,False) #[[]]
score=knn.score(iris_x_test,iris_y_test,sample_weight=None)
print('iris_y_predict=')
print(iris_y_predict)
print('accuracy',score)
print('neighborpoint of last test sample',neighborpoint)
print('probability:',probability)
转自https://blog.csdn.net/HeatDeath/article/details/78042186