k近邻算法

K近邻法(KNN)原理小结

不想你离开。 提交于 2020-04-01 06:10:06
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用。比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出了。这里就运用了KNN的思想。KNN方法既可以做分类,也可以做回归,这点和决策树算法相同。     KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同。KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别。而KNN做回归时,一般是选择平均法,即最近的K个样本的样本输出的平均值作为回归预测值。由于两者区别不大,虽然本文主要是讲解KNN的分类方法,但思想对KNN的回归方法也适用。由于scikit-learn里只使用了蛮力实现(brute-force),KD树实现(KDTree)和球树(BallTree)实现,本文只讨论这几种算法的实现原理。其余的实现方法比如BBF树,MVP树等,在这里不做讨论。 1. KNN算法三要素     KNN算法我们主要要考虑三个重要的要素,对于固定的训练集,只要这三点确定了,算法的预测方式也就决定了。这三个最终的要素是k值的选取,距离度量的方式和分类决策规则。     对于分类决策规则,一般都是使用前面提到的多数表决法。所以我们重点是关注与k值的选择和距离的度量方式。     对于k值的选择

K近邻法

南笙酒味 提交于 2020-03-13 13:06:49
概述 k近邻法(k-nearest neighbor, k-NN) 是一种基本分类与回归方法(此处讨论的是分类问题的K近邻算法)。 k近邻法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”,不具有显式的学习过程。 k近邻算法的特殊情况是k=1的时候,此时称为最近邻算法。 k 值的选择、距离度量及分类决策规则 是k近邻法的三个基本要素。 K近邻算法 k近邻模型 1、模型 在k近邻算法中,当训练集、最近邻值k、距离度量、决策规则等确定下来时,整个算法实际上是 利用训练集把特征空间划分成一个个子空间 ,训练集中的每个样本占据一部分空间。 具体地,在特征空间中,对每个训练样本而言,距离该点比其他点更近的所有点组成一个区域,叫做单元。每个训练样本拥有一个单元,所有样本的单元构成对特征空间的一个划分。然后该单元的所有点的标签都和该单元的样本点一致。 以最近邻为例,当测试样本落在某个训练样本的领域内,就把测试样本标记为这一类。 2、距离度量 特征空间中两个实例点的距离是两个实例点相似程度的反映。 常用的是欧氏距离,也可以是其他距离。 值得注意的是,使用不同的距离度量,计算出的最近邻点是不同的。 更多距离度量详见该博客:https://blog.csdn.net/h_wlyfw/article/details/24023325 3、k值的选择 如果选择较小的k值 ,“学习”的

k-近邻算法

早过忘川 提交于 2020-03-03 15:51:52
过程 K-近邻算法的具体思想如下: (1)计算已知类别数据集中的点与当前点之间的距离 (2)按照距离递增次序排序 (3)选取与当前点距离最小的k个点 (4)确定前k个点所在类别的出现频率 (5)返回前k个点中出现频率最高的类别作为当前点的预测分类 1.创建数据集 def createDataSet ( ) : group = array ( [ [ 1.0 , 1.1 ] , [ 1.0 , 1.0 ] , [ 0 , 0 ] , [ 0 , 0.1 ] ] ) labels = [ 'A' , 'A' , 'B' , 'B' ] return group , labels 2.k-近邻算法 def classify0 ( inX , dataSet , labels , k ) : dataSetSize = dataSet . shape [ 0 ] diffMat = tile ( inX , ( dataSetSize , 1 ) ) - dataSet sqDiffMar = diffMat ** 2 sqDistance = sqDiffMar . sum ( axis = 1 ) distance = sqDistance ** 0.5 sortedDist = distance . argsort ( ) classCount = { } for i in

3 k近邻法

早过忘川 提交于 2020-02-29 22:05:55
k近邻法 给定一个训练数据集,对新的输入实例,在训练数据集中找到跟它最近的k个实例,根据这k个实例的类判断它自己的类(一般采用多数表决的方法)。 k近邻模型 模型由三个基本要素——距离度量、k值的选择和分类决策规则决定。 距离度量 特征空间中两个实例点的距离是两个实例点相似程度的反映。一般使用欧氏距离,但也可以是 L p 距离(L p distance)或 Minkowski距离(Minkowski distance)。 x i ,x j 的L p 距离定义为: 这里p≥1。当p=2时,称为欧氏距离(Euclidean distance),即: 当p=1时,称为曼哈顿距离(Manhattan distance),即: 当p=∞时,它是各个坐标距离的最大值,即: 下图给出了二维空间中p取不同值时,与原点的 L p 距离为1(L p =1)的点的图形 可以看出由不同的距离度量所确定的最近邻点是不同的。 k值的选择 k值的选择会对k近邻法的结果产生重大影响。 如果选择较小的k值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差(approximation error)会减小,但“学习”的估计误差(estimation error)会增大。如果选择较大的k值,则相反。 近似误差:可以理解为对现有训练集的训练误差。只管眼前训练,不管未来预测,模型本身并不是最接近真实分布

机器学习基础梳理—(K-近邻算法浅谈)

戏子无情 提交于 2020-02-29 09:49:15
K-近邻算法可用在二类分类,多类分类和回归问题上 基本要素: K值的选择,距离度量和分类决策规则 减小K值:近似误差减小,估计误差增大,增大K值则相反K值通常不大于20;距离 度量:Lp距离;分类决策规则:多数表决 工作原理: 1、有监督学习:标签化数据集 2、测试阶段:输入无标签新数据后,将新数据的特征与样本集的特征进行比较( 最近邻:赋予最相近数据的标签;K-近邻:选择K个最相近数据中出现频次最多的 标签) 工作流: 1、制作标签化数据集 2、准备数据:修改为可用于距离计算的数值型数据 3、应用 K-近邻:首先计算测试数据与标签化数据集K个点的距离,然后升序排序,并选择 距离最小的K个点,最后返回出现频次最高的标签(分类)或K个点某个(些)属 性的平均值(回归) 注意:K-近邻算法无需训练 来源: https://www.cnblogs.com/cookbook/p/12381351.html

机器学习三 -- 用Python实现K-近邻算法

我与影子孤独终老i 提交于 2020-02-04 07:57:55
Python语言实现机器学习的K-近邻算法 写在前面 额、、、最近开始学习机器学习嘛,网上找到一本关于机器学习的书籍,名字叫做《机器学习实战》。很巧的是,这本书里的算法是用Python语言实现的,刚好之前我学过一些Python基础知识,所以这本书对于我来说,无疑是雪中送炭啊。接下来,我还是给大家讲讲实际的东西吧。 什么是K-近邻算法? 简单的说,K-近邻算法就是采用测量不同特征值之间的距离方法来进行分类。它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系,输入没有标签的新数据之后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取出样本集中特征最相似数据的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是K-近邻算法名称的由来。 提问:亲,你造K-近邻算法是属于监督学习还是无监督学习呢? 使用Python导入数据 从K-近邻算法的工作原理中我们可以看出,要想实施这个算法来进行数据分类,我们手头上得需要样本数据,没有样本数据怎么建立分类函数呢。所以,我们第一步就是导入样本数据集合。 建立名为kNN.py的模块,写入代码: 1 from numpy import * 2 import operator 3 4 def createDataSet(): 5 group =

PythonML-Day02: k-近邻、朴素贝叶斯、决策树、随机森林、交叉验证、网格搜索

核能气质少年 提交于 2020-01-30 20:41:55
ML-Day02: k-近邻、朴素贝叶斯、决策树、随机森林、交叉验证、网格搜索 1.数据分类 离散型数据:可以列举出 连续型数据:在区间内可任意划分,不可一一列举 2.机器学习算法分类 监督学习(预测):有特征值和目标值,有标准答案 分类[离散]:k近邻、贝叶斯、决策树与随机森林、逻辑回归、神经网络 回归[连续]:线性回归、岭回归 非监督学习: 只有特征值,没有保准答案 聚类:k-means 3.机器学习开发流程 - 原始数据: 公司本身有数据/ 合作数据/ 购买数据/ - 明确公司要做什么: 建立模型,是分类还是回归? - 数据基本的处理: pd 去处理数据(缺失值,合并表等等) - 特征工程:特征抽取/ 归一化/ 标准化/ 特征选择/ 主成分分析 - 找对应的算法去生产模型: 模型 = 算法 + 数据 - 模型的评估: 判定效果 - 评估优秀,上线使用,进行数据预测 - 评估失败,特征工程是否有问题、调参数、换算法等 4.划分数据集 - 训练集 75% - 用于训练,构建模型 - 测试集 25% - 用于检测模型,评估模型是否有效 - sklearn.model_selection.train_test_split - li = load_iris() # 注意返回值的顺序 # 训练特征值x_train # 测试特征值x_test # 训练目标值y_train # 测试目标值y

K-近邻算法详解-1

泪湿孤枕 提交于 2020-01-30 07:08:53
K-近邻算法(k-neareast neighbor,kNN) ————(解决分类和回归问题的最基本算法之一) 核心思想:给定测试样本,基于某种距离度量找出训练集中与其最近的k个训练样本,然后基于这k个“邻居”信息进行测试集的预测。 下面分为3点和大家了解这个算法: 1.距离度量 如上述核心思想所述,我们需要找到测试集与其最近的k个数据之间的距离信息,然而距离的度量有很多种,下面给出几个常用的距离度量。 1.欧氏距离 2.曼哈顿距离 3.闵可夫斯基距离 2.K值的选择 选择K个与待测样本最近的样本,并认为K个已知样本中出现次数最多的类别即为待测样本的类别。 但是K值的大小的不同,待测样本的类别也会不同。如下图所示: 判断上图中长方形的类别,当K=3时,长方形的类别为三角形,当K=7时,长方形的类别为圆形。 K值越小,就意味着选择较小的领域的数据来判断待测数据的类别,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合。 K值越大,说明选择较大的领域的数据来判断待测数据的类别,K值越大,模型越简单 在应用中,K值一般选择一个较小的数值,采用交叉验证来选择最优的K值 3.分类决策规则 看待测样本的近邻那个类别的点最多,那么待测样本就属于哪个类别,也就是多数表决,也可以是加权投票,距离最近的样本的权重多一点,距离远的样本的权重小一点,通过加权投票最后判断待测样本属于哪个类别。

k近邻(k-NN)算法的python实现

不羁的心 提交于 2020-01-26 19:01:58
k-NN算法是实现分类的一种简单有效的算法,并且可以实现多类别分类。k-NN算法的三个要素为:距离度量、k值的选择以及分类决策规则。 本文采用欧式距离作为距离度量,近邻数量选取为7,采用多数票方式决定样本的类型。 from sklearn import datasets import matplotlib . pyplot as plt # 画图工具 import numpy as np import heapq from collections import Counter X , y = datasets . make_classification ( n_samples = 1000 , n_features = 10 , n_classes = 3 , n_informative = 3 , random_state = 1 ) #生成1000个样本,共有10个属性,分为3个类别 np . random . seed ( 0 ) x_new = np . random . randint ( 5 , 20 , [ 10 , 1 ] ) #生成一个随机的样本,作为新来样本 def distance ( ) : distances = [ ] for i in range ( X . shape [ 0 ] ) : t = 0 for j in range ( x_new .

机器学习入门笔记07-k近邻

Deadly 提交于 2020-01-20 22:24:28
k近邻算法 k近邻(k-Nearest Neighbor)学习是一种常见的监督学习方法,其算法简单、直观:首先寻找与预测数据最近的k个样本数据,然后观察这k个样本数据的标记类别,数量最多的类别就作为预测数据的类别。我们用图表示一下: 如上图,中间绿色的圆点为要预测的数据,样本数据有两种类型,分别用正方形和三角形表示,当k=3时,就如图中实现所围,距离预测点最近的3个点中两个为三角形,一个为正方形,因此此时预测类型与三角形数据一致;当k=5时,看图中虚线所围面积,正方形点有三个,三角形还是两个,此时预测类型就与正方形数据一致。 k值的选择 经过以上的分析,我们可以看出,k近邻算法的结果受k值的影响很大,因此如何选择k值是非常重要的。 若选择较小的k值,就相当于用较小的领域中的样本进行预测(范围小),此时只有与预测数据更近似的样本才能对预测结果起到作用;但如果最近的k个点噪点较多,则预测就很容易出错。选择较小k值会使整体模型变复杂,容易发生过拟合。 若选择较大的k值,这时与预测数据较远的(相似度较低的)样本也会对其影响,整体模型变得更简单,容易预测错误。 在实际应用中,k值一般取一个比较小的值,通常用交叉验证法来选取最优k值。 距离度量 除了k值的选择外,距离度量公式的选择也对分类结果影响重大。 k近邻模型的特征空间一般是n维实数向量空间,因此一般使用欧式距离,但也可使用其他距离。