机器学习算法——kNN(k-近邻算法)
算法概述
通过测量不同特征值之间的距离进行 [分类]
- 优点:精度高、对异常值不敏感、无数据输入假定。
- 缺点:计算复杂度高、空间复杂度高。
- 适用数据范围: 数值型 和 标称型 。
算法流程
- 数据
- 样本数据(多维多行数据 + 标签)
- 预测数据(多维一行数据)
- 比较预测数据与样本数据的距离
- 欧氏距离
$\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-近邻算法)的更多相关文章
- 机器学习随笔01 - k近邻算法
算法名称: k近邻算法 (kNN: k-Nearest Neighbor) 问题提出: 根据已有对象的归类数据,给新对象(事物)归类. 核心思想: 将对象分解为特征,因为对象的特征决定了事对象的分类. ...
- 第四十六篇 入门机器学习——kNN - k近邻算法(k-Nearest Neighbors)
No.1. k-近邻算法的特点 No.2. 准备工作,导入类库,准备测试数据 No.3. 构建训练集 No.4. 简单查看一下训练数据集大概是什么样子,借助散点图 No.5. kNN算法的目的是,假如 ...
- 机器学习——KNN算法(k近邻算法)
一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...
- 基本分类方法——KNN(K近邻)算法
在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...
- 机器学习03:K近邻算法
本文来自同步博客. P.S. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...
- 02机器学习实战之K近邻算法
第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法. 一句话总结:近朱者赤近墨者黑! k ...
- 机器学习算法之K近邻算法
0x00 概述 K近邻算法是机器学习中非常重要的分类算法.可利用K近邻基于不同的特征提取方式来检测异常操作,比如使用K近邻检测Rootkit,使用K近邻检测webshell等. 0x01 原理 ...
- KNN K~近邻算法笔记
K~近邻算法是最简单的机器学习算法.工作原理就是:将新数据的每一个特征与样本集中数据相应的特征进行比較.然后算法提取样本集中特征最相似的数据的分类标签.一般来说.仅仅提取样本数据集中前K个最相似的数据 ...
- 机器学习实战笔记--k近邻算法
#encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...
- 机器学习 Python实践-K近邻算法
机器学习K近邻算法的实现主要是参考<机器学习实战>这本书. 一.K近邻(KNN)算法 K最近邻(k-Nearest Neighbour,KNN)分类算法,理解的思路是:如果一个样本在特征空 ...
随机推荐
- 关于ES6的let、const那些事儿
Babel 转码器 Babel是广泛使用的一个ES6转换器,将ES6代码转换成ES5代码,从而实现在老版本的浏览器执行. let和const命令 let所声明的变量只在let命令所在的代码块内是有效的 ...
- Sunday算法解决字符串匹配问题
概述 提起字符串匹配可能更多人会想到KMP算法,该算法时间复杂度为O(m+n),而且也是我们在学习数据结构过程中最早接触到的比较好的算法.但KMP算法需要在模式字符串有关联的情况下,也即模式字符串前后 ...
- 原生js实现jquery的siblings()
Element.prototype.siblings = function(callback){ var siblingElement = []; var parentAllElement = []; ...
- html基础:jquery的ajax获取form表单数据
jq是对dom进行的再次封装.是一个js库,极大简化了js使用 jquery库在js文件中,包含了所有jquery函数,引用:<script src="jquery-1.11.1.mi ...
- [LeetCode]剑指 Offer 52. 两个链表的第一个公共节点
题解 nodeA走一个链表A(A独有+公共),再走B独有的长度, nodeB走一个链表B(B独有+公共),再走A独有的长度. 结果:两者相遇点即为交点:若没有交点,两者都走到null,会返回null. ...
- python测试http、websocket接口
测试环境有个项目需要每天构造数据,来尽量保证测试环境和生产环境数据量保持一致.需要生成订单后商家接单完成,以下是代码,主要是用接口完成 创建订单 # coding=utf-8 import reque ...
- ES6 数组方法库
文章目录 多维数组降维成一维数组 reduce() 回调 flat() 多维数组降维成一维数组 reduce() var arr1 = [[0, 1], [2, 3], [4, 5]]; var ar ...
- PooledByteBuf内存池-------这个我现在不太懂
转载自:http://blog.csdn.net/youaremoon/article/details/47910971 http://blog.csdn.net/youar ...
- hystrix文档翻译之运维
hystrix不仅用作工程可靠性还可以用来运维. 这里将会分享一个拥有100+Hystrix命令,40+线程池,每天有100亿次线程请求,2000亿次信号量请求的系统是如何使用hystrix运维的.这 ...
- idea快捷键壁纸