python机器学习基础K近邻算法详解KNN

 更新时间:2021年11月12日 16:16:54   作者:Swayzzu  
这篇文章主要为大家介绍了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近邻算法详解KNN的详细内容,更多关于python机器学习K近邻算法的资料请关注脚本之家其它相关文章!

相关文章

  • 解决python运行启动报错问题

    解决python运行启动报错问题

    这篇文章主要介绍了解决python运行启动报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 构建高效的python requests长连接池详解

    构建高效的python requests长连接池详解

    这篇文章主要介绍了构建高效的python requests长连接池详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Anaconda彻底删除虚拟环境的正确方法

    Anaconda彻底删除虚拟环境的正确方法

    这篇文章主要给大家介绍了关于Anaconda彻底删除虚拟环境的正确方法,要在Anaconda中删除一个虚拟环境,可以按照本文以下步骤进行操作,需要的朋友可以参考下
    2023-10-10
  • SecureCRTSecure7.0查看连接密码的步骤

    SecureCRTSecure7.0查看连接密码的步骤

    SecureCRTSecure7密码查看的方法大概可以分为两个步骤,第一步需要查看系统保存的连接的ini文件,第二步破解加密之后的密码,具体脚本请参考下本文
    2021-06-06
  • keras输出预测值和真实值方式

    keras输出预测值和真实值方式

    这篇文章主要介绍了keras输出预测值和真实值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python数据处理 根据颜色对图片进行分类的方法

    python数据处理 根据颜色对图片进行分类的方法

    今天小编就为大家分享一篇python数据处理 根据颜色对图片进行分类的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • twilio python自动拨打电话,播放自定义mp3音频的方法

    twilio python自动拨打电话,播放自定义mp3音频的方法

    今天小编就为大家分享一篇twilio python自动拨打电话,播放自定义mp3音频的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 用Python代码来解图片迷宫的方法整理

    用Python代码来解图片迷宫的方法整理

    这篇文章主要介绍了用Python代码来解图片迷宫的方法整理,本文精选了StackOverflow相关人气问题上的几个回答,需要的朋友可以参考下
    2015-04-04
  • 浅谈OpenCV中的新函数connectedComponentsWithStats用法

    浅谈OpenCV中的新函数connectedComponentsWithStats用法

    这篇文章主要介绍了浅谈OpenCV中的新函数connectedComponentsWithStats用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • python字符串不可变数据类型

    python字符串不可变数据类型

    这篇文章主要介绍了python字符串不可变数据类型,下文关于python字符串不可变数据类型相关资料展开的内容主要有查找子串及数量、字符串的替换、分割以及合并、删除侧边的空白等内容,需要的小伙伴可以参考一下
    2022-02-02

最新评论