千家信息网

python基础中K近邻算法是怎样的

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,python基础中K近邻算法是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、k-近邻算法原理及API1.k-近邻算法原理如果一
千家信息网最后更新 2026年11月02日python基础中K近邻算法是怎样的

python基础中K近邻算法是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、k-近邻算法原理及API

1.k-近邻算法原理

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。(相似的样本,特征之间的值应该都是相近的。)

样本之间的距离求法:

2.k-近邻算法API

3.k-近邻算法特点

k值取很小,容易受异常点的影响。

k值取很大,容易受k值数量(类别)波动

优点:简单,易于理解,易于实现,无需估计参数,无需训练(不需要迭代)

缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大

综上,使用该算法时必须指定K值,K值选择不当则分类精度不能保证。同时若样本数量非常多,算法花费的时间就会很长,因此使用场景一般是小数据场景。

二、k-近邻算法案例分析案例信息概述

knn使用案例:以预测客人的入住位置(假设住的是酒店)为例。准备好的数据中的特征为:酒店编号(place_id)、入住登记(row_id)、客人横坐标(x)、客人纵坐标(y)、时间戳(time)、客人定位准确度(accuracy)

也就是说,我们的目标是预测客人将会入住哪个编号的酒店。则此问题是一个分类问题。根据k-近邻算法,我们通常考虑让客人入住距离他最近的酒店。但同时,根据给出的其他信息,是否入住某酒店还会受其他因素影响,比如入住时间,定位准确度。

因此,我们第一步对数据进行处理的时候,需要将我们认为对客人入住有影响的所有因素考虑在内。比如客人的坐标、入住时间、定位准确度。

接下来对特征进行处理,把需要的添加进列表,不需要的删除,或者筛选部分数据。最终处理好后,将目标值单独拿出来作为y_train,就可以使用x_train和y_train来训练算法了。

第一部分:处理数据

1.数据量缩小

假设已导入了data数据,由于数据量太大,因此为了演示的速度,将数据量缩小。

代码:

data.query('x>0.1 & x<0.2 & y>0.5 & y<0.6')

选择x的坐标范围,以及y的坐标范围

2.处理时间

时间给出的是时间戳格式,需要使用pd.to_date_time进行转化

代码:

time = pd.to_date_time(data['time'], unit='s')

此时得出的时间是类似于这样:1970-01-01 18:09:40

3.进一步处理时间

将时间提取出来,转换成 "可以任意提取,年月日时分秒均可" 的字典格式

代码:

time_value = pd.DatetimeIndex(time)
4.提取并构造时间特征

直接将提取的时间特征,选择一个特征名,加入原数据表中即可,想加几个加几个

代码:

data['day'] = time_value.day
5.删除无用特征

使用drop方法,方法中,axis=1代表整列。只要认为没有用的特征,均可删除

代码:data = data.drop(['row'], axis=1)

6.签到数量少于3次的地点,删除

首先对数据进行分组,要删除地点,就以地点来分组,并统计其他特征基于地点的数量

代码:

place_count = data.groupby('place_id').count()

此处返回的数据表,索引就是地点place_id,其他的特征对应的列,数据都变成了"基于place_id"所进行的数量统计。

关于groupby().count()的解释,以一个简单的数据为例:

原来的特征有5个,分别为:year, team, rank, points, goals,现在按照year来分组并统计数量,那么第一行第一列的数据"4",意思就是:在2014年,有4个team

回到本例,row_id代表的是"登记事件的id",也就是说每次有人登记入住一个place,那么place_id对应的就会有一个row_id数据出现。若同一个地方有三个人登记了,那么同一个place_id对应的row_id就会有三个。

因此,本例中按照groupby.count()处理之后,place_id和row_id对应的关系就是:在place_id中的a这个地方,row_id对应的数量为3。也就是相当于在a地点,有3人登记入住了。

接下来,将入住人数少于3的place_id删除:

place_count[place_count.row_id>3] # 选择入住人数大于三人的数据tf = place_count[place_count.row_id>3].reset_index() #将索引重置,place_id还放回到特征data = data[data['place_id'].isin (tf.place_id)]#对data中的数据进行筛选
7.提取目标值y

提取之后,需将原数据表中的目标值那一列删除

y = data['place_id']x = data.drop(['place_id'], axis=1)
8.数据分割

前面需要导入分割方法:from sklearn.model_selection import train_test_split

代码:

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)

至此,数据处理完毕。数据处理过程中,我们需要考虑有哪些数据是需要舍弃的,有哪些是需要我们构造的,是否需要对特征进行筛选,条件如何设置等。最终,将我们需要的目标值提取出来,剩余的作为训练集。并调用分割方法,按一定的比例进行数据分割。(此处25%的数据作为测试集)

第二部分:特征工程

标准化

先导入标准化类:from sklearn.preprocessing import StandardScaler

训练集和测试集,标准化的时候,所使用的均值与标准差,都是训练集的!因此,对测试集标准化的时候,只调用transform方法即可。

x_train = std.fit_transform(x_train)x_test = transform(x_test)

第三部分:进行算法流程

1.算法执行

先导入算法:from sklearn.neighbors import KNeighborsClassifier

使用该算法,将训练集数据输入,即可训练完毕,得到一个模型。

代码:

knn = KNeighborsClassifier(x_train, y_train)
2.预测结果

使用predict方法, 输入测试集数据即可得出预测的y

代码:

y_predict = knn.predict(x_test)
3.检验效果

使用score方法,输入测试集数据,以及测试集的目标值,即可得出分数

代码:

score = knn.score(x_test, y_test)

看完上述内容,你们掌握python基础中K近邻算法是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数据 算法 特征 时间 代码 方法 处理 近邻 客人 数量 样本 测试 训练 地点 目标 标准 目标值 酒店 问题 标准化 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融科技 金融科技创新监管互联网金融 互联网金融 金融科技 上海喔噻互联网科技 互联网 科技服务平台 互联网和高科技公司 受益于互联网科技的高速发展 花神(南京)互联网科技有限公司 互联网5g黑科技有哪些 互联网科技产业特征 洛阳昕诺飞互联网科技有限公司 内蒙古九一互联网科技 互联网公司黑科技创始人 广州新华互联网科技学校电竞方面 小米互联网科技园入驻 有人说阿里系是互联网科技企业 南京一网一红互联网科技有限公司 广州燕处互联网科技有限公司 吉林省码上互联网科技电话 伍佰万互联网科技是干嘛的 科技股互联网 互联网科技视频 天下捷融互联网科技 亿人帮互联网科技 互联网 科技服务平台 互联网金融中的现代科技 互联网5g黑科技有哪些 996高科技互联网公司 无锡工业互联网科技有限公司 互联网科技创新创业项目
0