KNN算法预测鸢尾花种类

本文详细介绍了使用KNN算法预测鸢尾花种类的过程,从算法设计到源代码实现,包括数据预处理、计算欧式距离、确定最近邻、投票逻辑和准确率计算。在调试阶段,作者遇到并解决了数据类型转换、函数调用和逻辑判断等问题。通过这次实践,作者加深了对KNN算法和Python编程的理解。
摘要由CSDN通过智能技术生成

一、 作业题目
编写KNN原生算法利用鸢尾花数据集预测花的品种,并计算准确率。
二、算法设计
1、对KNN的认识
KNN是一种监督式的学习算法,算法的主要目的是根据训练实例和对象的特征值来将对象分类。
总结可得KNN算法的五个步骤:
(1) 决定参数K,也就是最近邻居的个数
(2) 计算预测样本到所有训练样本的“距离”
(3) 根据计算出的距离,找出“距离”最近的K个邻居
(4) 收集这K个邻居的分类情况y
(5) 用这个K个邻居的y值“主要成分“作为预测样本的分类
2、设计过程
(1)导包
算法设计:

import csv  #处理CSV文件
import random   #处理随机数
import math
import operator	  #operator模块提供itemgetter函数

(2)收集数据
鸢尾花数据的获得有两种方法:一是通过开源项目sciket-learn导入鸢尾花数据,二是利用文件导入数据,在这里我使用了第二种方法,使用的是CSV格式的文件导入数据,CSV文件可以使用Excel格式打开。
CSV格式数据集下载链接:鸢尾花数据 密码:4leg ( 有.csv和.txt两种格式)
Python写入CSV文件的方法:CSV
(3)数据预处理
算法设计:

# 从文件中加载数据,将数据分成训练集和测试集,二者比例记为split
def loadDataset(filename, split, trainset=[], testset=[]):
    with open(filename, 'r') as csvfile:
        lines = csv.reader(csvfile)
        dataset = list(lines)
        #遍历数据
        for x in range(len(dataset) - 1):
            for y in range(4):
                dataset[x][y] = float(dataset[x][y])
            if random.random() < split:
                trainset.append(dataset[x])
            else:
                testset.append(dataset[x])

(4)计算欧式距离
即计算待测试数据与训练数据集中的每个训练数据之间的距离来确定K个邻居
KNN算法采取的是欧氏距离,即连接各个点之间的真实距离。如二维空间中俩点(x1, y1)、(x2、y2)的欧氏距离公式为:
在这里插入图片描述
算法设计:

# 计算欧几里得几何距离确定K个邻居
def euclideanDistance(instance1, instance2, length):  # example
    dis
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值