栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

机器学习——K-近邻算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

机器学习——K-近邻算法

(一)K-近邻算法概述

1. 푘 近邻法是基本且简单的分类与回归方法。 푘 近邻法的基本做法是:对给定的训练实例点和输入实例点,首先确定输入实例点的 푘 个最近邻训练实例点,然后利用这 푘 个训练实例点的类的多数来预测输入实例点的类。

2. 푘 近邻模型对应于基于训练数据集对特征空间的一个划分。 푘 近邻法中,当训练集、距离度量、 푘 值及分类决策规则确定后,其结果唯一确定。

3. 푘 近邻法三要素:距离度量、 푘 值的选择和分类决策规则。常用的距离度量是欧氏距离及更一般的pL距离。 푘 值小时, 푘 近邻模型更复杂; 푘 值大时, 푘 近邻模型更简单。 푘 值的选择反映了对近似误差与估计误差之间的权衡,通常由交叉验证选择最优的 푘 。

常用的分类决策规则是多数表决,对应于经验风险最小化。

4. 푘 近邻法的实现需要考虑如何快速搜索k个最近邻点,并用分类决策规则确定最终点的归类。


(二)算法步骤
k-近邻算法步骤如下:

计算已知类别数据集中的点与当前点之间的距离;
按照距离递增次序排序;
选取与当前点距离最小的k个点;
确定前k个点所在类别的出现频率;
返回前k个点所出现频率最高的类别作为当前点的预测分类。
        使用K-近邻算法分类爱情片和动作片,图1-1显示了6部电影的打斗和接吻镜头数。我们可以使用KNN算法,对一部未看过的电影,确定它是爱情片还是动作片。

(三)代码实现 
# -*- coding: UTF-8 -*-
import collections
import numpy as np
def createDataSet():
	#四组二维特征
	group = np.array([[1,101],[5,89],[108,5],[115,8]])
	print(group)
	#四组特征的标签
	labels = ['爱情片','爱情片','动作片','动作片']
	return group, labels
def classify(inx, dataset, labels, k):
	# 计算距离  其实就是计算点一定之间的距离
	dist = np.sum((inx - dataset)**2, axis=1)**0.5

	#print("dist",dist)

	# k个最近的标签
	# dist.argsort 将x中的元素从小到大排列,提取其对应的index(索引)
	k_labels = [labels[index] for index in dist.argsort()[0 : k]]

	print('k_labels', k_labels)
	# 出现次数最多的标签即为最终类别
	#主要功能:可以支持方便、快速的计数,将元素数量统计,然后计数并返回一个字典,键为元素,值为元素个数。
	print('k_labels',collections.Counter(k_labels).most_common(1)[0][0])
	label = collections.Counter(k_labels).most_common(1)[0][0]
	return label

if __name__ == '__main__':
	#创建数据集
	group, labels = createDataSet()
	#测试集
	test = [55,20]
	#kNN分类
	#test_class = classify0(test, group, labels, 3)
	test_class = classify(test, group, labels, 3)
	#打印分类结果
	print(test_class)


(四)总结

优点:

1.k近邻算法理论简单,容易实现。

2.准确性高,对异常值和噪声有较高的容忍度

缺点:

1.k取值很小容易受异常点影响;k取值很小容易受数量波动影响

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290754.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号