KNN算法简单实现

KNN算法的python的简单实现

*以下是knn实现的课程作业,由于编码水平有限,有些不合理的地方请批评指正

选择从网上下载的水果数据集,将其中的三分之二作为训练数据,其中的三分之一作为测试数据。分别放入两张表中,训练集和测试集的数据结构均相同如下图:

#导入第三方库
import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt 
#载入训练集
train = pd.read_csv(r'C:\Users\17749\Desktop\空间数据挖掘\train.csv')
train

#载入测试数据,通过mass、width、height、color四个参数来预测水果类型,选择测试集和训练集的这四个参数进行计算
train_cal = train.drop(['fruit_name','fruit_subtype'],axis=1)
test = pd.read_csv(r'C:\Users\17749\Desktop\空间数据挖掘\test.csv')
test_cal = test.drop(['fruit_name','fruit_subtype'],axis=1)
test_cal.head()

 

#定义欧式距离计算函数
def dis(ls1,ls2):
    sum = 0
    for i,j in zip(ls1,ls2):
       sum += pow((i-j),2)
    distance = pow(sum,1/2)
    return distance
#预设K值,设计函数获取每个测试集的每个预测标签
def predict_label(ls,k=8):
    train['distance']=''    #新建距离字段
    for i in range(len(train_cal)):
        train_ls = list(train_cal.iloc[i,1:])
        disance = dis(ls,train_ls)
        train[i,-1]=disance
    train.sort_values(by=['distance'],inplace=True,ascending=True)   #按照距离升序排序
    k_neighbor = train.iloc[:k-1,:] #选择距离最近的前k个记录放入k_neighbor表
    #对k_neighbor表中的标签进行计数
    k_neighbor_label = pd.DataFrame(k_neighbor['fruit_label'].value_counts(ascending=False))
    #返回出现次数最多的标签
    label = k_neighbor_label.index.values[0]
    train.drop(['distance'],axis=1,inplace=True)
    return label
#计算测试集中每个样本的标签,写入predict_label中
test['predict_label']=''    #初始化predict_labe
for i in range(len(test_cal)):
    test_ls = list(test_cal.iloc[i,1:])
    test.iloc[i,-1]=predict_label(test_ls,5)   
#计算准确度

correct = 0
for i in range(len(test)):
    if test.iloc[i,0]==test.iloc[i,-1]:
        correct += 1
acc = correct/len(test)
acc

最后准确度为24%,可能与样本中个标签的类别数量差异有关

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值