机器学习的K—近邻算法

本文内容
1.k—近邻算法
2.从文本文件中解析或者导入数据
3.归一化数值

1.1 k-近邻算法的概述
优点:精确度高,对异常值不敏感,无数据输入的假定
缺点:计算复杂度高,空间复杂度高
适用数据范围:数值型和标称型

工作原理:存在一个样本数据集也称是训练样本集。样本集中每个数据都存在一个标签,即我们知道样本集中的数据和所属分类对用的关系。输入没有标签的新数据后,将新数据的每个特征和样本集的中的特征进行比较,然后算法提取样本集中特征最相似数据的(最近邻的)分类标签。一般来说,我们只选择样本集中前k个最相似的数据,此k就是k近邻算法的k的出处,一般k的值为不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

1.2构建简单地k近邻的分类器
from numpy import * #科学计算包模块
import operator #运算符模块

def classify0(inX,dataSet,labels,k):
dataSetSize=dataSet.shape[0] #shape是numpy中查看数组的维数,shape[0]查看第二维的长度
diffMat=tile(inX,(dataSetSize,1))-dataSet #使构造的inX形式和dataSetSize一样,然后采用欧式距离公式计算待测数据和测试数据的距离
sqDiffMat=diffMat**2
sqDistance=sqDiffMat.sum(axis=1)#axis=0表示矩阵的对应列相加,axis=1时表示矩阵的每一行相加,没有axis参数时就是普通相加
distances=sqDistance**0.5
sortedDistIndicies=distances.argsort()#输出排好序的元素的原始索引值
classCount={}

for i in range(k):
    voteIlabel=labels[sortedDistIndicies[i]]
    classCount[voteIlabel]=classCount.get(voteIlabel,0)+1#get函数返回指定的值,如果值不存在返回默认值0
sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
return sortedClassCount[0][0]

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
if name==”main“:
group,labels=createDataSet()
print(classify0([0.1,0.1],group,labels,3))

在if主函数中的classify0()函数的第一个参数可以改变值可以测试分类器的分类效率,下片文章介绍测试分类器和分类器的实际应用
如有侵权请私信联系作者,转发者不能以商业牟利为目的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值