原生Python实现knn分类算法,用鸢尾花数据集

用鸢尾花数据集来进行测试,鸢尾花数据集包含4个数据元素,分别是(花萼长度
,花萼宽度,花瓣长度,花瓣宽度),所以测试的时候需要输入4个数据来进行预测。
算法思想:
1. 调用鸢尾花数据集和类别标签
from sklearn.datasets import load_iris
iris_dataset=load_iris()
data=iris_dataset['data']  #获取鸢尾花数据集
label=iris_dataset['target']  #获取标签列表
2. 用欧式定理计算每个数据与预测数据的距离。
for j in range(len(data)):  #计算最短距离度量,并保存在数组中
    for i in range(1,k+1):
        #欧式定理算法,计算最小距离
        c=abs(a[0]-data[j][0])**i+abs(a[1]-data[j][1])**i+abs(a[2]-data[j][2])**i+abs(a[3]-data[j][3])**i
        d=pow(c,1/i)
        list_min_lang.append(d)
3. 找到距离最短的前k个数据,并判断他们的类别
4. 比较哪种类别的数量最多
5. 预测出结果
源代码:
from sklearn.datasets import load_iris
iris_dataset=load_iris()
data=iris_dataset['data']  #获取鸢尾花数据集
label=iris_dataset['target']  #获取标签列表
a=[]                 #建立目标点的数据集
b=input("请输入目标点")   #将输入的字符型数据分割并转换成float型
a=b.split()
for i in range(4):
    a[i]=float(a[i])

    
k=int(input("请输入近邻:"))

list_min_lang=[]     #最短距离列表,存放最短的距离数据
list_all_min=[]    #所有点的最小距离
#三个标签的数量
label1=0
label2=0
label3=0

for j in range(len(data)):  #计算最短距离度量,并保存在数组中
    for i in range(1,k+1):
        #欧式定理算法,计算最小距离
        c=abs(a[0]-data[j][0])**i+abs(a[1]-data[j][1])**i+abs(a[2]-data[j][2])**i+abs(a[3]-data[j][3])**i
        d=pow(c,1/i)
        list_min_lang.append(d)
list_min_lang.sort()

list_all_min=list_min_lang   #存放k个最小距离值的列表
for i in range(k):  #找寻数组中与目标点距离最短的n个点,进行记录,并且进行预测
        for j in range(len(list_min_lang)):
            if list_all_min[i]==list_min_lang[j]:
                #判断邻近点分别是什么类
                if(label[list_min_lang.index(list_min_lang[j])]==0):
                    label1+=1
                if(label[list_min_lang.index(list_min_lang[j])]==1):
                    label2+=1
                else:
                    label3+=1
#找出邻近点最多的类别
label_list=[]
label_list.append(label1)
label_list.append(label2)
label_list.append(label3)
label_list.sort()
if(label_list[2]==label1):
    n=0
if(label_list[2]==label2):
    n=1
if(label_list[2]==label3):
    n=2  
print("该目标数据为{}类".format(n)) 
                 

截图
在这里插入图片描述
在这里插入图片描述
总结
这次作业加强了我对knn算法的理解,Knn算法分类的重点是要找到所有点与目标点的距离,这里用到了查到的欧式定理来解决问题。还有就是加强了我用Python编程的熟练度,由于Python才开始学习不久,编程过程中遇到一些困难,经过上网查阅和询问,慢慢了解了更多,比如将字符串分割在转换成数值型,还有将列表排序的sort()方法等等。总之还需要不断的学习和进步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值