前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习(三)——k-近邻算法基础

机器学习(三)——k-近邻算法基础

作者头像
企鹅号小编
发布2018-01-19 16:28:03
5490
发布2018-01-19 16:28:03
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

机器学习(三)

——k-近邻算法基础

(原创内容,转载请注明来源,谢谢)

一、概述

k近邻算法(kNN),是监督学习的一种,主要用于分类,通过测量不同特征值之间的举例进行分类。

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

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

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

二、工作原理

1、原理

存在一个训练样本集,其中每个数据都存在标签,即可以知道数据的每个特征和其对于的分类结果。

现输入没有标签的数据,将新数据的每个特征值和样本集的数据对应特征进行比较,计算出距离最近的前k个数据(k近邻的k的出处)。比较这k个数据,将分类结果出现次数最多的结果,作为最终的结果。k通常不大于20。

2、距离计算公式

假设数据A有n个特征(x11,x12,x13…x1n),数据B的n个特征值为(x21,x22,x23…x2n),则AB两点的距离为

3、knn举例

假设数据有两个特征,数据集3个数,A(1,1,1),特征为x;B(0,1,0),特征为y;C(0,0,1),特征为y。则新加入的一个点D(1,1,0),要确定其特征,则需要计算AD、BD、CD三者的距离,取前k个值(由于这里数据太少,就取第一个值),即为D的特征。

三、kNN实施过程

对于未知类别属性,加入数据集,每次都需要执行以下操作:

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

2、按距离的次序从小到大排序。

3、取排序结果的前k个值。

4、确定前k个值出现的频率。

5、返回频率最高的分类,即为分类结果。

四、代码实现(Python)

1、实现部分(文件名kNN.py)

1)引入python的numpy处理库以及operator库

from numpy import *

import operator

2)#训练数据集,特征2个,并且有对应的分类结果

def createDataSet():

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

labels = ['A', 'A', 'B', 'B']

return group, labels

3)训练和测试函数,输入待分类数据、训练集、对应分类结果、k值

def classify0(inX, dataSet, labels, k):

#计算距离

dataSetSize = dataSet.shape[0]

diffMat = tile(inX, (dataSetSize, 1)) - dataSet

sqDiffMat = diffMat**2

sqDistances = sqDiffMat.sum(axis=1)

distances = sqDistances**0.5

#排序

sortedDistIndicies = distances.argsort()

classCount = {}

#取排序结果前k个,确认分类结果出现最多的数据

for i in range(k):

voteIlabel = labels[sortedDistIndicies[i]]

classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1

sortedClassCount= sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)

returnsortedClassCount[0][0]

4)测试

def testsimpleknn():

group,labels = createDataSet()

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

return result

2、执行

在linux系统,进入python,输入import kNN,kNN.testsimpleknn(),结果是B,表示[0,0]数据会被分到特征值B。

——written by linhxx 2017.12.28

本文来自企鹅号 - PHP思想家媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - PHP思想家媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档