k近邻算法

监督学习算法1: K-近邻(KNN)

自古美人都是妖i 提交于 2020-01-18 05:28:58
先解释几个概念 机器学习主要分为:监督学习和无监督学习。 · 监督学习: 从已知类别的数据集中学习出一个函数,这个函数可以对新的数据集进行预测或分类,数据集包括特征值和目标值,即有标准答案;常见算法类型可以分为:分类和回归。 分类问题常见算法:K-近邻(KNN)、朴素贝叶斯、决策树、随机森林、逻辑回归、神经网络 回归常用于预测,比如房价,常见算法:线性回归、岭回归 · 无监督学习: 与监督学习的主要区别是,数据集中没有人为标注的目标值,即没有标准答案;常见算法有:聚类,生成对抗网络。 K-近邻算法 这是机器学习中最简单的一个算法,先看定义 定义:如果一个样本与特征空间中的K个样本 距离 最近,这K个样本中的大多数属于A类别,那么该样本也属于A类别。 通俗说就是通过你最近的K个邻居来求出你的类别; 比如现在要求你所在的区域,A在朝阳区,B在海淀区,C在海淀区,D在房山区,你与ABC的距离分别是:20,28,23,35;K值取3,那么这三个离你最近的邻居是A、B、C,这三个中有两个属于海淀区,按照K-近邻算法,你所在的区域就是海淀区;如果K取1,就是朝阳区; 由此也说明了K近邻算法的结果很大程度上受K取值的影响,通常K值取不大于20的整数。 K-近邻中的距离如何计算? 这里的距离一般使用欧式距离,公式如下: 比如有两个样本:A (a1,a2,a3) ,B (b1,b2,b3)

第三章 k近邻法笔记

让人想犯罪 __ 提交于 2020-01-12 02:51:03
CH03 k近邻法 文章目录 CH03 k近邻法 前言 章节目录 导读 最近邻算法 k近邻模型 算法 距离度量 k k k 值选择 分类决策规则 实现 构造KDTree 搜索KDTree k k k 近邻查找 范围查询 例子 例3.1 例3.2 例3.3 其他资料 KNN 特点 KNN算法的优势和劣势 Sklearn 实现 前言 章节目录 k近邻算法 k近邻模型 模型 距离度量 k值选择 分类决策规则 k近邻法的实现: KDTree 构造KDTree 搜索KDTree 导读 kNN是一种基本分类与回归方法。 kNN是机器学习中被分析的最透彻的算法之一。 多数表决规则等价于0-1损失函数下的经验风险最小化,支持多分类, 有别于前面的感知机算法 kNN的k和KDTree的k含义不同,书上这部分有注释说明(最近邻的k个点;k维空间) KDTree是一种存储k维空间数据的树结构,KDTree是平衡二叉树 KNN应用的一个实践问题是 如何建立高效的索引 。建立空间索引的方法在点云数据处理中也有广泛的应用,KDTree和八叉树在3D点云数据组织中应用比较广 书中的KDTree搜索实现的时候针对了一种 k = 1 k=1 k = 1 的特殊的情况,实际是 最 近邻搜索 KDTree的搜索问题分为 k近邻查找 和 范围查找 ,一个是已知 k k k ,求点集范围,一个是已知范围,求里面有k个点

机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

这一生的挚爱 提交于 2019-12-24 20:51:04
(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单。最好理解的。KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离近期的邻居进行分类推断(投票法)或者回归。假设K=1。那么新数据被简单分配给其近邻的类。KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义。对于监督学习。数据都有明白的label(分类针对离散分布,回归针对连续分布),依据机器学习产生的模型能够将新数据分到一个明白的类或得到一个预測值。对于非监督学习,数据没有label。机器学习出的模型是从数据中提取出来的pattern(提取决定性特征或者聚类等)。比如聚类是机器依据学习得到的模型来推断新数据“更像”哪些原数据集合。KNN算法用于分类时,每一个训练数据都有明白的label。也能够明白的推断出新数据的label,KNN用于回归时也会依据邻居的值预測出一个明白的值,因此KNN属于监督学习。 KNN算法的过程为: 选择一种距离计算方式, 通过数据全部的特征计算新数据与已知类别数据集中的数据点的距离 依照距离递增次序进行排序。选取与当前距离最小的k个点 对于离散分类,返回k个点出现频率最多的类别作预測分类;对于回归则返回k个点的加权值作为预測值 (二)KNN算法关键

K-近邻算法

喜你入骨 提交于 2019-12-06 15:26:14
K-近邻算法 👉 KNeighborsClassifier 原理 :    如果一个样本在 特征空间中的 k个值 (即特征空间中邻近)的 样本中的 大多数 属于某一个类别 , 则该样本也属于这个类别。也理解为:离谁最近,与谁一样。找K个最近的点 , 看这k个点中 , 类别最多的那个类别。    特别需要注意 的是 : 运行k-近邻算法之前,必须做标准化处理!!! K-近邻算法步骤 : 我们可以从 最近邻算法 , 来推演 k近邻算法, 其步骤是 : 计算已知类别数据集中的点与当前点之间的距离 按照距离递增次序排序 选取与当前距离最小的k个点 确定前k个点所在类别的出现频率 返回前k个点所在频率最高的类别作为当前点的预测分类 由此可知 , k近邻算法其实本质上并不是以最近的点为分类, 而是以最近的k个点的分类出现的概率最高为分类, 这点跟我们在spss逻辑回归中的思路是一致的。 k-近邻算法特点: 优点 简单好用, 容易理解, 精度高, 理论成熟, 既可以用来做分类也可以用来做回归; 可用于数值型数据和离散型数据; 训练时间复制为O(n); 无数据输入假定; 对异常值不敏感。 缺点 计算复杂性高; 空间复杂性高; 样本不平衡问题(即有些类别的样本数量很多, 而其他样本的数量很少); 一般数值很大的时候不用这个, 计算量太大。 但是单个样本数不能太少, 否则容易发生误分。

K近邻法与kd树

北战南征 提交于 2019-12-06 10:57:57
K近邻法与kd树 一、k近邻算法 输入:训练数据集 \[ T = \{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\} \] 其中, \(x_i \in R^n\) 为实例的特征向量, \(y_i \in Y = {c_1,c_2,c_3,..,c_k}\) 为实例类别, \(i=1,2,3,..N\) ,实例特征向量 \(x\) . 输出:实例特征向量所属的类 (1) 根据给定的距离度量,在训练集 \(T\) 中找出与 \(x\) 最邻近的 \(k\) 个点,涵盖这 \(k\) 个点的 \(x\) 的邻域记作 \(N_k(x)\) . (2) 在 \(N_k(x)\) 中根据分类决策规则(如多数表决)决定 \(x\) 的类别 \(y\) 。 \[ y = \mathop{argmax}_{c_j} \sum_{x_i\in N_k(x)} I(y_i=C_j) \] k近邻算法没有显式的学习过程。 二、k近邻模型 k近邻模型由三个基本要素组成——距离度量,k值选择,分类决策规则 2.1 距离度量 闵可夫斯基距离公式: \[ L_p(x_i,x_j) = (\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|^p)^{\frac{1}{p}} \] 当p = 2 时,公式称为欧式距离。 当p = 1时,公式称为曼哈顿距离。 当p = \(

K近邻法

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-05 11:24:14
k-NN是一种基本分类回归方法。k近邻法输出为实例类别,可以取多类 k-NN假定给定一个训练集,其中的实例类别已定。分类时,对于新实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式预测。因此,k-NN不具有显式的学习过程 \(k\) 的选择、距离度量及分类决策规则(如多数表决)是k-NN的三个基本要素 k-NN使用的模型实际上对应于对特征空间的划分。当训练集、距离度量、k值和分类决策规则确定后,对于任何一个新的输入实例,它所属的类唯一的确定。 K值的选择 k值的减小: 减小“近似误差”,增大“估计误差” 整体模型变得复杂,临近点如果恰好是噪声,容易发生过拟合 k值增大: 减小“估计误差”,增大“近似误差” 整体模型变得简单,容易欠拟合 极端情况 \(k=N\) 取一个比较小的数值,通常采用交叉验证法来选取最优的 \(k\) 值 k-NN的实现:kd树 线性扫描:计算输入实例与每一个训练实例的距离,计算量太大 构造kd树 kd树是一种对k维空间中的实例点进行存储以便对其进行快速搜索的树形数据结构。kd树是二叉树,表示对k维空间的一个划分。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。kd树的每个节点对应于一个k维超矩形区域。 构造平衡kd树 平衡kd树(中位数作为切分点)不一定是搜索效率最优的 输入:数据集T,其中 \(x_i=(x^

k近邻算法--理解和使用场景

烈酒焚心 提交于 2019-12-04 23:48:43
1. k近邻算法: 数学知识欧式距离: 使用k近邻算法的条件: 1. 你需要一个训练的数据集,这个数据集包含各种特征值和对应的label值 ,在使用前需要将各种特征值 归一化处理。 2. 利用训练的数据集来对要分类的数据进行分类: 根据欧式距离计算出要预测的数据与训练数据集中距离最短的前k个值,然后根据前k个值对应的label 统计出 label值最最多的,如选择的前k个对应的label:['dog','dog','dog','fish'] ,那么这个结果是dog类。 k近邻算法特点: 优点: 计算精度高,不受异常值影响。 缺点: 计算复杂度高,空间复杂度高 适用于: 带lable的数值类 python中主要使用函数: 主要的使用numpy 模块,这个模块主要有两种数据类型: 1. array 类型 2. matrix 类型 mat: 将array 转化成 matrix matix.min(0) 获取特征值最小值 matix.max(0) 获取特征值最大值 参考代码: https://github.com/wujianqiangwjq/machine-learn/blob/master/knn.py 来源: CSDN 作者: 我承包的鱼塘 链接: https://blog.csdn.net/weixin_39594447/article/details/83721118

K-近邻算法(KNN)

a 夏天 提交于 2019-12-04 08:13:05
K-近邻算法 K-K个 N-nearest-最近 N-Neighbor 来源:KNN算法最早是由Cover和Hart提出的一种分类算法 定义 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 距离公式 两个样本的距离可以通过如下公式计算,又叫欧式距离 KNN算法流程总结 根据K个邻居判定你的类别 1.计算当前样本与所有样本距离 2.距离从小到大排序 3.取前K个邻居 4.K个邻居投票,统计投票结果(A,B) 5.根据投票结果值出现频率高类别作为最终类别 K近邻算法api初步使用 机器学习流程 1.获取数据 2.数据基本处理 3.特征工程 4.建立模型   1.KNN算法 5.模型评估 Scikit-learn工具介绍 Python语言的机器学习工具 Scikit-learn包括许多知名的机器学习算法的实现 Scikit-learn文档完善,容易上手,丰富的API 目前稳定版本0.19.1-?? 安装: pip3 install scikit-learn==0.19.1注:安装scikit-learn需要Numpy, Scipy等库 Scikit-learn 包含的内容 分类、聚类、回归 特征工程 模型选择、调优 K-近邻算法API sklearn.neighbors.KNeighborsClassifier(n

K近邻算法(KNN)

匿名 (未验证) 提交于 2019-12-02 23:52:01
1.算法介绍: k近邻算法(k-NN)是一种简单、基本的分类与回归方法。算法描述如下:给定一个训练数据集,对于新给的一个样本,在训练数据中找到与该样本最相邻的k个实例,那么这k个实例多数属于哪个分类,就把该样本归类到哪个分类。 k近邻模型的三个基本要素――距离度量、k值确定、分类决策规则(一般是多数规则)。 首先,我们需要度量任何两个样本之间的距离,特征空间中2个实例点距离是2个实例点的相似程度的反映。 假设x i 和x j i =(x i (1) i (2) , ... x i (n) ) T j =(x j (1) j (2) j (n) ) T i 和x j 的距离就是L p (x i , x j ) ,也叫做闵可夫斯基(H.Minkowski)距离。

16_k近邻算法总结

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-02 16:45:53
1.k近邻算法属于分类算法 2.你的“邻居”来推断出你的类别 3.标准定义:如果一个样本在特征空间中的 k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别 ,则该样本也属于这个类别。 4.计算距离公式:   比如说,a(a1,a2,a3),b(b1,b2,b3),不一定非要是三维的哦!    5.sklearn k-近邻算法API:   n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数   algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率) 6.机器学习数据处理流程:   1、数据集的处理   2、分割数据集   3、对数据集进行标准化   4、estimator流程进行分类预测 7.k-近邻中k的取值大小:   1、k值取多大?有什么影响?     k值取很小:容易受异常点影响     k值取很大:容易受最近数据太多导致比例变化 8.k-近邻算法优缺点:   优点: 简单,易于理解,易于实现,无需估计参数,无需训练。   缺点: 懒惰算法,对测试样本分类时的计算量大