实现KNN算法

本文详细介绍了如何使用原生Python实现KNN分类算法,以鸢尾花数据集为例。讲解了KNN算法原理,包括分类任务和回归任务的决策规则,并展示了算法设计的步骤,如数据准备、kNN训练函数和预测函数的实现,以及如何选择合适的K值。通过验证集确定K=3时准确率最高,最后对测试集进行预测,测试准确率高,强调了kNN算法作为最直观的分类算法,其实质是存储并识别训练样本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、作业题目:

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

二、算法原理:

   KNN算法是选择与输入样本在特征空间内最近邻k个训练样本并根据一定的决策规则,给出输出结果 。

决策规则:

分类任务:输出结果为k个训练样本中占大多数的类 。

回归任务:输出结果为k个训练样本值的平均值 。

三、算法设计:

   (1).数据准备

      选择鸢尾花数据集(lris)每个样本x包含花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)、花瓣宽度(petal width)四个特征。样本标签y共有三类,分别是Setosa,Versicolor和Virginica。Iris数据集总共包含150个样本,每个类别由50个样本。

       数据data应用网上下载数据集。

data = pd.read_csv('iris.data', header=None)
data.columns = [
'sepal length', 'sepal width', 'petal length', 'petal width', 'species'

将三个类别的数据分别提取出来,setosa、versicolor、virginica分别用0、1、2来表示。将每个类别的所有样本分成训练样本(training set)、验证集(validation set)和测试样本(test set),各占所有样本的比例分别为60%,20%,20%。

表示两种类别不同特征的空间分布。选择sepal length和petal length两个特征,在二维平面上作图。

(2) kNN训练函数和预测函数

kNN的训练过程实际上是一种数据标类、数据存储的过程,不包含机器学习算法。首先我们需要定义一个类(class)来实现KNN算法模块。

   kNN距离衡量一般有两种方式:L1距离和L2距离。

K值的选择:k值太小会使模型过于复杂,造成过拟合(overfitting);k值太大会使模型分类模糊,造成欠拟合(underfitting)。在KNearestNeighbor类中定义预测函数通过验证集来验证从而决定K值大小。

   (3)训练和预测

创建KNearestNeighbor实例对象通过测试发现K=3时,验证集准确率最高。最后,把预测结果绘图表示。依然选择sepal length和petal length两个特征,在二维平面上作图。

四、源代码

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt



data = pd.read_csv('iris.data', header=None)

data.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'species']    # 特征及类别名称

X = data.iloc[0:150, 0:4].values

y = data.iloc[0:150, 4].values

y[y == 'Iris-setosa'] = 0                                 # Iris-setosa 输出label用0表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值