knn

KNN算法之KD树

孤街浪徒 提交于 2019-11-26 21:00:54
KD树算法是先对数据集进行建模,然后搜索最近邻,最后一步是预测。 KD树中的K指的是样本特征的维数。 一、KD树的建立 m个样本n维特征,计算n个特征的方差,取方差最大的第k维特征作为根节点。选择第k维特征的中位数作为切分点,小于中位数的放左子树,大于中位数的放右子树,递归生成。 举例 有二维样本6个,{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)}: 1、找根节点,6个数据点在x、y维度上的方差分别是6.97,5.37,x维度方差最大,因此选择x维进行键树; 2、找切分点,x维中位数是(7,2),因此以这个点的x维度的取值进行划分; 3、x=7将空间分为左右两个部分,然后递归使用此方法,最后结果为: 二、搜索最近邻 kd树生成之后就可以预测测试集里的目标样本了。 首先找到包含目标样本的 来源: https://www.cnblogs.com/pacino12134/p/11333238.html

4.pca与梯度上升法

给你一囗甜甜゛ 提交于 2019-11-26 21:00:39
(一)什么是pca pca,也就是主成分分析法(principal component analysis),主要是用来对数据集进行降维处理。举个最简单的例子,我要根据姓名、年龄、头发的长度、身高、体重、皮肤的白皙程度(随便想的)等特征来预测一个人的性别,但这些特征中有一个是最没有用的,是什么的?显然是年龄,因为年龄的大小跟这个人的性别无关。还有姓名,这个特征显然起不到决定性作用,因为有的男孩的名字起的就像女孩(比如我本人),反之亦然,但是起码绝大多数情况还是能判断的。同理还有身高,一个180CM的很大概率是男孩,当然女孩也有180cm的,比如模特。像这样我从样本的特征中,挑选出最能代表样本、或者对样本预测起到决定性作用最大的n个特征,就叫做主成分分析。为什么会有pca呢?可以想象一个,显示生活中,样本的特征很多,成百上千个也是正常的,但是我们训练不可能用全部的特征进行训练,因为肯定有很多特征是没有用的,或者说起到的作用是很小的,我们的目的就是希望找到起到决定性最大的n个特征。 主成分分析的特征 一个非监督的机器学习算法 主要用于数据的降维 通过降维,可以发现更便于人类理解的特征 其他特征:可视化,去噪等等 我们举一个只有两个特征的例子 如果我们只考虑特征1,不考虑特征2的话,那么显然,蓝色的点要从二维映射到一维 那么同理,如果我们只考虑特征2,不考虑特征1的话,那么显然会是这样

KNN

这一生的挚爱 提交于 2019-11-26 20:57:48
一、原理 选择距离测试样本最近的k个样本,出现频数最大的样本的类别就是该测试样本的类别。 二、优缺点 优点:简单、快速、易于实现; 缺点:计算量大, 数据不平衡 时预测偏差比较大; 三、不平衡问题怎么解决? 数据不平衡时,距离测试样本最近的k个样本中,可能 大数量类别样本 最多,这样导致预测错误。 解决:使用权值,近的权值大,远的权值小; 四、计算量大怎么解决? 先将样本集按距离进行分组,然后计算出质心,找到离测试样本最近的质心,然后在这个组里面进行KNN算法。 适用于样本容量大的情况。 五、K是如何选取的? 过小容易过拟合,过大容易欠拟合。一般是选较小的值,采用交叉验证进行调优。 来源: https://www.cnblogs.com/pacino12134/p/11333172.html

【机器学习实战】KNN算法

非 Y 不嫁゛ 提交于 2019-11-26 20:40:12
机器学习作为人工智能的重要分支,同时也是数据挖掘中不可或缺的算法支撑。本人接触时间不短,但研究尚浅。我计划用python来实现机器学习中较为常见的算法。 看透了自己,便无须小看别人。 (老舍) 机器学习 机器学习是一类算法的总称,可以分为监督学习和无监督学习。半监督学习是结合监督学习与无监督学习的一种机器学习方法,成为近几年的研究热点。这些算法试图从大量历史数据中挖掘出其中隐含的规律,并用于预测或分类。机器学习的目标是使学到的模型能很好地适用于“新样本”,具有泛化能力。此外,监督学习对应分类和回归,而无监督学习对应聚类和密度估计。半监督学习作为我读研期间的主要研究方向,后面会重点介绍个人的一些成果和心得感悟。下面介绍KNN算法,它非常有效且易于掌握。 KNN算法 k-近邻算法采用测量不同特征值之间的距离方法进行分类。 工作原理 1 有一个训练数据集,并且知道其中数据与其对应标签。 2 输入无标签的新数据之后,将新数据的每个特征和样本集中的数据对应的特征进行比较,然后提取样本数据集中最相似(距离最近)数据的分类标签; 3 把前k个数据标签中出现次数最多的分类,作为新数据的分类结果。 Demo代码 from numpy import * import operator # 运算符模块(排序) # from os import listdir def createDataSet ( )

主成分分析法

房东的猫 提交于 2019-11-26 19:41:53
目录 主成分分析法 一、主成分分析的理解 二、使用梯度上升法求解PCA 三、求数据的前n个主成分 四、将高维数据向低维数据映射 五、scikit-learn中的PCA 六、对真实数据集MNIST使用PCA 七、使用PCA降噪 八、PCA与人脸识别 我是尾巴: 主成分分析法 主成分分析法:(Principle Component Analysis, PCA),是一个非监督机器学习算法,主要用于数据降维,通过降维,可以发现便于人们理解的特征,其他应用:可视化和去噪等。 一、主成分分析的理解 ​ 先假设用数据的两个特征画出散点图,如果我们只保留特征1或者只保留特征2。那么此时就有一个问题,留个哪个特征比较好呢? ​ 通过上面对两个特征的映射结果可以发现保留特征1比较好,因为保留特征1,当把所有的点映射到x轴上以后,点和点之间的距离相对较大,也就是说,拥有更高的可区分度,同时还保留着部分映射之前的空间信息。那么如果把点都映射到y轴上,发现点与点距离更近了,这不符合数据原来的空间分布。所以保留特征1相比保留特征2更加合适,但是这是最好的方案吗? ​ 也就是说,我们需要找到让这个样本间距最大的轴?那么如何定义样本之间的间距呢?一般我们会使用方差(Variance),Var(x)=\frac{1}{m}\sum_{i=1}^m(x_{i}-\overline{x})^2,找到一个轴

Sklearn kNN usage with a user defined metric

血红的双手。 提交于 2019-11-26 19:36:13
问题 Currently I'm doing a project which may require using a kNN algorithm to find the top k nearest neighbors for a given point, say P. im using python, sklearn package to do the job, but our predefined metric is not one of those default metrics. so I have to use the user defined metric, from the documents of sklearn, which can be find here and here. It seems that the latest version of sklearn kNN support the user defined metric, but i cant find how to use it: import sklearn from sklearn

Changing shape of single point in JFreeChart XYPLot

℡╲_俬逩灬. 提交于 2019-11-26 17:56:51
I am using JFreeChart XYPLot for plotting a XYData set with different labels . I have created different XYSeries objects for different labels so that I can have different colors for different labels . Now I need to require the change the shapes of specific points(test data) in each XYDataSeries as below . In the above plotting , there are two different XYSeries with blue and red color . Out of these two I need to change the shapes of some points(test data) to X instead of circle . Is it possible in JFreeChart. This post explained on how to do it for whole data set , but I want to change only

机器学习实战之KNN算法笔记

蹲街弑〆低调 提交于 2019-11-26 17:47:33
K近邻算法 大致思路:算法的思路是通过特征建立建立一个坐标图,然后计算预测点与每一个已知点的距离,选取距离最小的K个已知点,然后分别确定这K个点的出现概率,选取出现概率最高的那个已知点的结果作为预测点的结果。 若是二维的特征,就如下图所示,计算已知点与预测点距离,然后就把距离最小的已知点与这个预测点归为一类。 距离计算公式: 于是,对于n维的两个点(X11,X12,X13.......X1n)与(X21,X22,X23......X2n)的距离为 KNN的py代码实现 实现的算法(计算距离) 思路:训练集所有项目特征[[x11,x12,x13...],[x21,x22,x23...],[x31,x32,x33...]....]方程这样一行,然后测试的项目[[xn1,xn2,xn3...],[xn1,xn2,xn3...],[xn1,xn2,xn3...]....]弄成这样一排相同的,然后与训练集求差,在求平方和,选出K个。 def classify0(inX, dataSet, labels, k): """ inX为测试集 dataSet为训练集 labels为训练集的标签 k为KNN算法的参数K """ dataSetSize = dataSet.shape[0] #第一步,读取训练集的行数,使用np.shape[0],为了将测试集构造出与他一样大的测试集计算差 diffMat

K最近邻(k-Nearest Neighbor,KNN)

独自空忆成欢 提交于 2019-11-26 17:13:20
前言: 学习是就像卷心菜,一层一层的逐步接近菜心,但你永远拨不到最里面那层,无限接近,之前写了一篇关于KNN的算法,使用Python写的,感觉最近又有了新的理解,理解又深刻了一点,so 介绍算法 认识 编程常常说学会三大语句结构,走遍世界全不怕,想一想人做的操作基本上也都是 分三步,识别(感知),判断(决定),操作(行动),比如你写一个字,首先要识别到纸和笔,然后决定在哪里写,然后开始写,但是3者又是嵌套关系,在你识别纸和笔的时候,你又做了这三个步骤,1 识别看到 2 判断是不是纸 3 拿过来放到桌子上 还是不动。 那我们常会有这个东西是什么的问题,这个是笔吗?是我就拿过来用,不是我就在找,那识别这个东西是什么?其实根本是一个分类问题,如果这个是笔,那么我之前用过笔,知道笔能写字,如果是铅笔,有写一段时间需要转笔刀或刀,如果是自动笔,一段时间需要加笔芯,而且要轻点写容易断,如果是油笔需要换笔芯,分类后我们能借助之前这个类型物品的经验,进行新的判断操作。 KNN算法就是解决分类问题的算法,是机器学习算法的一种,k-Nearest Neighbor 意思就是离着k最近的邻居。 如何分类 1 简单理解 如图,这张图很经典,有蓝色的方块和红色的三角,这代表2类型的数据,现在放入一个未知类型的数据绿色的圆圈,那他是三角还是方块?如果k=3 那就是找到离着绿色最近的3个数据,如果三角的多

Finding K-nearest neighbors and its implementation

爷,独闯天下 提交于 2019-11-26 11:21:32
I am working on classifying simple data using KNN with Euclidean distance. I have seen an example on what I would like to do that is done with the MATLAB knnsearch function as shown below: load fisheriris x = meas(:,3:4); gscatter(x(:,1),x(:,2),species) newpoint = [5 1.45]; [n,d] = knnsearch(x,newpoint,'k',10); line(x(n,1),x(n,2),'color',[.5 .5 .5],'marker','o','linestyle','none','markersize',10) The above code takes a new point i.e. [5 1.45] and finds the 10 closest values to the new point. Can anyone please show me a MATLAB algorithm with a detailed explanation of what the knnsearch function