k-近邻算法
2017-05-25 16:17
239 查看
算法伪代码如下:
对未知类别属性的数据集中的每个点依次执行以下操作
(1)计算已知类别数据集中的点与当前点之间的距离;
(2)按照距离递增次序排序;
(3)选取与当前点距离最小的走个点;
(4)确定前灸个点所在类别的出现频率;
(5)返回前k个点出现频率最高的类别作为当前点的预测分类。
# -*- coding: utf-8 -*-# 这样也行
# 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','A','B','B']
return group,labels
#k近邻算法
def classify0(inx,dataset,labels,k):
datasetsize=dataset.shape[0] #获取矩阵的行数
#距离计算 以下完成欧氏距离计算 d = 」(xA0 - xB0)2 + (xA{- xBt )2
# tile用于将数组第一维度扩展4倍,第二维度扩展一倍,再减去dataset
diffmat=tile(inx,(datasetsize,1))-dataset
#对差值矩阵进行平方运算
sqdiffmat=diffmat**2
sqdistance=sqdiffmat.sum(axis=1) #axis=1表示按行求和 ,axis=0表示按列求和
#进行开根号处理
distances=sqdistance**0.5 #欧式距离计算到此结束
print distances
sorteddistindiciles=argsort(distances) #argsort函数返回的是数组值从小到大的索引值
print sorteddistindiciles
classcount={}
#选择最小的k个点
for i in range(k):
voteilabel=labels[sorteddistindiciles[i]] #获取对应的标签
classcount[voteilabel]=classcount.get(voteilabel,0)+1 #d对对应的标签进行计数累加
#排序
sortedclasscount=sorted(classcount.iteritems(),
key=operator.itemgetter(1),reverse=True) #dictionary.iteritems()将classcount迭代成数组
#将字典分解为元组列表,然后使用程序第二行导入运算符模块的itemgetter ,按照第二个元素的次序对元组进行排序©。
#排序为逆序,即按照从最大到最小次序排序,最后返回发生频率最高的元素标签
return sortedclasscount[0][0]
group ,labels=createDataSet()
print classify0([0.5,0],group,labels,3)
4000
相关文章推荐
- k-近邻算法(k-nn)
- K近邻(KNN)算法
- 手写识别系统(k-近邻算法)
- k-近邻算法
- 【机器学习实战】第2章 k-近邻算法(kNN)
- 【ML学习笔记】13:k-近邻算法做数值特征分类
- 初识机器学习——k-近邻算法(1)
- k-近邻算法(kNN)
- 机器学习(一)——K-近邻(KNN)算法
- 《机器学习实战》之K-近邻算法
- k-近邻算法
- 机器学习 K-近邻算法(一)
- K-近邻算法实现简单filmClassify
- 【机器学习】k-近邻算法(kNN) 学习笔记
- python实现的 K-近邻算法代码详细解释
- 机器学习2--(k-近邻算法)
- K-近邻算法-代码实现
- 【读书笔记】机器学习实战p19-2.1.2(k-近邻算法)
- 机器学习实战笔记之k-近邻算法
- 机器学习--k-近邻(kNN)算法案例