KNN算法 C语言实现对鸢尾花的分类 机器学习

【KNN算法 C语言实现对鸢尾花的分类 机器学习】C语言实现KNN算法
步骤:
①读取数据,打乱数据(或者随机读取数据),并把标签(花名)别换成A,B,C
②分割数据(共150组,分50组为测试集,100组为训练集)
③遍历计算每一个测试数据对100个训练数据的距离(用欧几里得距离)
④排序距离,取前K个距离(即距离最近的三个邻居,K值是邻居数)统计三种标签中每种出现的次数,则出现次数最多的标签种类为预测标签的种类 。
⑤检查最终每一个预测标签结果与每一个测试集标签的结果是否正确相等,统计相等的数量 。
⑥计算正确的概率(预测标签正确的数量/测试集总数),计算每一个K值对应的每一个概率 。
特征值的类别数:即花萼长度、花萼宽度、花瓣长度、花瓣宽度 。
三种鸢尾花名:、、 。
150组数据集(数据集来源于网络):
源码:
#include #include #include #include #include #define NUM 150 //总数据的数量#define NUM1 50 //测试数据的数量#define NUM2 100 //训练数据的数量#define N 4 //特征数据的数量(维数)#define KN 15//K的最大取值typedef struct {double data;//距离char trainlabel;//用于链接训练标签}Distance;typedef struct {double data[N];//每种花的4个特征数据char label; //标签(花的种类)char name[20];//存放花的名字}TestAndTrain;TestAndTrain test[NUM1];//测试数据结构体数组TestAndTrain train[NUM2];//训练数据结构体数组TestAndTrain temp[NUM]; //临时存放数据结构体数组Distance distance[NUM2];//存放距离结构体数组void labelABC(char x[], char* p) { //把不同种类花的名字分别转化成 A B C 标签if (strcmp(x, "\"setosa\"") == 0)*p = 'A';elseif (strcmp(x, "\"versicolor\"") == 0)*p = 'B';elseif (strcmp(x, "\"virginica\"") == 0)*p = 'C';}void makerand(TestAndTrain a[],int n){ //函数功能:打乱存放标签后的结构体数组TestAndTrain t;in