K近邻算法

from math import *
import random
LABELS=["A","B"]

def get_data():
    data=[];labels=[]
    for i in range(100):
        d=(1+random.random()*0.1-0.05,1+random.random()*0.1-0.05)
        data.append(d)
        labels.append(0)
    for i in range(100):
        d=(0.1+random.random()*0.1-0.05,0.1+random.random()*0.1-0.05)
        data.append(d)
        labels.append(1)
    return data,labels

def distance(p1,p2):
    return sqrt(pow((p1[0]-p2[0]),2)+pow((p1[1]-p2[1]),2))

def knn(item,data,labels,n=3):
    distances=[]
    for i in range(len(data)):
        dis=distance(item,data[i])
        distances.append((dis,labels[i]))
    for i in range(len(distances)):
        for j in range(i+1,len(distances)):
            if(distances[j]<distances[i]):
                distances[i],distances[j]=distances[j],distances[i]
    statc={}
    for i in range(n):
        label=distances[i][1]
        if label in statc:
            statc[label]+=1
        else:
            statc[label]=1
    maxLabelCnt=0
    print(statc)
    for l,c in statc.items():
        if(c>maxLabelCnt):
            label=l
            maxLabelCnt=c
    return label

data,labels=get_data()
label=knn((0.55,0.55),data,labels)
print(LABELS[label])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值