机器学习:KNN算法对鸢尾花进行分类

这篇具有很好参考价值的文章主要介绍了机器学习:KNN算法对鸢尾花进行分类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

机器学习:KNN算法对鸢尾花进行分类

1.KNN算法的理解:

1.算法概述

KNN(K-NearestNeighbor)算法经常用来解决分类与回归问题, KNN算法的原理可以总结为"近朱者赤近墨者黑",通过数据之间的相似度进行分类。就是通过计算测试数据和已知数据之间的距离来进行分类。

机器学习:KNN算法对鸢尾花进行分类

如上图,四边形代表测试数据,原型表示已知数据,与测试数据最近的一个已知数据为红色的’whale’,所以对这个测试数据的预测值也为’whale’,这是取k值为一的情况,k表示要取最近的k个已知数据进行预测。k取大于一时则以占比较多的那类数据为预测结果,通常k值不等于一,容易产生过拟合的情况。

算法流程:

  1. 计算预测数据与训练数据的距离
  2. 选择距离最小的前K个数据
  3. 确定前K个数据的类别,及其出现频率
  4. 返回前K个数据中频率最高的类别(预测结果)

2.算法难点

KNN算法的难点在于距离计算以及k值的确定

距离计算:

测试数据与训练数据的距离计算方法有很多种,可以用如曼哈顿距离,欧式距离,余弦距离等。在KNN算法中常使用的距离计算方式是欧式距离,计算公式如下

机器学习:KNN算法对鸢尾花进行分类

确定k值:

K值选择问题,李航博士的一书「统计学习方法」上所说:

  1. 选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;

  2. 选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。

  3. K=N(N为训练样本个数),则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单,忽略了训练实例中大量有用信息。

在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是把训练数据在分成两组:训练集和验证集)来选择最优的K值。

总结:

  • K值较小,则模型复杂度较高,容易发生过拟合,学习的估计误差会增大,预测结果对近邻的实例点非常敏感。
  • K值较大可以减少学习的估计误差,但是学习的近似误差会增大,与输入实例较远的训练实例也会对预测起作用,使预测发生错误,k值增大模型的复杂度会下降。
  • 在应用中,k值一般取一个比较小的值,通常采用交叉验证法来来选取最优的K值。

2.sklearn的iris数据集介绍

Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性

iris以鸢尾花的特征作为数据来源,常用在分类操作中。该数据集由3种不同类型的鸢尾花的50个样本数据构成。其中的一个种类与另外两个种类是线性可分离的,后两个种类是非线性可分离的。

四个属性:
Sepal.Length(花萼长度),单位是cm;
Sepal.Width(花萼宽度),单位是cm;
Petal.Length(花瓣长度),单位是cm;
Petal.Width(花瓣宽度),单位是cm;

查看数据集:

from sklearn.datasets import load_iris

if __name__=='__main__':
    #鸢尾花数据集
    datas = load_iris()
    print(datas)

机器学习:KNN算法对鸢尾花进行分类

sklearn的其他数据集可见:

sklearn提供的自带的数据集 - nolonely - 博客园 (cnblogs.com)

3.使用sklearn库实现KNN算法对iris数据集的分类

载入数据集并划分训练与测试集:
iris = datasets.load_iris()

feature = iris['data']  
target = iris['target']  

x_train, x_test, y_train, y_test = train_test_split(feature, target, test_size=0.2, random_state=2022)

# print(x_train)  

定义k值并对比测试集的测试结果,查看准确率
knn = KNeighborsClassifier(n_neighbors=3) 

train = knn.fit(x_train, y_train)
#print(knn)  

y_pred = knn.predict(x_test)
y_true = y_test

print('模型的分类结果:', y_pred)
print('真实的分类结果:', y_true)

print(knn.score(x_test, y_test))

完整代码:
import sklearn.datasets as datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split

iris = datasets.load_iris()

feature = iris['data']  
target = iris['target']  

x_train, x_test, y_train, y_test = train_test_split(feature, target, test_size=0.2, random_state=2022)#8:2划分数据集

# print(x_train)  

knn = KNeighborsClassifier(n_neighbors=3) 

train = knn.fit(x_train, y_train)
#print(knn)  

y_pred = knn.predict(x_test)
y_true = y_test

print('模型的分类结果:', y_pred)
print('真实的分类结果:', y_true)

print(knn.score(x_test, y_test))

test1 = knn.predict([[6.6, 3.1, 4.7, 2.6]])#测试
print(test1)


结果
K=3:

机器学习:KNN算法对鸢尾花进行分类

K=20:

机器学习:KNN算法对鸢尾花进行分类

K=100:

机器学习:KNN算法对鸢尾花进行分类

在三个k值中k=20时分类效果最好

(可以使用交叉验证来求最佳的k值,参考博客:史上最全KNN_knn数据集 )

讨论:

KNN算法的优缺点:

优点:
1.理论简单,容易实现,既可以分类也可以回归;

2.精度高,对异常值不敏感,几个异常值无关大碍;

3.新数据可以直接加入数据集而不必进行重新训练。

缺点:
1.分类计算量大时,内存开销大,必须保存全部数据集,即空间复杂度高;

2.无法给出基础结构信息,无法知晓平均实例样本与典型实例样本具有什么特征,即无法给出数据的内在含义(决策树),可解释性差;

3.对于稀疏数据集束手无策,要求样本数据平衡,否则预测偏差比较大。

4.只适用于监督学习,就标签表明种类。文章来源地址https://www.toymoban.com/news/detail-489115.html

到了这里,关于机器学习:KNN算法对鸢尾花进行分类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【机器学习案例】不同的模型算法对鸢尾花数据集进行分类

    经典机器学习入门项目,使用逻辑回归、线性判别分析、KNN、分类与回归树、朴素贝叶斯、向量机、随机森林、梯度提升决策树对不同占比的训练集进行分类 数据源 :Iris Species | Kaggle 150行,5列,分三种鸢尾花类型,每种类型50个样本,每行数据包含花萼长度、花萼宽度、花

    2024年02月04日
    浏览(33)
  • 【机器学习】KNN算法-鸢尾花种类预测

    K最近邻(K-Nearest Neighbors,KNN)算法是一种用于模式识别和分类的简单但强大的机器学习算法。它的工作原理非常直观:给定一个新数据点,KNN算法会查找离这个数据点最近的K个已知数据点,然后基于这K个最近邻数据点的类别来决定新数据点的类别。简而言之,KNN算法通过周

    2024年02月07日
    浏览(41)
  • MapReduce实现KNN算法分类推测鸢尾花种类

    https://gitcode.net/m0_56745306/knn_classifier.git 该部分内容参考自:https://zhuanlan.zhihu.com/p/45453761 KNN(K-Nearest Neighbor) 算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。 KNN算法的思想非常简单:对于任

    2024年02月08日
    浏览(47)
  • 【机器学习算法】KNN鸢尾花种类预测案例和特征预处理。全md文档笔记(已分享,附代码)

    本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用,结合场景解决实际问题。包括K-近邻算法,线性回归,逻

    2024年02月19日
    浏览(47)
  • 【机器学习】决策树案例二:利用决策树进行鸢尾花数据集分类预测

    手动反爬虫,禁止转载: 原博地址 https://blog.csdn.net/lys_828/article/details/122045161(CSDN博主:Be_melting) 在进行逻辑回归分类的过程中已经有使用过iris数据集,这里直接加载数据,并进行字段名称的修改。 输出结果如下。 通过info()方法查看各个字段的基本详情,输出结果如下。

    2024年02月08日
    浏览(46)
  • 【机器学习】鸢尾花分类-逻辑回归示例

    功能: 这段代码演示了如何使用逻辑回归对鸢尾花数据集进行训练,并将训练好的模型保存到文件中。然后,它允许用户输入新的鸢尾花特征数据,使用保存的模型进行预测,并输出预测结果。 步骤概述: 加载数据和预处理: 使用 Scikit-Learn 中的 datasets 模块加载鸢尾花数据

    2024年02月10日
    浏览(42)
  • 机器学习实验3——支持向量机分类鸢尾花

    基于鸢尾花数据集,完成关于支持向量机的分类模型训练、测试与评估。 代码 认识数据 属性:花萼长度,花萼宽度,花瓣长度,花瓣宽度 分类:Setosa,Versicolour,Virginica 相关性分析 如下图,可以直观看到花瓣宽度(Petal Width)和花瓣长度(Petal Length)存在很高的正相关性,

    2024年01月24日
    浏览(38)
  • 【机器学习实例讲解】机器学习-鸢尾花数据集多分类第02课

    问题定义与理解: 明确机器学习任务的目标,是分类、回归、聚类、强化学习还是其他类型的问题。 确定业务背景和需求,了解所处理数据的现实意义。 数据收集: 根据任务目标从各种来源获取原始数据,可以是数据库、文件、传感器、网络日志等。 数据预处理: 数据清

    2024年01月18日
    浏览(36)
  • 初识机器学习——感知机(Perceptron)+ Python代码实现鸢尾花分类

      假设输入空间 χ ⊆ R n chisubseteq R^n χ ⊆ R n ,输出空间为 γ = { + 1 , − 1 } gamma=left { +1,-1right } γ = { + 1 , − 1 } 。其中每一个输入 x ⊆ χ xsubseteq chi x ⊆ χ 表示对应于实例的特征向量,也就是对应于输入空间(特征空间)的一个点, y ⊆ γ ysubseteq gamma y ⊆ γ 输出表

    2023年04月08日
    浏览(50)
  • PyTorch深度学习实战 | 基于线性回归、决策树和SVM进行鸢尾花分类

    鸢尾花数据集是机器学习领域非常经典的一个分类任务数据集。它的英文名称为Iris Data Set,使用sklearn库可以直接下载并导入该数据集。数据集总共包含150行数据,每一行数据由4个特征值及一个标签组成。标签为三种不同类别的鸢尾花,分别为:Iris Setosa,Iris Versicolour,Iri

    2023年04月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包