您的位置:首页 > 编程语言 > Python开发

K-NN近邻算法-Python实现

2018-02-08 11:31 453 查看
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)



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: