机器学习--k-近邻(kNN)算法

一、基本原理

存在一个样本数据集合(也称训练样本集),并且样本集中每个数据都存在标签。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。

我们一般只选择样本集中前k(k通常是不大于20的整数)个最相似的数据,最后选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

二、算法流程

1)计算已知类别数据集中的点与当前点之间的距离;

2)按照距离递增次序排序;

3)选取与当前点距离最小的k个点;

4)确定前k个点所在类别的出现频率;

5)返回前k个点出现频率最高的类别作为当前点的预测分类。

三、算法的特点

优点:精度高、对异常值不敏感、无数据输入假定。

缺点:计算复杂度高、空间复杂度高。

适用数据范围:数值型和标称型。

四、python代码实现

1、创建数据集

def create_data_set():

group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])

labels = [‘A‘, ‘A‘, ‘B‘, ‘B‘]

return group, labels

2、实施KNN算法

##############################

#功能:将每组数据划分到某个类中

#输入变量:inx, data_set,labels,k

# 分类的向量,样本数据,标签,k个近邻的样本

#输出变量:sorted_class_count[0][0] 选择最近的类别标签

##############################

def classify0(inx, data_set, labels, k):

data_set_size = data_set.shape[0]  # 获得数组的行数

# 利用tile(inx, (data_set_size, 1)),在原来的基础上再构造data_set_size*1的inx

# 每行数据相当于某个矢量点的坐标

# 对每行数据进行求和,得到一个data_set_size*1的矩阵

# 最后计算欧式距离

diff_mat = tile(inx, (data_set_size, 1))-data_set

sq_diff_mat = diff_mat**2

sq_distances = sq_diff_mat.sum(axis=1)

distances = sq_distances**0.5

# argsort函数返回的是数组值从小到大的索引值

sorted_dist_indicies = distances.argsort()

class_count = {}

for i in xrange(k):

vote_label = labels[sorted_dist_indicies[i]]

# get相当于一条if...else...语句

# 如果参数vote_label不在字典中则返回参数0,如果vote_label在字典中则返回vote_label对应的value值

class_count[vote_label] = class_count.get(vote_label, 0) + 1

# items以列表方式返回字典中的键值对,iteritems以迭代器对象返回键值对,而键值对以元组方式存储,即这种方式[(), ()]

# operator.itemgetter(0)获取对象的第0个域的值,即返回的是key值

# operator.itemgetter(1)获取对象的第1个域的值,即返回的是value值

# operator.itemgetter定义了一个函数,通过该函数作用到对象上才能获取值

# reverse=True是按降序排序

sorted_class_count = sorted(class_count.iteritems(), key=operator.itemgetter(1), reverse=True)

return sorted_class_count[0][0]

3、代码测试

def main():

group, labels = create_data_set()

sorted_class_labels = classify0([0, 0], group, labels, 3)

print ‘sorted_class_labels=‘, sorted_class_labels

if __name__ == ‘__main__‘:

main()

时间: 2024-10-14 23:41:25

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

机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离近期的邻居进行分类推断(投票法)或者回归.假设K=1.那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习.数据都有明白的label(分类针对离散分布,回归针对连续分布),依据机器学习产

机器学习经典算法详解及Python实现--K近邻(KNN)算法

(一)KNN依然是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习所有算法中理论最简单,最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离最近的邻居进行分类判断(投票法)或者回归.如果K=1,那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习,数据都有明确的label(分类针对离散分布,回归针对连续分布),根据机器学习产

【学习笔记】K近邻归类算法

# -*- coding:utf-8 -*- __author__ = 'Ghostviper' """ K近邻归类算法 """ from numpy import * import operator def createDataset():     group = array([         [1.0, 1.1],         [1.0, 1.0],         [0, 0],         [0, 0.1]     ])    

K近邻分类算法

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Thu Jun 28 17:16:19 2018 4 5 @author: zhen 6 """ 7 from sklearn.model_selection import train_test_split 8 import mglearn 9 import matplotlib.pyplot as plt 10 x, y = mglearn.dataset

机器学习之KNN(k近邻)算法

1.算法介绍k近邻算法是学习机器学习的入门算法,可实现分类与回归,属于监督学习的一种.算法的工作原理是:输入一个训练数据集,训练数据集包括特征空间的点和点的类别,可以是二分类或是多分类.预测时,输入没有类别的点,找到k个与该点距离最接近的点,使用多数表决的方法,得出最后的预测分类. 2.算法优缺点优点:没有高深的数学思想,容易理解,精度高,对异常值不敏感,无数据输入假定:缺点:计算复杂度高,空间复杂度高:理解:因为knn算法是寻找与目标点接近的点,在计算时,异常值与目标点的"距离"会较

机器学习--K近邻 (KNN)算法的原理及优缺点

一.KNN算法原理 K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法. 它的基本思想是: 在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类. KNN算法的描述: (1)计算测试数据与各个训练数据之间的距离: (2)按照距离的递增关系进行排序: (3)选取距离最小的K个点: (4)确定前K个点所在类别的出现频率   (5

TensorFlow实现knn(k近邻)算法

首先先介绍一下knn的基本原理: KNN是通过计算不同特征值之间的距离进行分类. 整体的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. K通常是不大于20的整数.KNN算法中,所选择的邻居都是已经正确分类的对象.该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别. KNN算法要解决的核心问题是K值选择,它会直接影响分类结果. 如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是

k近邻(KNN)复习总结

摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合内容: 1.算法概述 K近邻算法是一种基本分类和回归方法:分类时,根据其K个最近邻的训练实例的类别,通过多数表决等方式进行预测:k近邻法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的"模型".(Cover和Hart 在1968)--参考自<统计学习方法> 2.算法推导 2.1 kNN三要素 k值的选择:当k值较小时,预测结果对近邻的实例点非常敏感,容易发生过拟

机器学习实战之kNN算法

机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少: (1)python3.52,64位,这是我用的python版本 (2)numpy 1.11.3,64位,这是python的科学计算包,是python的一个矩阵类型,包含数组和矩阵,提供了大量的矩阵处理函数,使运算更加容易,执行更加迅速. (3)matplotlib 1.5.3,64位,在下载该工具时,一定要对应好python的版本,处理器版本,matplotlib可以认为是python