KNN算法原理和代码详解

原理

KNN算法原理和代码详解_第1张图片

 有这样一条河流like that,河流的左边是rich 人家,河流的右边是poor 人家,这时新搬来一家小甲,这个算法是看小甲是有钱人家还是没钱人家。

要解决这个问题,那么就可以说立着他最近的几个人家是富人多还是穷人多就可以判别了,K户人家,最近距离就是欧氏距离或者曼哈顿距离,切比雪夫距离。

这是欧氏距离,在中学都有学过。

优缺点

advantage: 显而易见的简单以实现,而且对于边界不规则的数据效果较好

disadvantage: 只适合小的数据集,数据不平衡就没法用了肯定就难受了,数据必须标准化因为非富有即贫穷没有中产阶级这一说

代码

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#类别区分部分
randomarr=np.random.permutation(len(iris_x))
iris_x_train=iris_x[randomarr[:-10]]#训练集数据
iris_y_train=iris_y[randomarr[:-10]]#训练集标签分类
iris_x_test=iris_x[randomarr[-10:]]#测试集数据
iris_y_test=iris_y[randomarr[-10:]]#测试集标签
knn=KNeighborsClassifier()#定义一个knn对象
knn.fit(iris_x_train,iris_y_train)#调用训练方法
iris_y_predict=knn.predict(iris_x_test)#调用预测方法
probility=knn.predict_proba(iris_x_test)## 计算个测试样本预测的概率值这里我们没有用概率值,但是在实际工作中可能会参考概率值来进行最后结果的筛选,而不是直接使用给出的预测标签

neighborpoint=knn.kneighbors([iris_x_test[-1]],5)# 计算与最后一个测试样本距离最近的5个点,返回的是这些样本的序号组成的数组
score=knn.score(iris_x_test,iris_y_test,sample_weight=None)# 调用该对象的打分方法,计算出准确率
print('iris_y_pridict=')
print(iris_y_predict)
# 输出测试结果
print('iris_y_test=')
# 输出原始测试数据集的正确标签,以方便对比
print(iris_y_test)
print('Accuracy',score)

 

 

你可能感兴趣的:(算法,机器学习,python)