KNN伪代码

KNN算法描述:

就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,其算法的描述为:

1)计算测试数据与各个训练数据之间的距离;

2)按照距离的递增关系进行排序;

3)选取距离最小的K个点;

4)确定前K个点所在类别的出现频率;

5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

#knn伪代码
import numpy as np

##给出训练数据以及对应的类别
def createDataSet():
    group = np.array([[1.3,1.1],[0,0],[1.0,2.0],[1.2,0.1],[3,1.4],[3.4,3.5],[3.2,2.2],[3.5,2.7],[4,2.4]])
    labels = ['A','A','A','A','B','B','B','B','B']
    return group,labels
	
#计算欧氏距离
def get_distance(X,Y):
	return np.sum((X-Y)**2)**0.5

def knn(x_test,x_train,y_train,k):
	distances = []
	y_kind={}
	#计算点到每个训练集样本的距离
	for i in x_train:
		distances.append(get_distance(x_test,i))
	tmp=list(enumerate(distances))
	#距离进行排序,取前k个距离最近的
	tmp.sort(key=lambda x:x[1])
	min_k_dis=tmp[:k]
	#前k个的y标签进行字典统计
	for j in min_k_dis:
		t_key = y_train[j[0]] #标签 j[0]是索引下标
		if t_key in y_kind.keys():
			y_kind[t_key] += 1
		else:
			y_kind.setdefault(t_key,1)
	#标签结果进行排序
	t=sorted(y_kind.items(),key=lambda x:x[1],reverse=True)
	#返回标签最多的一个
	return t[0][0]

x_train,y_train = createDataSet()
x_test = np.array([4,3.4])
n_neighbors = 3
output = knn(x_test,x_train,y_train,n_neighbors)
print("测试数据为:",x_test,"分类结果为:",output)

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值