1 k-近邻算法

  1. 创建文件:kNN.py和run.py
    编辑kNN.py
import numpy
import operator
import matplotlib.pyplot 

导入常用库
编辑run.py

import kNN
  1. 创建数据
    编辑kNN.py
    实现创建数据方法:DataSetForCreate
    在方法中返回分类数据和数据标签
def DataSetForCreate():
    dataset = numpy.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    labels = [1, 1, 2, 2]
    return dataset, labels
  1. 显示数据
    编辑kNN.py
    实现显示数据方法:ShowPlotForCreate
def ShowPlotForCreate():
    dataset, labels = DataSetForCreate()
    figure = matplotlib.pyplot.figure()
    subplot = figure.add_subplot(111)
    subplot.scatter(dataset[:, 0], dataset[:, 1], 15.0 * numpy.array(labels), 15.0 * numpy.array(labels))
    matplotlib.pyplot.show()

编辑run.py

kNN.ShowPlotForCreate()

打开命令行,输入:

python ./run.py

显示:
在这里插入图片描述
右上角的黑色点是值为1的label,左下角的黄点是值为2的label

  1. 实现分类功能
    编辑kNN.py
    实现分类方法:Classify
    先以伪代码的方式实现该方法:
def Classify(数据矩阵, 数据标签, 输入数据):
	1. 计算输入数据与数据矩阵中各项数据的距离
	2. 将距离排序,获取与输入数据距离最近的数据矩阵数据
	3. 通过距离最近的数据矩阵数据获取与之对应的数据标签
	4. 整理标签,了解哪个标签下有多少条数据与输入数据距离较近
	5. 返回与输入数据距离较近的最多数据矩阵数据的标签

再以真实代码实现该方法:

def Classify(dataset, labels, input, k):
    datasetSize = dataset.shape[0]
    # 生成输入矩阵
    inputMatrix = numpy.tile(input, (datasetSize, 1))
    # 输入矩阵和数据矩阵的矩阵差
    diffMatrix = inputMatrix - dataset
    # 矩阵差的乘积
    sqDiffMatrix = diffMatrix ** 2
    # 矩阵差的乘积和
    sqDistances = sqDiffMatrix.sum(axis=1)
    # 输入矩阵和数据矩阵的距离
    distances = sqDistances ** 0.5
    # 输入矩阵和数据矩阵的距离排序(获取距离从小到大排序后的序列列表)
    sortDistanceIndexes = distances.argsort()
    # 根据距离排序统计最近的k个标签的数量
    classifyCount = {}
    for i in range(k):
        index = sortDistanceIndexes[i]
        label = labels[index]
        # 标签数量统计中若不存在标签,则默认数量为0
        classifyCount[label] = classifyCount.get(label, 0) + 1
    # 将标签根据数量进行排序,并将数量作为键名标签作为键值获取字典
    sortClassifyCount = sorted(classifyCount.items(), key=operator.itemgetter(1), reverse=True)
    return sortClassifyCount[0][0]
  1. 测试分类方法
    编辑run.py
dataset, labels = kNN.DataSetForCreate()
print(kNN.Classify(dataset, labels, [0.1, 0.2], 3))
print(kNN.Classify(dataset, labels, [0.8, 0.9], 3))

运行run.py

python ./run.py

显示
在这里插入图片描述

  1. 输入并预测分类
    编辑kNN.py
    实现方法:ClassifyForCreateWithInput
def ClassifyForCreateWithInput():
    # 获取输入的数据
    x = float(input('input x: '))
    y = float(input('input y: '))
    # 将输入数据转成数组
    inputData = numpy.array([x, y])
    # 获取训练数据和标签
    dataset, labels = DataSetForCreate()
    # 获取d输入数据的预测标签
    label = Classify(dataset, labels, inputData, 3)
    print('input label should be: %d'%(label))

编辑run.py

kNN.ClassifyForCreateWithInput()

运行

python ./run.py

显示
在这里插入图片描述

代码:
https://download.csdn.net/download/suma110/10766027
吐槽一下,上传的资源竟然不允许设置成免费下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值