KNN算法原理和代码详解

原理

 有这样一条河流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)

 

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值