一、算法概述

来源:KNN算法最早是由Cover和Hart提出的一种分类算法。

注:K-近邻算法:需要做标准化处理。

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。

用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。

1、距离计算公式

二、sklearn k-近邻算法API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

  • n_neighbors:int,可选(默认=5),k_neighbors查询默认使用的邻居数
  • algotithm:{‘auto’,'ball_tree',‘kd_tree’,'brute'},可选用计算最近邻居的算法:‘ball_tree’将会选用 BallTree,‘kd_tree’将使用KDTree。‘auto’将尝试根据传递给fit方法的值来决定最适合的算法。(不同实现方式影响效率)

三、预测入住位置

数据来源:链接:https://pan.baidu.com/s/1Ph-N1HEDlVxeD3jYjpNedA    提取码:vwi8 

这项比赛的目的是预测一个人想签到哪个地方。为了比赛的目的,Facebook创建了一个人工世界,由10万乘10公里的正方形中的100,000多个地方组成。对于给定的一组坐标,您的任务是返回最可能的位置的排名列表。数据被制作成类似于来自移动设备的位置信号,从而使您具有处理真实数据(复杂的数值和嘈杂的值)所需的风味。不一致和错误的位置数据可能会破坏Facebook Check In等服务的体验。

在本案例中,将根据用户的位置,准确性和时间戳来预测用户正在检查的业务。

1、查看档案说明信息

2、具体处理流程

有无特征工程处理(标准化)区别:会影响到预测的准确率(做了标准化,准确率会提高)

from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
import pandas as pddef knncls():"""k-近邻预测用户签到位置:return: None"""#读取数据(获取)file_path = "E:\python\pyData\\facebook-v-predicting-check-ins\\train.csv"data = pd.read_csv(file_path)print(data.info())#处理数据#1、缩小数据的范围(按照x,y),查询数据进行筛选data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")#2、处理时间数据time_value = pd.to_datetime(data['time'], unit='s')print(time_value)time_value = pd.DatetimeIndex(time_value) #把日期格式转换成字典格式print(time_value)print("*"*100)#构造一些新特征data['day'] = time_value.daydata['hour'] = time_value.hourdata['weekday'] = time_value.weekdaydata = data.drop(['time'], axis=1) #1代表列;把时间戳特征删除#把签到数量少于n个目标位置删除place_count = data.groupby('place_id').count()tf = place_count[place_count.row_id > 3].reset_index()data = data[data['place_id'].isin(tf.place_id)]#取出数据当中的特征值和目标值y = data['place_id'] #目标值x = data.drop('place_id', axis=1) #特征值#进行数据分割(训练集、测试集)x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)#特征工程(标准化)std = StandardScaler()#对测试集和训练集的特征值进行标准化x_train = std.fit_transform(x_train)x_test = std.fit_transform(x_test)#进行算法流程knn = KNeighborsClassifier(n_neighbors=5) #实例化#fit、predict、scoreknn.fit(x_train, y_train)#得出预测结果y_predict = knn.predict(x_test)print("预测的目标签到位置为:", y_predict)#得出准确率print("预测的准确率:", knn.score(x_test, y_test))return Noneif __name__ == '__main__':knncls()

不做特征化处理(标准化)结果:

做特征处理(标准化)结果:

四、K-近邻算法总结

1、K值取多大?有什么影响?

  • K值取很小:容易受异常点的影响
  • K值取很大:容易受K值数量(类型)的影响

2、优缺点明确

优点:

  • 简单,易于理解,无需估计参数,无需训练

缺点:

  • 懒惰算法,对测试样本分类时的计算量大,内存开销大
  • 必须指定K值,K值选择不当,则分类精度不能保障

注:算法实例化中传入的参数叫做超参数,如n_neighbors

3、使用场景

小数据场景,几千~几万样本,具体场景、具体业务去测试

K-近邻算法(分类算法)相关推荐

  1. 朴素贝叶斯算法-分类算法

    朴素贝叶斯算法-分类算法 1 概率基础 概率定义为一件事情发生的可能性 联合概率:包含多个条件,且所有条件同时成立的概率,记作P(A,B) 条件概率:事件A在另一个事件B已经发生条件下的发送概率,记作 ...

  2. KNN(K最近邻)分类算法_糖潮丽子的博客

    申明:文章内容是作者自己的学习笔记,教学来源是开课吧讲师梁勇老师. 讲师介绍:梁老师 <细说Java>与<Java深入解析>图书作者.一线互联网资深数据分析专家,超过十年软件开 ...

  3. 最近邻和K近邻及其优化算法LSH(局部敏感哈希,Locality Sensitive Hashing) Kd-Tree

    引言 在处理大量高维数据时,如何快速地找到最相似的数据是一个比较难的问题.如果是低维的小量数据,线性查找(Linear Search)就可以解决,但面对海量的高维数据集如果采用线性查找将会非常耗时.因 ...

  4. 决策树ID3算法[分类算法]

    ID3分类算法的编码实现 1 <?php 2 /* 3 *决策树ID3算法(分类算法的实现) 4 */ 5 6 7 8 /* 9 10 *求信息增益Grain(S1,S2) 11 12 */ 1 ...

  5. 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...

  6. k近邻算法原理c语言,实验二 K-近邻算法及应用

    作业信息 一.[实验目的] 理解K-近邻算法原理,能实现算法K近邻算法: 掌握常见的距离度量方法: 掌握K近邻树实现算法: 针对特定应用场景及数据,能应用K近邻解决实际问题. 二.[实验内容] 实现曼 ...

  7. K近邻算法讲解与python实现(附源码demo下载链接)

    k近邻算法概述 对应demo源码及数据:传送门 K近邻(k-Nearest Neighbor,简称kNN)算法,是一种应用很广泛的监督学习算法.它非常有效且易于掌握,其工作机制也很简单:给定测试样本, ...

  8. k邻近算法python代码_机器学习算法之K近邻法-Python实现

    一.算法简介 k近邻法(k-nearest neighbor,k-NN)是一种基本的分类方法,输入的是实例的特征向量,对应于特征空间的点,输出结果为实例的类别,可以取多类.对于训练集来说,每个实例的类 ...

  9. 斯坦福CS231n项目实战(一):k最近邻(kNN)分类算法

    我的网站:红色石头的机器学习之路 我的CSDN:红色石头的专栏 我的知乎:红色石头 我的微博:RedstoneWill的微博 我的GitHub:RedstoneWill的GitHub 我的微信公众号: ...

  10. 【MATLAB】Parzen窗与K近邻算法原理与代码详解

    文章目录 1.非参数估计原理 2.Parzen窗 2.1.算法原理 2.2.Matlab实现与参数探究 3.K近邻 3.1.算法原理 3.2.Matlab实现与参数探究 1.非参数估计原理 \qqua ...

最新文章

  1. .net卸载程序制作
  2. 两个命令把 Vim 打造成 Python IDE
  3. [Linux]几个armhf的ubuntu源
  4. sql基于聚合结果集取最大值_SQL超入门第三篇:写给产品、运营、分析师的SQL教程...
  5. Docker学习总结(40)——Docker常见应用场景再总结
  6. 虚拟服务器英文版设置,apache配置(linux及windows中的设置)以及虚拟主机的设置(国外英语资料).doc...
  7. c# 批量mqtt_Paho-MQTT C#接入示例
  8. Typora使用技巧--不定期更新
  9. [RK3399][Android7.1] 调试笔记 --- 查看当前DDR的工作频率
  10. JavaScript之事件委托和事件代理
  11. ubuntu16.04server安装dell服务器H750raid卡驱动
  12. 接口调用一会正常,一会失败
  13. 无聊却很有意思的事情
  14. 自学python怎么找工作-我是如何在自学编程9个月后找到工作的
  15. 李宏毅机器学习课程 思维导图
  16. ISO26262解析(四)——FMEDA
  17. mac系统如何修改网卡mac地址
  18. 几款我比较满意的在线脑图工具
  19. 软件的分类及应用领域
  20. java测试一个泰勒级数,数学原理-高等数学复习笔记 ——1.1 泰勒公式 泰勒展开式...

热门文章

  1. android代码控制组件的移动,Android自定义控件实现随手指移动的小球
  2. cad命令栏怎么调出来_期货文华软件K线图上随着最新价格跳动的黄虚线怎么调出来...
  3. Python图像识别-Opencv05 色彩
  4. 2009.01.19(山寨)
  5. linux xxd命令
  6. Solidity介绍
  7. 2018清华计算机考研总结
  8. MySql 指定某一字段排在前面
  9. 两款移相振荡器的对比
  10. ic618画版图2.0