机器学习(一)KNN

机器学习(一)KNN


在开始写机器学习算法的意图,是因为最近有在上机器学习的相关课程,对本文有问题的同学👨‍🎓欢迎交流👏。

算法概述

算法本质就是物以类聚,人以群分的一个思想。想要知道从来没有出现的数据应该是一个什么样的类别,可以通过他身上的特征和某些人特别像,即向量之间的距离大小。
d i s t a n c e = ∑ i n ( x i − n e w i ) 2 distance =\sqrt{\sum_i^n(x_i-new_i)^2} distance=in(xinewi)2
可以通过新来的向量,到原来标记好的向量距离来判断是否是一个群。

那么怎么样来确定一个群?
确定一个群的方式是通过K,我们在得到所有距离排序之后(从小到大)最靠前的K个。但不能够保证这个K个数据都是一个标签的,因此这里采用最直观暴力的方法少数服从多数的方法。最多的标签就是新来数据的标签。

优点:简单有效
缺点:无法给出任何数据的基础结构信息,本身也不需要去训练参数。如果数据量大,会需要大量计算

算法实现

所有的算法实现都采用比较简单数据集,不是说代码有多牛,就是单纯不想做只会调包的👨‍🎓。
所有例子都是本人亲手写了可以正常运行的。

#创建数据
def creatDataSet():
    group = np.array([[1.0,1.1]
                      ,[1.0,1.0]
                      ,[0,0]
                      ,[0,0.1]])
    label = np.array(['A','A','B','B'])
    return group,label
group,label = creatDataSet()
plt.scatter(group[:,0],group[:,1])
plt.rcParams['font.sans-serif']=['SimHei']
for i in range(len(group)):
    plt.annotate((label[i]),xy=(group[i,0],group[i,1]),xytext=(group[i,0]+0.01,group[i,1]+0.01))
plt.show()

创建好数据集,建立分类器

def KNN(inx,group,label,k):
    num = group.shape[0]
    distance = (((np.tile(inx,(num,1)) - group)**2).sum(axis=1))**0.5 #计算距离公式
    group_sorted = np.argsort(distance) #获得距离从小到大的排名
	# classcount 实现一个简单投票功能
    classcount = {}
    for i in range(k):
        lab = label[group_sorted[i]]
        classcount[lab] = classcount.get(lab,0)+1
    pridect = sorted(classcount.items(),key=lambda  x: x[1],reverse=False)
    return pridect
#这里我们可以随机输入新来的,俩特征都是0作为测试
KNN([0,0],group,label,3)[0][0]
返回值也是如预期 ‘A'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值