传统机器学习模型knn

knn(k近邻模型):

一种简单的分类模型

分类依据:

看离待分点最近的K个邻居属于哪个分类的最多,通过调整K的值,可能会得到不同的分类效果

步骤:

1.给出已标注好的数据点i(i=1,…,n)的坐标( x i , y i x_i,y_i xi,yi)以及类别 t i t_i ti(取值为0或1)

2.给出新加入点的坐标( x 0 , y 0 x_0,y_0 x0,y0),计算它到每个标注点的距离(欧氏距离)

3.根据上一步求到的距离,找出离它最近的K个点

4.最近的K个点中,数量最多的那个类别就判定为新加入点的类别

代码实现(Python)

#手写knn分类模型
import numpy as np
import math
from collections import Counter
#已知标记点
mp = np.array([[(1,1),2],[(0.4,5.2),1],[(-2.8,-1.1),2],[(3.2,1.4),1],[(-1.3,3.2),1],[(-3,3.1),2]])
feature = mp[:,0]#特征
print(feature)
print(feature[2][0])
label = mp[:,-1]#结果分类
print(label)
#新增标记点
new_mp1 = (-2.6, 6.6)
new_mp2 = (1.4, 1.6)
new_mp3 = (-2.5, 1.2)


#计算距离并返回序号(从小至大)
def distence(x,y):
    data = list()#声明列表
    i = 0
    while i < 6 :
        a = x[i][0]**2 - y[0]**2
        b = x[i][1]**2 - y[1]**2
        c = (a+b)**0.5
        i += 1
        data.append(c)
    for z in data:
        print(z)
    sortIndex = np.argsort(data) #返回原序号
    print(sortIndex)
    return sortIndex


outcome = distence(feature,new_mp1)

label_new = label[outcome]#重新排序
print(label_new)
new_list = list()
#给定K值
for k in range(1):
    new_list.append(k) 
new_list1 = label_new[new_list]
#print(new_list1)

#计算K个满足标记点中各类型的个数
demo = Counter(new_list1)
if demo[1] > demo[2]:
    print('new_mp1是‘1’类型')
else:#满足条件个数一样多时,归为2类型
    print('new_mp1是‘2’类型')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值