knn

机器学习-KNN近邻算法

会有一股神秘感。 提交于 2019-11-27 15:29:15
参看文章: 《机器学习-周志华》 《机器学习实战-Peter Harrington》 《统计学习方法-李航》 算法介绍: k近邻学习是一种常用的 监督学习 方法,其工作机制如下,给定测试样本,基于某种距离度量( 曼哈顿距离、欧氏距离、切比雪夫距离、Lp距离、Minkowski距离 )找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。 argmax(f(x))是使得 f(x)取得最大值所对应的变量点x 投票法: 在 分类 任务中使用,选择k个样本出现最多的类别标记作为预测结果 平均法: 在 回归 任务中使用,即将k个样本的实值输出标记的平均值作为预测结果 距离权重法: 称为k近邻算法的优化算法,为每个点的距离增加一个权重,使得距离近的点可以得到更大的权重,既可用于 加权平均又可用于加权投票。 优点: 1.理论成熟,思想简单,既可以用来做分类又可以做回归 2.训练时间复杂度为O(n);无数据输入假定; 3.可用于数值型数据和离散型数据; 4.对异常值不敏感 缺点: 1.计算复杂度高,因无显示的训练过程 2.对k值、距离敏感,不同k值与距离计算方法可能结果不同 3.无法给出任何数据的基础结构信息 最近邻分类器(k = 1) 错误率(暂未看懂) 实现方法: 1. kd树 2. 传统法 代码: 来源: https://www.cnblogs.com/Jacon

基于Sklearn的KNN的代码实现

别来无恙 提交于 2019-11-27 13:48:05
Sklearn的KNN 很早以前就写过SK的KNN但一直没写过博客,一直偷懒,最近良心发现!ps:找工作,没的博客拿不出手啊哈哈,于是开始 来把以前的学习的知识一起share #sklearn.datasets 里面调入波士顿房价的数据 from sklearn.datasets import load_boston boston=load_boston() # sklearn.cross_validation 导入数据分割器 from sklearn.cross_validation import train_test_split import numpy as np X=boston.data y=boston.target 直接点,从sk里面拿到一个数据集,可能输出有点慢不要急来下一步 1.标准化数据,保证你的数据波动范围,确保预测性 from sklearn.neighbors import KNeighborsRegressor #从sklearn. from sklearn.preprocessing import StandardScaler #标准化处理 #StandardScaler 去均值和方差 X_scaler=StandardScaler() X=X_scaler.fit_transform(X) y=np.array(y).reshape(-1,1) y

KNN底层的实现

陌路散爱 提交于 2019-11-27 13:39:17
KNN基础了解 学习KNN 了解KNN KNN的基本原理代码 学习KNN 了解KNN 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。 KNN的基本原理代码 def KNeighborsClassifier ( inX , dataset , labels , n_neighbors = 5 , weights = 'uniform' , p = 2 ) : '' ' inX : 待测点 dataSet 数据集 labels 数据值对应标签 n_neighbors k取值 weights 权重 uniform 各样本权重相等 distance 按距离加权 '' ' '' '

Missing value imputation in python using KNN

瘦欲@ 提交于 2019-11-27 12:23:08
问题 I have a dataset that looks like this 1908 January 5.0 -1.4 1908 February 7.3 1.9 1908 March 6.2 0.3 1908 April NaN 2.1 1908 May NaN 7.7 1908 June 17.7 8.7 1908 July NaN 11.0 1908 August 17.5 9.7 1908 September 16.3 8.4 1908 October 14.6 8.0 1908 November 9.6 3.4 1908 December 5.8 NaN 1909 January 5.0 0.1 1909 February 5.5 -0.3 1909 March 5.6 -0.3 1909 April 12.2 3.3 1909 May 14.7 4.8 1909 June 15.0 7.5 1909 July 17.3 10.8 1909 August 18.8 10.7 I want to replace the NaN s using KNN as the

机器学习算法--KNN算法

▼魔方 西西 提交于 2019-11-27 11:09:39
KNN算法原理 KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中最简单的算法之一,其指导思想是”近朱者赤,近墨者黑“,即由你的邻居来推断出你的类别。 KNN最邻近分类算法的实现原理:为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与未知样本距离最近的K个已知样本,根据少数服从多数的投票法则(majority-voting),将未知样本与K个最邻近样本中所属类别占比较多的归为一类。 Python实现KNN算法    1 import numpy as np 2 import operator 3 4 def createDataset(): 5   #四组二维特征 6   group = np.array([[5,115],[7,106],[56,11],[66,9]]) 7   #四组对应标签 8   labels = ('动作片','动作片','爱情片','爱情片') 9   return group,labels 10 11 def classify(intX,dataSet,labels,k): 12   ''' 13   KNN算法 14   ''' 15   #numpy中shape[0]返回数组的行数,shape[1]返回列数 16   dataSetSize

简单的实现KNN算法

人盡茶涼 提交于 2019-11-27 08:13:08
0:导引 K-近邻算法(KNN) ### 如何进行电影分类 众所周知,电影可以按照题材分类,然而题材本身是如何定义的?由谁来判定某部电影属于哪 个题材?也就是说同一题材的电影具有哪些公共特征?这些都是在进行电影分类时必须要考虑的问 题。没有哪个电影人会说自己制作的电影和以前的某部电影类似,但我们确实知道每部电影在风格 上的确有可能会和同题材的电影相近。那么动作片具有哪些共有特征,使得动作片之间非常类似, 而与爱情片存在着明显的差别呢?动作片中也会存在接吻镜头,爱情片中也会存在打斗场景,我们 不能单纯依靠是否存在打斗或者亲吻来判断影片的类型。但是爱情片中的亲吻镜头更多,动作片中 的打斗场景也更频繁,基于此类场景在某部电影中出现的次数可以用来进行电影分类。 本章介绍第一个机器学习算法:K-近邻算法,它非常有效而且易于掌握 1:k-近邻算法原理 简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类。 - 优点:精度高(计算距离)、对异常值不敏感(单纯根据距离进行分类,会忽略特殊情况)、无数据输入假定(不会对数据预先进行判定)。 - 缺点:时间复杂度高、空间复杂度高。 - 适用数据范围:数值型和标称型。 工作原理 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据 与所属分类的对应关系。输人没有标签的新数据后

K-近邻算法(KNN)

江枫思渺然 提交于 2019-11-27 05:47:12
1. 原理 定义 如果一个样本的特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 K值取的过小,容易受到异常点的影响 K值取的过大,容易受到样本不均衡的影响 距离公式 欧式距离: 曼哈顿距离(绝对值距离) : 2. K-近邻算法API sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto') - n_neighbors:K值 ,int,可选 (默认= 5),k _neighbors查询默认使用的邻居数 - algorithm: {'auto', 'ball_tree', 'kd_tree', 'brute'}, 可选用于计算最近邻居的算法: 'ball_ tree'将会使用BallTree, 'kd_tree'将使用KDTree。 'auto'将 尝试根据传递给fit方法的值来决定最合适的算法。(不同实现方式影响效率) 3. 案例:鸢尾花种类预测 from sklearn . datasets import load_iris from sklearn . model_selection import train_test_split from sklearn . preprocessing import StandardScaler from

逻辑回归

折月煮酒 提交于 2019-11-27 04:55:18
目录 逻辑回归 一、认识Logistic Regression 二、Logistic Regression的损失函数 三、Logistic Regression的损失函数的梯度 四、编程实现Logistic Regression 五、决策边界 1、Logistic Regression的决策边界 2、KNN的决策边界 七、逻辑回归中使用多项式特征 八、逻辑回归中使用正则化 1、使用Logistic Regression L2正则 2、使用Logistic Regression L1正则 九、逻辑回归解决多分类问题 1、OvR 2、OvO 3、Logistic Regression的OvR和OvO的编程实现 4、sklearn中的OvR和OvO 我是尾巴 逻辑回归 逻辑回归(Logistics Regression),用来解决分类问题,那回归怎么解决分类问题? 将样本特征和样本发生的概率联系起来,概率是一个数。 这是一个统计数据,Logistic Regression是最广泛使用的一种算法。 一、认识Logistic Regression 逻辑回归通常既可以看做回归算法,又可以看做分类算法,通常作为分类算法,只可以解决二分类问题。 通常我们在直线回归过程中使用第一行的公式,但是他的值域是从(-infineity, +infinity)而所需的概率的值域为[0,1],因此做一下改进,

Find K nearest neighbors, starting from a distance matrix

我与影子孤独终老i 提交于 2019-11-26 23:00:52
I'm looking for a well-optimized function that accepts an n X n distance matrix and returns an n X k matrix with the indices of the k nearest neighbors of the ith datapoint in the ith row. I find a gazillion different R packages that let you do KNN, but they all seem to include the distance computations along with the sorting algorithm within the same function. In particular, for most routines the main argument is the original data matrix, not a distance matrix. In my case, I'm using a nonstandard distance on mixed variable types, so I need to separate the sorting problem from the distance

kNN算法通俗讲解

只愿长相守 提交于 2019-11-26 21:44:27
接触机器学习一段时间了,知道它有四种分类:监督学习、无监督学习、半监督学习、强化学习;也知道它的一般步骤:收集数据-->准备数据-->分析数据-->选择模型-->训练模型-->评估模型;知道数据越多测试结果就越准确。 但是,作为一理工女,不动手就不理解,有很多疑团,怎么让一堆样本做为数据输入,怎么训练数据让模型更好,通过什么方法来评估算法,等等等等。 然而,一切通过python编程可以解开模糊不清。资源也会单独上传。 首先是kNN算法。 kNN(k-NearestNeighbor)概述:给一堆数据,每一条数据都要有类别标签,然后输入一条没有类别标签的数据,将这条数据的特征(就是这条数据本身)跟已经存在类别标签的数据一一比较,按相似度排序,找出最相似的k(一般不大于20的整数)条数据,看这k条数据中哪个类别多,那这条新数据就是那个类别。 可能只看文字描述还是不太清晰明了。接下来…… (一)准备数据集。具体的数据是数值型的矩阵如: [[1.0, 1.1], [1.0, 1.2], [5.0, 5.1], [5.0, 5.2]] 因为kNN算法要比较距离,所以每个特征需要是数值,能够计算。 上面的数据集,每一行就是一条数据(或实例),每一个值就是一个特征的值。以上数据只有两个特征,可看做二维平面一点(横坐标和纵坐标)。 还要准备类别标签,每一行数据属于什么类别,也就是新数据要分的类。