KNN伪代码(简易版和复杂版)

简单来写:
    def fit(train, k):
	  self.train = train
	  self.k = k
	def predict(test):
	  # a. 从训练数据train中获取和当前数据test距离最近的k个样本
	  neighbors = fetch_k_neighbors(self.train, test, self.k)
	  # b. 合并这K个最近样本,得到预测值
	  predict_label = calc_predict_label(neighbors)
	  return predict_label
  
  复杂来写:
    def fit(train, k):
	  self.train = train
	  self.k = k
	def predict(test):
	  result = []
	  for x in test:
	    # a. 从训练数据train中获取和当前数据x距离最近的k个样本
	    neighbors = fetch_k_neighbors(self.train, x, self.k)
		
	    # b. 合并这K个最近样本,得到预测值
		# b1. 统计一下各个类别label出现的次数
		label_2_count_dict = {}
		for neighbor in neighbors:
		  # b11. 获取当前样本neighbor的标签值
		  label = neighbor.label
		  # b12. 将这个label添加到字典中
		  if label not in label_2_count_dict:
		    label_2_count_dict[label] = 1
		  else:
		    label_2_count_dict[label] += 1
		# b2. 从这个字典中获取出现次数最多的label标签值作为预测值
		max_label_count = 0
		max_label = None
		for label in label_2_count_dict:
	      # 获取当前label对应出现的count数量
		  count = label_2_count_dict[label]
		  # 将当前count和最大值进行比较,选择/保留最大的count
		  if count > max_label_count:
		    max_label_count = count
			max_label = label
		# b3. 将预测值添加到集合中
		result.append(max_label)
	  return result

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值