python knn代码详解_knn算法详解(附练习代码)

本文详细介绍了KNN(K-最近邻)算法的工作原理,包括如何计算样本间距离和选择最佳分类决策。讨论了KNN算法的优缺点,如简单易懂、对异常值不敏感,但计算量大、内存开销高。通过Python代码示例展示了KNN的实现,包括数据归一化和超参数选择,如K值、距离权重和P值。同时,还涉及了使用sklearn库的KNN模型和网格搜索来寻找最优超参数。
摘要由CSDN通过智能技术生成

KNN算法

KNN算法是一个用于对数据样本进行分类预测的算法

KNN算法就是根据样本之间的距离,来对新的样本来进行分类

计算过程:将新的样本点,与历史样本点中的每一个样本点进行距离的计算 取前k个距离最近的样本点的分类结果 取分类结果频次最好的二分类项作为新样本的分类。

网络搜索:手动指定不同参数的检索范围,通过网络搜索来寻找最优的超参数或者模型参数

K就表示要取离新样本最近的K个样本进行分类决策

通常我们只提供已有数据的 90 %作为训练样本来训练分类器 ,而使用其余的 10% 数据去测试分类器(测试数据占总数据比例不同也会影响到算法的测试结果),且数据划分是随机的

机械学习中的两种类型参数

超参数:

在训练之前,需要设置的参数

​k值

​距离权重

​P值

​对于寻找最优超参数的过程,称之为网络搜索

模型参数

通过样本训练处的参数

数据归一化:将所有数据的量纲映射到同一尺度下。

​1.最值归一化:把所有数据映射到0~1上(数据边界确定,例如学生分数,最低0,最高1)

​2.均值方差归一化:把数据归一到均值为0,方差为1的分布中(数据分布没有明确边界,有可能存在极端数据值)

​优点:

简单,易于理解,易于实现,无需参数估计,无需训练;

对异常值不敏感(个别噪音数据对结果的影响不是很大);

适合对稀有事件进行分类;

适合于多分类问题(multi-modal,对象具有多个类别标签),KNN要比SVM表现要好;

​ 缺点:

​对测试样本分类时的计算量大,内存开销大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本;

​可解释性差,无法告诉你哪个变量更重要,无法给出决策树那样的规则;

​K值的选择:最大的缺点是当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进;

​KNN是一种消极学习方法、懒惰算法。

KNN算法是一个用于对数据样本进行分类预测的算法

#KNN算法

import numpy as np

import matplotlib.pyplot as plt

a_x = [np.random.random() * 10 for i in range(10)]

a_y = [np.random.random() * 10 for i in range(10)]

b_x = [np.random.random() * 10 for i in range(10)]

b_y = [np.random.random() * 10 for i in range(10)]

plt.scatter(a_x,a_y,color = 'r' , marker='+')

plt.scatter(b_x,b_y,color = 'b' , marker='o')

plt.show()

#新增样本

new_data = [np.random.random() * 10 for i in range(10)]

plt.scatter(a_x,a_y,color = 'r' , marker='+')

plt.scatter(b_x,b_y,color = 'b' , marker='

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值