机器学习之分类算法一:K-近邻算法

一、K-近邻算法

K-近邻算法是一种分类算法,分类算法是监督学习算法,监督学习算法和无监督学习算法的最大区别就是监督学习需要告诉机器一些正确的事物,也就是训练数据集,而无监督学习算法则不需要事先准备这些,比如聚类算法。

所谓的分类,就是要求数据都是离散型(标称型)的,且是数值型的。一下子说这么多概念术语很绕弯哈,数据从大的分类来说分为离散型(标称型)和连续型。离散的就是数据只能在有限的数据集中(比如:是/否,1/2/3,a/b/c,红/白/黑),连续型的属于无限集(比如:全体实数集),对于离散型的适合采用分类器方式也就是分类算法解决,而连续型适合使用线性回归算法解决,但这也不是绝对的。

K-近邻算法的优点:精度高、对异常值不敏感(个别噪音数据对结果的影响不是很大);缺点是:计算复杂度高、空间复杂度高(当数据维度变大,矩阵求距离运算相当耗时耗资源);适用数据范围:数值型和标称型(求距离需要要求数据是数值类型)。

我们就用教材中的例子简单说一下该算法的工作原理,假设我有六部电影A(3,104,爱情片)、B(2,100,爱情片)、C(1,81,爱情片)、D(101,10,动作片)、E(99,5,动作片)、F(98,2.动作片),其中第一个数字代表电影中打斗镜头次数、第二个数字代表亲吻镜头次数,那么现在有一个新电影G(18,90,?),它属于爱情片还是动作片呢?其实我们一眼就能判断出来属于爱情片!理由呢?

K-近邻算法采用的是求距离方式。A(x1,y1,z1)、B(x2,y2,z2),则d=√(x2-x1)2+(y2-y1)2+(z2-z1)2

计算结果为(20.5,18.7,19.2,115.3,117.4,118.9),按距离由小到大排序,所谓的K-近邻就是选取最相近的K个,比如K=3,也就是(18.7,19.2,20.5)对应的电影是B、C、A,他们中绝大多数都是爱情片(这里其实全部都是爱情片)。所以我们认为G就是爱情片。

这就是K-近邻算法的工作原理。

下面再把书中给出的一个示例结合代码给大家说一下怎么去编程。

假设我在坐标系中有四个点,分别是(1.0,1.1)、(1.0,1.0)、(0,0)、(0,0.1),这四个点分别是属于A、A、B、B类别。我们需要预测(0,0)这个点属于什么类别,实际上(0,0)已经在已知的训练数据集中,这没关系,我们仅仅是做个小测试而已。

给出的代码与教材中代码一致,不过初学者很难看懂每一步都是什么含义,所以我把一些注释加了上去。具体的运行流程可以参考教材中的步骤。当最终结果返回了“B”,证明我们是对的。

时间: 2024-12-29 18:41:07

机器学习之分类算法一:K-近邻算法的相关文章

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

在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门算法. 参考内容如下:http://www.cnblogs.com/charlesblc/p/6193867.html 1.kNN算法又称为k近邻分类(k-nearest neighbor classification)算法. 最简单平凡的分类器也许是那种死记硬背式的分类器,记住所有的训练数据,对于

web安全之机器学习入门——3.1 KNN/k近邻算法

目录 sklearn.neighbors.NearestNeighbors 参数/方法 基础用法 用于监督学习 检测异常操作(一) 检测异常操作(二) 检测rootkit 检测webshell sklearn.neighbors.NearestNeighbors 参数: 方法: 基础用法 print(__doc__) from sklearn.neighbors import NearestNeighbors import numpy as np X = np.array([[-1, -1],

《机器学习实战》学习笔记——k近邻算法

1.numpy中一些函数的用法学习 shape()用法: shape : tuple of ints The elements of the shape tuple give the lengths of the corresponding array dimensions.. shape返回一个元组,依次为各维度的长度.shape[0]:第一维长度,shape[1]:第二维长度. tile()用法: numpy.tile(A, reps) Construct an array by repea

机器学习实战笔记-K近邻算法1(分类动作片与爱情片)

K近邻算法采用测量不同特征值之间的距离方法进行分类 K近邻算法特点: 优点:精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用数据范围:数值型和标称型. K近邻算法原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系.输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的 特征进行比较,然后算法提取样本集中特征最相似数据(最近 邻)的分类标签.一般来说,我们只选择样本数据集中前k个最

机器学习(四) 机器学习(四) 分类算法--K近邻算法 KNN (下)

六.网格搜索与 K 邻近算法中更多的超参数 七.数据归一化 Feature Scaling 解决方案:将所有的数据映射到同一尺度 八.scikit-learn 中的 Scaler preprocessing.py import numpy as np class StandardScaler: def __init__(self): self.mean_ = None self.scale_ = None def fit(self, X): """根据训练数据集X获得数据的均

机器学习实战笔记-K近邻算法2(改进约会网站的配对效果)

案例二.:使用K-近邻算法改进约会网站的配对效果 案例分析: 海伦收集的数据集有三类特征,分别是每年获得的飞行常客里程数.玩视频游戏所耗时间百分比. 每周消费的冰淇淋公升数.我们需要将新数据的每个新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签.一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数.最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类. 流程:在约会网站上使用K

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

1 #encoding:utf-8 2 from numpy import * 3 import operator 4 import matplotlib 5 import matplotlib.pyplot as plt 6 7 from os import listdir 8 9 def makePhoto(returnMat,classLabelVector): #创建散点图 10 fig = plt.figure() 11 ax = fig.add_subplot(111) #例如参数为

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

算法名称: k近邻算法 (kNN: k-Nearest Neighbor) 问题提出: 根据已有对象的归类数据,给新对象(事物)归类. 核心思想: 将对象分解为特征,因为对象的特征决定了事对象的分类. 度量每个特征的程度,将其数字化. 所有特征值构成元组,作为该对象的坐标. 计算待检测对象和所有已知对象的距离,选择距离最接近的k个已知对象 (k近邻中的k来源于此). 这k个对象中出现次数最多的分类就是待检测对象的分类. 重要前提: 需要有一批已经正确归类了的对象存在.也就是通常说的训练数据. 重

从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经网络:3.编程艺术第28章.你看到,blog内的文章与你于别处所见的任何都不同.于是,等啊等,等一台电脑,只好等待..”.得益于田,借了我一台电脑(借他电脑的时候,我连表示感谢,他说“能找到工作全靠你的博客,这点儿小忙还说,不地道”,有的时候,稍许感受到受人信任也是一种压力,愿我不辜负大家对我的信任)