K-NN近邻算法-Python实现

本文介绍了K-近邻算法的基本流程与实现方法,并通过一个简单的示例详细展示了如何使用Python进行K-近邻分类。从数据准备到算法实现,再到结果测试,全面解析了K-近邻算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

K-近邻算法的一般流程:
     (1)收集数据:比如问卷法,观察法等等。
     (2)准备数据:距离计算所需的数值,最好是结构化的数据格式。
     (3)分析数据:聚类分析、因子分析、相关分析、对应分析、回归分析、方差分析等。
     (4)训练算法:在k-近邻中一般不用。
     (5)测试算法:计算错误率。
     (6)使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k-近邻算法判定输入数据
          分别属于哪个分类,最后应用对计算出的分类执行后续的处理。
我们来实施kNN算法,为每组数据分类,先给出其实现思路如下:
对未知类别属性的数据集中的每个点依次执行以下操作:
(1)计算已知类别数据集中的每个点与当前点之间的距离:
(2)按照距离递增次序排序;
(3)选取与当前距离最小的k个点;
(4)确定前k个点所在类别的出现频率;
(5)返回前k个点出现频率最高的类别作为当前点的预测分类。

实现代码如下:

# !/usr/bin/env python
# -*-coding:utf-8-*-
# Author:TG
# Python实现K-NN算法

from numpy import *
import operator

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

group, labels = createDataSet()

# 用Pyton实现K-NN(邻近)算法
def classify(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    print dataSetSize  # 输出DataSetSize
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet
    print tile(inX, (dataSetSize, 1))
    print "================================="
    print diffMat
    sqDiffMat = diffMat ** 2
    sqDistances = sqDiffMat.sum(axis=1)
    distance = sqDistances ** 0.5
    # ==================================
    sortedDisIndicies = distance.argsort()
    print sortedDisIndicies
    classCount = {}
    print "================================="
    for i in range(k):
        votellable = labels[sortedDisIndicies[i]]
        print i
        print sortedDisIndicies[i], votellable
        classCount[votellable] = classCount.get(votellable, 0) + 1
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
    print (sortedClassCount)
    return sortedClassCount[0][0]

# 调用测试数据
classify([0, 0.2], group, labels, 3)



                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值