kNN算法原理

1、K最近邻(k-NearestNeighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

2、KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

3、KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成正比。

简言之,就是将未标记的案例归类为与它们最近相似的、带有标记的案例所在的类。

原理及举例

工作原理:我们知道样本集中每一个数据与所属分类的对应关系,输入没有标签的新数据后,将新数据与训练集的数据对应特征进行比较,找出“距离”最近的k(通常k<20)数据,选择这k个数据中出现最多的分类作为新数据的分类。

算法描述

1、计算已知数据集中的点与当前点的距离

2、按距离递增次序排序

3、选取与当前数据点距离最近的K个点

4、确定前K个点所在类别出现的频率

5、返回频率最高的类别作为当前类别的预测

距离计算方法有"euclidean"(欧氏距离),”minkowski”(明科夫斯基距离), "maximum"(切比雪夫距离), "manhattan"(绝对值距离),"canberra"(兰式距离), 或 "minkowski"(马氏距离)等

Usage

knn(train, test, cl, k = 1, l = 0, prob =FALSE, use.all = TRUE)

Arguments

train

matrix or data frame of training set cases.

test

matrix or data frame of test set cases. A vector will  be interpreted as a row vector for a single case.

cl

factor of true classifications of training set

k

number of neighbours considered.

l

minimum vote for definite decision, otherwisedoubt. (More precisely, less thank-ldissenting votes are allowed, even

ifkis  increased by ties.)

prob

If this is true, the proportion of the votes for the

winning class are returned as attributeprob.

use.all

controls handling of ties. If true, all distances equal

to thekth largest are

included. If false, a random selection of distances equal to thekth is chosen to use exactlykneighbours.

一、R语言KKNN公式说明:

kknn(formula = formula(train), train, test, na.action = na.omit(), k = 7, distance = 2, kernel = "optimal", ykernel = NULL, scale=TRUE, contrasts = c('unordered' = "contr.dummy", ordered = "contr.ordinal"))

参数:

formula                            A formula object.

train                                 Matrix or data frame of training set cases.

test                                   Matrix or data frame of test set cases.

na.action                         A function which indicates what should happen when the data contain ’NA’s.

k                                       Number of neighbors considered.

distance                          Parameter of Minkowski distance.

kernel                              Kernel to use. Possible choices are "rectangular" (which is standard unweighted knn), "triangular", "epanechnikov" (or beta(2,2)), "biweight" (or beta(3,3)), "triweight" (or beta(4,4)), "cos", "inv", "gaussian", "rank" and "optimal".

ykernel                            Window width of an y-kernel, especially for prediction of ordinal classes.

scale                                Logical, scale variable to have equal sd.

contrasts                         A vector containing the ’unordered’ and ’ordered’ contrasts to use

kknn的返回值如下:

fitted.values              Vector of predictions.

CL                              Matrix of classes of the k nearest neighbors.

W                                Matrix of weights of the k nearest neighbors.

D                                 Matrix of distances of the k nearest neighbors.

C                                 Matrix of indices of the k nearest neighbors.

prob                            Matrix of predicted class probabilities.

response                   Type of response variable, one of continuous, nominal or ordinal.

distance                     Parameter of Minkowski distance.

call                              The matched call.

terms                          The ’terms’ object used.

实例:

library(ggvis)

iris%>%ggvis(~Length,~Sepal.Width,fill=~Species)

iris%>%ggvis(~Length,~Sepal.Width,fill=~Species)

library(kknn)

data(iris)

dim(iris)

m

val

建立训练数据集

data.train

建立测试数据集

data.test

调用kknn  之前首先定义公式

formula :Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

iris.kknn

summary(iris.kknn)

# 获取fitted.values

fit

# 建立表格检验判类准确性

table(iris.valid$Species, fit)

# 绘画散点图,k-nearest neighbor用红色高亮显示

pcol

pairs(iris.valid[1:4], pch = pcol, col = c("green3", "red")[(iris.valid$Species != fit)+1]

二、R语言knn算法

install.packages("class")

library(class)

对于新的测试样例基于距离相似度的法则,确定其K个最近的邻居,在K个邻居中少数服从多数

确定新测试样例的类别

1、获得数据

2、理解数据

对数据进行探索性分析,散点图

如上例

3、确定问题类型,分类数据分析

4、机器学习算法knn

5、数据处理,归一化数据处理

normalize

num

denom

return(num/denom)

}

iris_norm

summary(iris_norm)

6、训练集与测试集选取

一般按照3:1的比例选取

方法一、set.seed(1234)

ind

iris_train

iris_test

train_label

test_label

方法二、

ind

iris_train

iris_test

iris_train

train_label

test_label

7、构建KNN模型

iris_pred

8、模型评价

交叉列联表法

table(test_label,iris_pred)

实例二

数据集

http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data

导入数据

dir

names(wdbc.data)

table(wdbc.data$Diagnosis)## M = malignant, B = benign

wdbc.data$Diagnosis

r 语言计算欧氏距离_R语言-KNN算法相关推荐

  1. r - 求平均成绩_R语言 从零开始的笔记(一)

    R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. R语言于生物学分析中的应用越来越广泛,在其他领域的统计绘图应用 ...

  2. R语言JAVA对比_R语言统计分析应用与SAS、SPSS的比较

    能够用来做统计分析的软件和程序很多,目前应用比较广泛的包括:SPSS, SAS.R语言,Matlab,S-PLUS,S-Miner等.下面我们来看一下各应用的特点: SPSS: 最简单的,都是菜单操作 ...

  3. r语言清除变量_R语言(1)初识与数据结构

    点击上方蓝字,记得关注我们! a picture is worth a thousand words! 一,R语言简介 1,R语言的发展 上世纪90年代初,新西兰奥克兰大学 Ross Ihaka 和 ...

  4. r 语言计算欧氏距离_一文搞懂常用R语言统计值计算:打倒描述性统计拦路虎

    本文来自:R语言:用R计算各种统计值 作者:生物信息学习 目录: 求极差(range) 做频数分布表和频数分布图(graph of frequency distribution) 算术平均数(mean ...

  5. r计算百分位数_R语言:用R计算各种统计值

    目录:求极差(range) 做频数分布表和频数分布图(graph of frequency distribution) 算术平均数(mean) 几何均数(geometric mean) 中位数与百分位 ...

  6. r语言pls分析_R语言中的偏最小二乘PLS回归算法

    偏最小二乘回归: 我将围绕结构方程建模(SEM)技术进行一些咨询,以解决独特的业务问题.我们试图识别客户对各种产品的偏好,传统的回归是不够的,因为数据集的高度分量以及变量的多重共线性.PLS是处理这些 ...

  7. r语言 tunerf函数_R语言︱常用统计方法包 机器学习包(名称、简介)

    一.一些函数包大汇总 转载于:http://www.dataguru.cn/thread-116761-1-1.html 时间上有点过期,下面的资料供大家参考 基本的R包已经实现了传统多元统计的很多功 ...

  8. r语言logistic回归_R语言多分类logistic逻辑回归模型在混合分布模拟单个风险损失值评估的应用...

    原文链接 :http://tecdat.cn/?p=14017​tecdat.cn 通常,我们在回归模型中一直说的一句话是" 请查看一下数据 ". 在上一篇文章中,我们没有查看数据 ...

  9. r k-means 分类结果_R语言信用评分卡:数据分箱(binning)

    作者:黄天元,复旦大学博士在读,热爱数据科学与R,热衷推广R在工业界与学术界的应用.邮箱:huang.tian-yuan@qq.com.欢迎合作交流 library(knitr) opts_chunk ...

  10. r语言 tunerf函数_R语言 | 一网打尽高质量统计分析与机器学习包

    原标题:R语言 | 一网打尽高质量统计分析与机器学习包 146+72本期刊<SCI期刊分析+选刊网站>免费领 解螺旋公众号·陪伴你科研的第2232天 常用统计方法包+机器学习包(名称.简介 ...

最新文章

  1. nginx如何解决超长请求串
  2. Adapterview和adapter的联系
  3. php配置设置,PHP设置配置文件的方法
  4. codeforces 的一些数学题
  5. 论文阅读 R-FCN: Object Detection via Region-based Fully Convolutional Networks
  6. Spark MLlib学习
  7. java semaphore 等待时间_一个java同步工具类Semaphore的详解
  8. java王者荣耀英雄代码_王者荣耀英雄代码在哪个文件夹_王者荣耀英雄代码大全...
  9. 将高德坐标拾取工具放入Element UI 对话框
  10. 【概率论】复习资料(手写复习)
  11. ISIS协议的基础配置实验,原来做ISIS基础配置还可以这么有趣
  12. 北京服务器托管机房——双路由备份+BGP动态路由策略
  13. 用“狗屁不通文章生成器”写作文,竟打败73.5%的学生?
  14. tkinter中控件menu的两种组织方法
  15. 移动APP测试中的功能与非功能测试
  16. void test();
  17. Golang的Panic和Recover
  18. Docker 数据卷重复挂载测试
  19. 自动驾驶决策规划算法第一章笔记 忠厚老实的老王
  20. python模拟登录163邮箱_python模拟登陆163邮箱并下载邮件内容(第三版代码片段)

热门文章

  1. R语言ggplot2可视化在轴标签、轴标题中添加大于号、等于号等实战
  2. HL7(Health Level Seven)
  3. 【无标题】用ubuntu通过c语言实现俄罗斯方块小游戏的方案及改进思路
  4. html元素的默认样式,CSS重置,常见元素的默认样式
  5. HTML5期末大作业:温泉酒店网站设计——中国风的温泉酒店网(13页) HTML+CSS+JavaScript 学生web网页制作期末大作业_住宿 旅游 主题酒店
  6. 向《基础微积分》教科书翻译者致敬
  7. kernel编译错误R_ARM_THM_JUMP19
  8. Python计算细胞核与细胞质的面积比opencv或pil实验
  9. 和橘子菇凉一起开始python之旅吧!
  10. Linux中rps/rfs的原理及实现