k近邻算法(KNN)-分类算法

1 概念

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

k-近邻算法采用测量不同特征值之间的距离来进行分类。

2 优缺点

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

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

使用数据范围:数值型和标称型

3 欧式距离

两个样本的距离可以通过如下公式计算,又叫欧式距离。如a(a1,a2,a3),b(b1,b2,b3)两点用如下公式表示

4 sklearn k-近邻算法API

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

KNeighborsClassifier类的实例化所需参数如下

n_neighbors

(默认= 5),k_neighbors查询默认使用的邻居数
algorithm {‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率)
n_jobs (默认= 1),用于邻居搜索的并行作业数。如果-1,则将作业数设置为CPU内核数。不影响fit方法。

方法:

(1)fit(X, y):使用X作为训练数据拟合模型,y作为X的类别值。X,y为数组或者矩阵

(2)kneighbors(X=None, n_neighbors=None, return_distance=True):找到指定点集X的n_neighbors个邻居,return_distance为False的话,不返回距离

(3)predict(X):预测提供的数据的类标签

(4)predict_proba(X):返回测试数据X属于某一类别的概率估计

5 实例流程

①数据集的处理

②分割数据集

③对数据集进行标准化

④estimator流程进行分类预测

6 k近邻算法实例-预测入住位置

数据来源:https://www.kaggle.com/c/facebook-v-predicting-check-ins/data

这里根据X y坐标值,定位准确性,时间作为特征值,入住的id为目标值

from sklearn.neighbors import KNeighborsClassifier
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler#1 读取数据
data = pd.read_csv("./data/train.csv")#2 处理数据,截取部分数据
data = data.query("x > 1.0 &  x < 1.5 & y > 2.5 & y < 3")
#处理日期数据,将data里的time特征下的时间错装换为(年-月-日 时:风:秒)格式,unit='s'设置转换的最小单位为s
timev = pd.to_datetime(data['time'],unit='s')
#把日期转换为字典格式,为了构造一些天数等特征,所以要将time转换为可以获取day,month的参数
#那就需要把日期格式转换为字典格式,就把每一行转换为字典格式,那就可以单独获取里面的时分秒
timev = pd.DatetimeIndex(timev)#构造新特征
data['day']=timev.day
data['hour'] = timev.hour
data['weekday'] = timev.weekday
#删除时间特性,pandas的列是1,sklearn的列是0
data.drop(['time'],axis=1)'''把签到数量少于n个目标位置删除,用分组,然后统计求和
根据palce_id分组'''
data_count = data.groupby('palce_id').count()'''以某个值进行分组之后,前面的索引就是该值,然后才是每一列特征,row_id是入住的id,现在已经变成具体的次数了
这里把row_id大于3的保留下来,然后调用reset_index,reset_index()的所用是把索引palce_id变成某一列,就能获取了
前面的索引就变成0,1..一个个计数'''tf = data_count[data_count.row_id>5].reset_index()#筛选data里面id是tf里面的id,在就保留下来
data[data['place_id'].isin(tf.place_id)]# 取出数据当中的特征值和将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)#3 特征工程标准化,训练集做标准化了,测试集也要做标准化,目标值不要计算距离不用做标准化
#标准化就是想让每一列数据在同一个标准上面进行计算
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)#进行算法流程 超参数
knn = KNeighborsClassifier(n_neighbors=5)
#fit输入数据
knn.fit(x_train,y_train)
#得出预测结果
y_predict = knn.predict(x_test)
print("预测的目标位置为:", y_predict)
# 得出准确率,这里得出的准确率并不高,因为还有一些特征的影响如row_id,可以将其从特征值中删除
print("预测的准确率:", knn.score(x_test, y_test))

7 K近邻算法问题:

①K值取多大,有什么影响?

K值取小了,比如取最近一个他的类别是什么类别我就是什么类别,这样容易受异常点影响假设这个最近的点就是异常点,就预测错了

K值取大了,容易受K值数量(类别)波动影响

如何处理K值取值问题见模型选择与调优

②性能问题:每一个样本来了,要一个个去计算距离时间复杂度很高

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

  1. 介绍一下K近邻(KNN)算法,KNeighbors和RadiusNeighbors的差异是什么?各有什么优势?

    介绍一下K近邻(KNN)算法,KNeighbors和RadiusNeighbors的差异是什么?各有什么优势? K近邻(KNN)算法 近邻(Nearest Neighbor)算法既可以用于监督学习(分 ...

  2. 一文搞懂k近邻(k-NN)算法(一)

    原文链接 一文搞懂k近邻(k-NN)算法(一) 前几天和德川一起在学习会上讲解了k-NN算法,这里进行总结一下,力争用最 通俗的语言讲解以便更多同学的理解. 本文目录如下: 1.k近邻算法的基本概念, ...

  3. K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解?

    K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解? K近邻(KNN)是最简单的算法之一,它计算预测样本与训练数据集中每个数据点之间的距离,并找到 ...

  4. K近邻(KNN)算法总结

    文章目录 一.KNN原理 二.KNN的三要素 2.1 k值的选择 2.2 距离度量 2.3 分类决策规则 三.KNN算法实现 3.1 KNN算法蛮力实现 3.2 KD树实现 3.3 球树实现 四.KN ...

  5. 写程序学ML:K近邻(KNN)算法原理及实现(二)

    [题外话]近期申请了一个微信公众号:平凡程式人生.有兴趣的朋友可以关注,那里将会涉及更多机器学习.OpenCL+OpenCV以及图像处理方面的文章. 2.2   简单实例 为了验证前面实现的K近邻算法 ...

  6. 机器学习路程——k近邻(KNN)算法(python实现)

    使用python库sklearn,pandas 数据来源:kaggle Facebook V: Predicting Check Ins 数据网址:https://www.kaggle.com/c/f ...

  7. 从零开始数据科学与机器学习算法-KNN分类算法-07

    KNN概念 物以类聚 1.k--超参数(hyper-parameter) 2.k最好为奇数(no even number , better be odd) 3.k大小有学问: k太小:outliers ...

  8. 用Python开始机器学习(4:KNN分类算法)

    转自: http://blog.csdn.net/lsldd/article/details/41357931 1.KNN分类算法 KNN分类算法(K-Nearest-Neighbors Classi ...

  9. Python实现knn分类算法(Iris 数据集)

    1.KNN分类算法 KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法,是一个概念极其简单,而分类效果又很优秀的分类算法. 他的核心思想就是,要确定 ...

最新文章

  1. WYSE Thin Clinet 常用快捷键
  2. BZOJ2843: 极地旅行社
  3. tornado总结7-文件切片异步非阻塞下载
  4. Matlab 图像的邻域和块操作
  5. 华人的战场——MSU视频编码大赛
  6. android sqlite 操作类封装,[Android] Sqlite 数据库操做 工具封装类
  7. drools规则引擎技术指南_物联网规则引擎技术
  8. 485. Max Consecutive Ones - LeetCode
  9. Flash与数学: 旋轮线(2)
  10. ASP.NET控件Web CAD SDK发布v12版本,支持DWG 2018丨附下载
  11. C语言程序设计实验报告——实验六
  12. SStap 测试UDP转发...未通过!
  13. 用npm安装yarn
  14. 动态图snapshot构建
  15. Tesseract OCR 语言包下载
  16. wps打开pdf乱码_用wps2016版打开word文件乱码怎么处理
  17. 数据仓库技术(Data Warehouse Technologien) 第三章节 多维数据模型(3)
  18. vue form表单数据提交
  19. 还在想假期去哪玩?直接做一个旅游攻略小程序
  20. 建文高考成绩查询2021,深圳市建文外国语学校2020年高考喜报

热门文章

  1. rbac 权限分配, 基于formset实现,批量增加
  2. 数据结构之线性结构之堆栈
  3. 滚动到页面底部自动加载内容
  4. 每天学习点--------第五天(2017-10-9) 摘要: 常用的集合
  5. Python--递归
  6. HBase学习笔记——概念及原理
  7. 炒房客共识:深圳楼市要撑不住了
  8. C语言中的字节对齐以及其相关处理
  9. JS获取浏览器信息及屏幕分辨率
  10. 转:c#委托事件实现窗体传值通信