机器学习学习笔记之一:K最近邻算法(KNN)
算法
假定数据有M个特征,则这些数据相当于在M维空间内的点
x_{11} & x_{12} & ... & x_{1M} \\
x_{21} & x_{22} & ... & x_{2M} \\
. & . & & .\\
. & . & & .\\
. & . & & .\\
x_{N1} & x_{N2} & ... & x_{NM}
\end{pmatrix}\]
同时我们有标注集向量
y_1 \\
y_2 \\
. \\
. \\
. \\
y_M
\end{pmatrix}\]
那么对于一个新的数据点
x_{z1} & x_{z2} & ... & x_{zM}
\end{pmatrix}\]
我们通过计算其与其他所有点的欧氏距离
\]
得到与所有点的距离向量(并按从小到大排序)
D_1 \\
D_2 \\
. \\
. \\
. \\
D_M
\end{pmatrix}\]
取前k个点即为最近邻的k个点。
D_1 \\
D_2 \\
. \\
. \\
. \\
D_k
\end{pmatrix}\]
根据这k个点所对应的标注,统计这些标注出现的次数\(n_k\)
y_1 & n_1 \\
y_2 & n_2 \\
. & .\\
. & .\\
. & .\\
y_k & n_k
\end{pmatrix}\]
取数量最大的标注作为\(\vec{x_z}\)的标注。
\]
算法实现(Python)
from numpy import *
def KNNclassify(inX, dataset, labels, k):
"""
K-Nearest Neighbour algorithm
:param inX: Input vector X
:param dataset: Training Dataset
:param labels: Labels vector
:param k: the number of nearest neighbours
:return: The class of input
"""
dataset_size = dataset.shape[0]
diffMat = tile(inX, (dataset_size, 1)) - dataset # Use inX to fill a matrix of dataset_size
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1) # Sum according to rows of matrix
distances = sqDistances**0.5
sortedDistIndicies = distances.argsort() # Get the index of all distances
classCount = {}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]
算法优点
- 算法实现简单;
- 不需要事先训练,可直接应用于数据。
算法缺点
- 数据条目很多时算法消耗时间很长,因为它要计算新数据点到每个已存在的数据点的距离;
- 可能会出现多个相同的最大值,导致新的数据点无法准确判断真实的类别标注;
- 如果直接使用KNN算法,则数据范围大的特征对结果影响很大。为了消除这种影响,应该对数据进行归一化的预处理。
机器学习学习笔记之一:K最近邻算法(KNN)的更多相关文章
- 机器学习【一】K最近邻算法
K最近邻算法 KNN 基本原理 离哪个类近,就属于该类 [例如:与下方新元素距离最近的三个点中,2个深色,所以新元素分类为深色] K的含义就是最近邻的个数.在sklearn中,KNN的K值是通过n ...
- 转载: scikit-learn学习之K最近邻算法(KNN)
版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...
- 《机器学习实战》学习笔记一K邻近算法
一. K邻近算法思想:存在一个样本数据集合,称为训练样本集,并且每个数据都存在标签,即我们知道样本集中每一数据(这里的数据是一组数据,可以是n维向量)与所属分类的对应关系.输入没有标签的新数据后,将 ...
- k最近邻算法(kNN)
from numpy import * import operator from os import listdir def classify0(inX, dataSet, labels, k): d ...
- 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)
机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...
- PCB 加投率计算实现基本原理--K最近邻算法(KNN)
PCB行业中,客户订购5000pcs,在投料时不会直接投5000pcs,因为实际在生产过程不可避免的造成PCB报废, 所以在生产前需计划多投一定比例的板板, 例:订单 量是5000pcs,加投3%,那 ...
- 【算法】K最近邻算法(K-NEAREST NEIGHBOURS,KNN)
K最近邻算法(k-nearest neighbours,KNN) 算法 对一个元素进行分类 查看它k个最近的邻居 在这些邻居中,哪个种类多,这个元素有更大概率是这个种类 使用 使用KNN来做两项基本工 ...
- 机器学习实战(Machine Learning in Action)学习笔记————08.使用FPgrowth算法来高效发现频繁项集
机器学习实战(Machine Learning in Action)学习笔记————08.使用FPgrowth算法来高效发现频繁项集 关键字:FPgrowth.频繁项集.条件FP树.非监督学习作者:米 ...
- 机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析
机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析 关键字:Apriori.关联规则挖掘.频繁项集作者:米仓山下时间:2018 ...
- [笔记]《算法图解》第十章 K最近邻算法
K最近邻算法 简称KNN,计算与周边邻居的距离的算法,用于创建分类系统.机器学习等. 算法思路:首先特征化(量化) 然后在象限中选取目标点,然后通过目标点与其n个邻居的比较,得出目标的特征. 余弦相似 ...
随机推荐
- TCP拥塞控制及连接管理
在阅读此篇之前,博主强烈建议先看看TCP可靠传输及流量控制. 一.TCP拥塞控制 在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion ...
- struts2的action编写
例 HelloWorld.jsp <% @ page contentType = "text/html; charset=UTF-8 " %> <% @ tagl ...
- Unity Shader 之 渲染流水线
Unity Shader 之渲染流水线 什么是渲染流水线 一个渲染流程分成3个步骤: 应用阶段(Application stage) 几何阶段(Geometry stage) 光栅化阶段(Raster ...
- Ubuntu下查看软件版本及安装位置
查看软件版本: XXX --version 或 aptitude show xxx 也可用apt-show-versions (要先安装sudo apt-get install apt-show-ve ...
- redis_NoSql数据库四大分类
前面简单介绍了什么是NoSql,以及NoSql的应用场景,今天简单来学习一下NoSql的分类 一.KV键值对 典型的介绍:新浪(BerkeleyDB+redis).美团(redis+tair).阿里, ...
- BZOJ1019 汉诺塔
定义f[i][j]为将i柱上的j个盘挪走(按优先级)的步数 p[i][j]为将i柱上的j个盘按优先级最先挪至何处 首先考虑一定p[i][j]!=i 设初始为a柱,p[i][j-1]为b柱 考虑两种情况 ...
- bzoj1093 [ZJOI2007]最大半联通子图 缩点 + 拓扑序
最大半联通子图对应缩点后的$DAG$上的最长链 复杂度$O(n + m)$ #include <cstdio> #include <cstring> #include < ...
- hihocoder1322 树结构判定(161周)
hihocoder1322 : 树结构判定(161周) 题目链接 思路: 无向图中判断是不是一棵树. 并查集判断.判断是不是只有一个连通分量.并且该联通分量中没有环.没有环的判定很简单就是看边的数目和 ...
- hihocoder155周 任务分配
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, EN ), 计算最少需要多 ...
- linux基础命令学习 (七)压缩解压
一.tar tar主要用来压缩和解压文件 语法: tar [主选项+辅选项] 文件或者目录 主选项: c 创建新的档案文件.如果用户想备份一个目录或是一些文件,就要选择这个选项.相当于打包. x 从档 ...