KNN算法实现对iris数据集的预测
2021/10/29 11:09:53
本文主要是介绍KNN算法实现对iris数据集的预测,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
KNN算法的实现
第一次写机器学习算法,写的是KNN预测iris数据集、不会矩阵运算,实现起来很呆,但是总归还是实现了
import pandas as pd from math import dist k = int(input("请输入k值(不能输入三的倍数!):")) dataTest = pd.read_csv('iristest.csv', header=None).values trainData = pd.read_csv('iristrain.csv', header=None).values iris = pd.read_csv('iris.csv', header=None) # 用于我懒得把测试数据和训练数据封装成不同类,所以就会在成员变量里面同时出现测试数据专有的属性和测试数据的专有属性 class Data: """ 这个类用来封装每一个数据的信息 info:数据的前4列 Label:数据标签 predict_label:数据的使用knn算法预测的标签 dis:数据离测试数据的距离 """ def __init__(self, info, label, dis=None, predict_label=None): self.info = info self.label = label self.dis = dis self.predict_label = predict_label def __str__(self): return "info={0}、dis={1}、label={2}、predict_label={3}".format(self.info, self.dis, self.label, self.predict_label) # 重写__lt__函数方便sort直接排序 def __lt__(self, other): return self.dis < other.dis trainDataInClass = [] for item in trainData: trainDataInClass.append(Data(item[0:4], item[-1])) def getTestLabel(test_data): """ :param test_data: 输入点 :return: 返回该点的类别 本函数用于做输入数据的分类 """ # 定义一个列表,用来存储距离 distance = [] for m in trainDataInClass: # dist是一个直接计算欧氏距离的函数 m.dis = dist(m.info, test_data.info) distance.append(m) distance.sort() # 定义一个列表来存储最近前k名的Label label_top = [] for j in range(0, k): label_top.append(distance[j].label) test_data.predict_label = max(label_top, key=label_top.count) return test_data # 测试数据 # 定义一个存储预测之后的数据的列表 predict_list = [] for item in dataTest: predict_list.append(getTestLabel(Data(item[0:4], item[-1]))) # 定义一个变量用于存储预测准确的数据数量 predict_true_cnt = 0 for item in predict_list: if item.label == item.predict_label: predict_true_cnt += 1 # 计算精度 precision = predict_true_cnt / len(predict_list) print(precision)
没有做交叉验证,所以附上训练数据集和测试数据集
测试数据集,点击下载
直接显示
训练数据集,点击下载
直接显示
这篇关于KNN算法实现对iris数据集的预测的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南