Python实战之KNN完结

作者: 网络编程  发布:2019-09-03

Python实战之KNN实现

  用Python来落到实处K近邻分类算法(KNN)已经是三个老生常谈的标题,英特网也一度有成都百货上千素材,然而这里小编恐怕决定记录一下和好的学习心得。

  1、配置numpy库

  numpy库是Python用于矩阵运算的第三方库,大当先一半学生运动算都会借助这几个库来开展,关于numpy库的布局参见:Python配置第三方库Numpy和matplotlib的曲折之路,配置完毕后将numpy库全部导入到当前工程中。

  2、希图磨炼样本

  这里大致的构造五个点并配以对应标签作为KNN的练习样本:

# ====================创建训练样本====================
def createdataset():
    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    labels = ['A', 'B', 'C', 'D']
    return group, labels

  这里有多少个小细节,便是通过array()函数老构造并起头化numpy的矩阵对象时,要力保独有五个参数,由此在代码中须要将参数用中括号括起来,像上面这种调用情势是不合规的:

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

  3、创制分类函数

  K近邻算法在分拣时相似是依据欧氏距离举行分拣的,因而必要将输入的数额与陶冶多少在一一维度上相减再平方求和,再开药方,如下:

# ====================欧氏距离分类====================
def classify(Inx, Dataset, labels, k):
    DataSetSize = Dataset.shape[0]  # 获取数据的行数,shape[1]位列数
    diffmat = tile(Inx, (DataSetSize, 1)) - Dataset
    SqDiffMat = diffmat**2
    SqDistances = SqDiffMat.sum(axis=1)
    Distance = SqDistances**0.5
    SortedDistanceIndicies = Distance.argsort()
    ClassCount = {}

  这里tile()函数是numpy的矩阵扩张函数,譬喻说那么些例子中磨炼样本有三个二维坐标点,对于输入样本(贰个二维坐标点),供给将其先扩张为一个4行1列的矩阵,然后在开展矩阵减法,在平法求和,再开平方算距离。计算完离开之后,调用矩阵对象的排序成员函数argsort()对相差进行升序排序。在这里介绍贰个Pycharm查看源码生命的小才能:参预在编辑这段程序的时候我们并不分明argsort()是或不是为array对象的成员函数,我们选中这些函数然后 右键 -> Go to -> Declaration,那样就能够跳转到argsort()函数的声北宋码片中,通过查阅代码的隶属关系能够认同array类中的确含有那么些成员函数,调用未有毛病:

图片 1

  对相差排序之后,接下去就依据前K个最小距离值所对应的价签来推断当前样本属于哪一类:

    for i in range(k):
        VoteiLabel = labels[SortedDistanceIndicies[i]]
        ClassCount[VoteiLabel] = ClassCount.get(VoteiLabel, 0) + 1
    SortedClassCount = sorted(ClassCount.items(), key = operator.itemgetter(1), reverse = True)

Python实战之KNN实现,python实战knn

  这里有四个小难题正是在Python第22中学收获字典成分运用的是dict.iteritems()成员函数,而在Python3中改为dict.items()函数。“key

operator.itemgetter(1)”的意味是钦点函数针对字典中第二维成分实行排序,注意这里须要在头里导入符号库operator。这里是通过记录前K个距离最下值中每类标签出现的次数来判决测验样本的着落。

  4、测试

  这里给出完整的KNN测量试验代码:

# coding: utf-8
from numpy import *
import operator


# ====================创建训练样本====================
def createdataset():
    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    labels = ['A', 'B', 'C', 'D']
    return group, labels

# ====================欧氏距离分类====================
def classify(Inx, Dataset, labels, k):
    DataSetSize = Dataset.shape[0]  # 获取数据的行数,shape[1]位列数
    diffmat = tile(Inx, (DataSetSize, 1)) - Dataset
    SqDiffMat = diffmat**2
    SqDistances = SqDiffMat.sum(axis=1)
    Distance = SqDistances**0.5
    SortedDistanceIndicies = Distance.argsort()
    ClassCount = {}
    for i in range(k):
        VoteiLabel = labels[SortedDistanceIndicies[i]]
        ClassCount[VoteiLabel] = ClassCount.get(VoteiLabel, 0) + 1
    SortedClassCount = sorted(ClassCount.items(), key = operator.itemgetter(1), reverse = True)
    return SortedClassCount[0][0]

Groups, Labels = createdataset()
Result = classify([0, 0], Groups, Labels, 1)
print(Result)

  运营代码,程序答应结果“C”。这里须要提一点的正是对于单锻炼样本(每类独有三个陶冶样本)的归类难题,KNN的K值应该设定为1。

用Python来促成K近邻分类算法(KNN)已经是三个老调重弹的标题,网络也已经有无数素材,可是这里小编要么决定记录一下...

Python实战之KNN实现

 

  用Python来兑现K近邻分类算法(KNN)已经是二个老生常谈的难点,互连网也早就有过多资料,可是这里本身或然决定记录一下和谐的学习心得。

  1、配置numpy库

  numpy库是Python用于矩阵运算的第三方库,大许多数学生运动算都会依靠这一个库来进行,关于numpy库的安插参见:Python配置第三方库Numpy和matplotlib的盘曲之路,配置达成后将numpy库全体导入到当前工程中。

  2、计划练习样本

  这里大致的布局四个点并配以对应标签作为KNN的陶冶样本:

# ====================创建训练样本====================
def createdataset():
    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    labels = ['A', 'B', 'C', 'D']
    return group, labels

  这里有一个小细节,正是经过array()函数老构造并起首化numpy的矩阵对象时,要确认保障只有八个参数,由此在代码中须求将参数用中括号括起来,像下边这种调用方式是违法的:

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

  3、创造分类函数

  K近邻算法在分拣时一般是依靠欧氏距离举办分拣的,因而须求将输入的数量与练习多少在相继维度上相减再平方求和,再开药方,如下:

# ====================欧氏距离分类====================
def classify(Inx, Dataset, labels, k):
    DataSetSize = Dataset.shape[0]  # 获取数据的行数,shape[1]位列数
    diffmat = tile(Inx, (DataSetSize, 1)) - Dataset
    SqDiffMat = diffmat**2
    SqDistances = SqDiffMat.sum(axis=1)
    Distance = SqDistances**0.5
    SortedDistanceIndicies = Distance.argsort()
    ClassCount = {}

  这里tile()函数是numpy的矩阵扩张函数,举个例子说这一个例子中磨练样本有七个二维坐标点,对于输入样本(一个二维坐标点),须要将其先扩展为一个4行1列的矩阵,然后在扩充矩阵减法,在平法求和,再开平方算距离。计算完离开之后,调用矩阵对象的排序成员函数argsort()对相差举行升序排序。在此地介绍一个Pycharm查看源码生命的小工夫:参加在编写制定这段程序的时候我们并不明确argsort()是不是为array对象的分子函数,咱们选中那些函数然后 右键 -> Go to -> Declaration,那样就会跳转到argsort()函数的宣示代码片中,通过查阅代码的依赖关系能够承认array类中真的含有这些成员函数,调用未有毛病:

图片 2

  对相差排序之后,接下去就依照前K个最小距离值所对应的价签来决断当前样本属于哪类:

    for i in range(k):
        VoteiLabel = labels[SortedDistanceIndicies[i]]
        ClassCount[VoteiLabel] = ClassCount.get(VoteiLabel, 0) + 1
    SortedClassCount = sorted(ClassCount.items(), key = operator.itemgetter(1), reverse = True)

  这里有叁个小题目便是在Python第22中学赢得字典元素选用的是dict.iteritems()成员函数,而在Python3中改为dict.items()函数。“key

operator.itemgetter(1)”的意思是钦定函数针对字典中第二维成分实行排序,注意这里必要在事开头入符号库operator。这里是由此记录前K个距离最下值中每类标签出现的次数来判决测量检验样本的名下。

  4、测试

  这里给出完整的KNN测量检验代码:

# coding: utf-8
from numpy import *
import operator


# ====================创建训练样本====================
def createdataset():
    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    labels = ['A', 'B', 'C', 'D']
    return group, labels

# ====================欧氏距离分类====================
def classify(Inx, Dataset, labels, k):
    DataSetSize = Dataset.shape[0]  # 获取数据的行数,shape[1]位列数
    diffmat = tile(Inx, (DataSetSize, 1)) - Dataset
    SqDiffMat = diffmat**2
    SqDistances = SqDiffMat.sum(axis=1)
    Distance = SqDistances**0.5
    SortedDistanceIndicies = Distance.argsort()
    ClassCount = {}
    for i in range(k):
        VoteiLabel = labels[SortedDistanceIndicies[i]]
        ClassCount[VoteiLabel] = ClassCount.get(VoteiLabel, 0) + 1
    SortedClassCount = sorted(ClassCount.items(), key = operator.itemgetter(1), reverse = True)
    return SortedClassCount[0][0]

Groups, Labels = createdataset()
Result = classify([0, 0], Groups, Labels, 1)
print(Result)

  运转代码,程序答应结果“C”。这里必要提一点的就是对此单练习样本(每类独有二个磨炼样本)的归类难点,KNN的K值应该设定为1。

QQ群290551701 聚焦相当多互连网精英,本领首席试行官,架构师,项目CEO!开源手艺切磋,招待业爱妻士,大拿及新手有志于从事IT行当职员步向!

Python实战之KNN完结用Python来促成K近邻分类算法(KNN)已经是叁个沉滓泛起的主题材料,网络也曾经有过多资料...

本文由王中王开奖结果发布于网络编程,转载请注明出处:Python实战之KNN完结

关键词:

上一篇:Python实战之KNN完结
下一篇:没有了