算法概述

通过测量不同特征值之间的距离进行 [分类]

  • 优点:精度高、对异常值不敏感、无数据输入假定。
  • 缺点:计算复杂度高、空间复杂度高。
  • 适用数据范围: 数值型标称型

算法流程

  • 数据

    • 样本数据(多维多行数据 + 标签)
    • 预测数据(多维一行数据)

  • 比较预测数据与样本数据的距离

    • 欧氏距离

      $\operatorname{dist}(X, Y)=\sqrt{\sum_{i=1}{n}\left(x_{i}-y_{i}\right){2}}$
  • 将样本数据按照距离从小到大排序
  • 选取前 k 个样本数据,取出现次数最多的样本标签作为预测数据的分类标签

代码示例

import collections
import numpy as np def culEuDistance(x1, x2):
"""
计算欧氏距离
"""
return ((x1 - x2)**2).sum()**0.5 def knn(X, dataSet, labels, k):
"""
比较预测数据与历史数据集的欧氏距离,选距离最小的k个历史数据中最多的分类。
:param X: 需要预测的数据特征
:param dataSet: 历史数据的数据特征
:param labels: 与dataSet对应的标签
:param k: 前k个
:return: label标签
"""
if isinstance(dataSet, list):
dataSet = np.array(dataSet)
rowNum = dataSet.shape[0]
X = np.tile(X,(rowNum,1))
distances = np.empty(rowNum)
for row in range(rowNum):
distances[row] = culEuDistance(X[row], dataSet[row])
sortedIdx = distances.argsort()
candidates = []
for i in range(k):
candidates.append(labels[sortedIdx[i]])
return collections.Counter(candidates).most_common(1)[0][0] if __name__ == "__main__":
# print(culEuDistance(np.array([3,4]), np.array([2,1])))
X = [101,20]
dataSet = [[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]]
labels = ['爱情片','爱情片','爱情片','动作片','动作片','动作片']
print(knn(X,dataSet,labels,k=3)) # 动作片

机器学习算法——kNN(k-近邻算法)的更多相关文章

  1. 机器学习随笔01 - k近邻算法

    算法名称: k近邻算法 (kNN: k-Nearest Neighbor) 问题提出: 根据已有对象的归类数据,给新对象(事物)归类. 核心思想: 将对象分解为特征,因为对象的特征决定了事对象的分类. ...

  2. 第四十六篇 入门机器学习——kNN - k近邻算法(k-Nearest Neighbors)

    No.1. k-近邻算法的特点 No.2. 准备工作,导入类库,准备测试数据 No.3. 构建训练集 No.4. 简单查看一下训练数据集大概是什么样子,借助散点图 No.5. kNN算法的目的是,假如 ...

  3. 机器学习——KNN算法(k近邻算法)

    一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...

  4. 基本分类方法——KNN(K近邻)算法

    在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...

  5. 机器学习03:K近邻算法

    本文来自同步博客. P.S. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...

  6. 02机器学习实战之K近邻算法

    第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法. 一句话总结:近朱者赤近墨者黑! k ...

  7. 机器学习算法之K近邻算法

    0x00 概述   K近邻算法是机器学习中非常重要的分类算法.可利用K近邻基于不同的特征提取方式来检测异常操作,比如使用K近邻检测Rootkit,使用K近邻检测webshell等. 0x01 原理   ...

  8. KNN K~近邻算法笔记

    K~近邻算法是最简单的机器学习算法.工作原理就是:将新数据的每一个特征与样本集中数据相应的特征进行比較.然后算法提取样本集中特征最相似的数据的分类标签.一般来说.仅仅提取样本数据集中前K个最相似的数据 ...

  9. 机器学习实战笔记--k近邻算法

    #encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...

  10. 机器学习 Python实践-K近邻算法

    机器学习K近邻算法的实现主要是参考<机器学习实战>这本书. 一.K近邻(KNN)算法 K最近邻(k-Nearest Neighbour,KNN)分类算法,理解的思路是:如果一个样本在特征空 ...

随机推荐

  1. 关于ES6的let、const那些事儿

    Babel 转码器 Babel是广泛使用的一个ES6转换器,将ES6代码转换成ES5代码,从而实现在老版本的浏览器执行. let和const命令 let所声明的变量只在let命令所在的代码块内是有效的 ...

  2. Sunday算法解决字符串匹配问题

    概述 提起字符串匹配可能更多人会想到KMP算法,该算法时间复杂度为O(m+n),而且也是我们在学习数据结构过程中最早接触到的比较好的算法.但KMP算法需要在模式字符串有关联的情况下,也即模式字符串前后 ...

  3. 原生js实现jquery的siblings()

    Element.prototype.siblings = function(callback){ var siblingElement = []; var parentAllElement = []; ...

  4. html基础:jquery的ajax获取form表单数据

    jq是对dom进行的再次封装.是一个js库,极大简化了js使用 jquery库在js文件中,包含了所有jquery函数,引用:<script src="jquery-1.11.1.mi ...

  5. [LeetCode]剑指 Offer 52. 两个链表的第一个公共节点

    题解 nodeA走一个链表A(A独有+公共),再走B独有的长度, nodeB走一个链表B(B独有+公共),再走A独有的长度. 结果:两者相遇点即为交点:若没有交点,两者都走到null,会返回null. ...

  6. python测试http、websocket接口

    测试环境有个项目需要每天构造数据,来尽量保证测试环境和生产环境数据量保持一致.需要生成订单后商家接单完成,以下是代码,主要是用接口完成 创建订单 # coding=utf-8 import reque ...

  7. ES6 数组方法库

    文章目录 多维数组降维成一维数组 reduce() 回调 flat() 多维数组降维成一维数组 reduce() var arr1 = [[0, 1], [2, 3], [4, 5]]; var ar ...

  8. PooledByteBuf内存池-------这个我现在不太懂

    转载自:http://blog.csdn.net/youaremoon/article/details/47910971              http://blog.csdn.net/youar ...

  9. hystrix文档翻译之运维

    hystrix不仅用作工程可靠性还可以用来运维. 这里将会分享一个拥有100+Hystrix命令,40+线程池,每天有100亿次线程请求,2000亿次信号量请求的系统是如何使用hystrix运维的.这 ...

  10. idea快捷键壁纸