思路:如果一个样本在特征空间中的k个最相近的样本中大多数属于某个类别,则该样本也属于该类别;

这段话中涉及到KNN的三要素:K、距离度量、决策规则

  • K:KNN的算法的结果很大程度取决于K值的选择;

If it's too small, the we gain efficiency but become susceptible to noise and outlier data points.

If it's too large, the we are at risk of over-smoothing our classification results and increasing bias.

  • 距离度量:

欧式距离:

\[d(x,y)=\sqrt{\sum_{k=1}^{n}(x_k-y_k)^2}
\]

曼哈顿距离:

\[d(x,y)=\sqrt{\sum_{k=1}^{n}|x_k-y_k|}
\]

  • 决策规则:

    • 空间中距离越近的点属于一类的可能性就越大;
    • 使用前K个样本中多数类别;

算法过程描述:

  1. 计算测试样本与训练数据之间的距离;
  2. 得到距离按照递增关系排序;
  3. 选取距离最小的K个样本;
  4. 确定选择的K个样本中类别出现的频率;
  5. 选择出现频率最大的类别作为测试样本的类别;

KNN算法的优缺点:

优点:

  • 精度高,对异常值不敏感、无数据输入假定;
  • 简单有效,易理解;

缺点:

  • 计算复杂度高、空间复杂度高;
  • 无法给出任何数据的基础结构信息;

训练简单,测试难;

k-NN更适合低维特征空间,而不适合图片,图片是高维特征空间;

不能进行学习,也就说如果犯错误了,不能变得更聪明;

仅仅依赖于n维空间的distance做分类

KNN算法实现(Python):

默认:已经获取到训练数据\(dataSet \in R^{m \times n}\)、训练集标签\(labels \in R^n\)、测试样本\(inX \in R^{1 \times n}\);

def classify(inX, dataSet, labels, k=3):
# 首先计算测试样本与训练数据之间的欧式距离
m = dataSet.shape[0]
diffMat = np.tile(inX, (m, 1)) - dataSet
sqDiffMat = diffMat ** 2
sqDistance = sqDiffMat.sum(dim=1)
distance = sqDistance ** 0.5 # 排序,并选择距离最近的前k中样本中类别数目最多的类别
sortedDistanceIndex = distance.argsort()
classCount = {} # 保存距离最近的前k个样本中的类别个数
for i in range(k):
votelabel = labels[sortedDistanceIndex[i]]
classCount[votelabel] = classCount.get(votelabel, 0) + 1 # 有则返回,无则置0
sortedClassCount = np.sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0]

sklearn中使用KNN:

# *- coding: utf-8 -*

"""
使用sklearn实现knn
"""
# ===================================== from sklearn import neighbors
from sklearn import datasets # load dataset
iris = datasets.load_iris()
iris_x = iris.data
iris_y = iris.target # model
knn = neighbors.KNeighborsClassifier() # 训练
knn.fit(iris_x, iris_y) # 预测
predictedLabel = knn.predict(iris_x) error = sum(abs(predictedLabel - iris_y)) / len(iris_y)
print(error)

reference

Machine Learning-KNN的更多相关文章

  1. [Machine Learning]k-NN

    k-NN最近邻算法 基本思想: 对未知样本X,从训练样本集中获取与其最相近的k个样本,利用这k个样本的类别预测未知样本X的类别. 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大 ...

  2. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  3. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  4. Machine Learning In Action 第二章学习笔记: kNN算法

    本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...

  5. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

  6. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  7. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  8. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

  9. [Machine Learning] 国外程序员整理的机器学习资源大全

    本文汇编了一些机器学习领域的框架.库以及软件(按编程语言排序). 1. C++ 1.1 计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV—它提供C++, C ...

  10. SOME USEFUL MACHINE LEARNING LIBRARIES.

    from: http://www.erogol.com/broad-view-machine-learning-libraries/ http://www.slideshare.net/Vincenz ...

随机推荐

  1. Unity3D连接WCF

    Unity3D连接WCF: 一.最简单的案例 1.VS2015中: (1)建立WCF应用服务程序ForUnity: (2)将自动生成的IService1.cs与Service1.svc删除:   (3 ...

  2. PHP 使用header函数设置HTTP头的示例解析 表头

    PHP 使用header函数设置HTTP头的示例解析 表头 //定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header ...

  3. java try中包含return语句,finally中的return语句返回顺序

    //结论: finally 中的代码比 return 和 break 语句后执行 public static void main(String[] args) { int x=new Test.tes ...

  4. Gym - 100570C: Subrect Query (巧妙的单调队列)

    De Prezer loves rectangles.He has a n × m rectangle which there is a number in each of its cells. We ...

  5. 1018 Public Bike Management (30)(30 分)

    时间限制400 ms 内存限制65536 kB 代码长度限制16000 B There is a public bike service in Hangzhou City which provides ...

  6. CH6802 車的放置 和 CH6B24 Place the Robots

    6802 車的放置 0x60「图论」例题 描述 给定一个N行M列的棋盘,已知某些格子禁止放置.问棋盘上最多能放多少个不能互相攻击的車.車放在格子里,攻击范围与中国象棋的"車"一致. ...

  7. 洛谷 P1379 八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...

  8. RenderingPath 渲染路径

    http://blog.csdn.net/lichaoguan/article/details/42554821 RenderingPath 渲染路径 Deferred Lighting 延时光照 延 ...

  9. What is Photon Server?

    http://blog.csdn.net/menuconfig/article/details/8215033 Photon Server是一套套裝的遊戲伺服器,以往開發線上遊戲都必需自行花費大筆的研 ...

  10. 冷备手工完全恢复(recover database,recover tablespace,recover datafile)

    冷备手工完全恢复 1.   手工完全恢复三种级别: recover database: 所有或大部分datafile丢失,一般是在mount状态完成.recover tablespace:    非关 ...