首页 > 其他分享 >[Machine Learning] 使用经典分类模型k最近邻(kNN)实现鸢尾花分类

[Machine Learning] 使用经典分类模型k最近邻(kNN)实现鸢尾花分类

时间:2025-01-17 16:54:21浏览次数:1  
标签:kNN score 模型 分类 train test 鸢尾花 sklearn

一、内容实现概述

本文主要讲述使用scikit-learn库内置的kNN模型,实现鸢尾花分类。具体实现过程如下:

  • 1. 导入所需库:预先导入scikit-learn库
  • 2. 导入数据:调用sklearn库内置的加载数据的方法load_iris(),导入鸢尾花数据
  • 3. 数据预处理:对鸢尾花数据进行预处理,获得特征数据与目标数据
  • 4. 数据分割:使用sklearn库的数据分割方法对步骤3中的数据进行比例分割,得到训练集和测试集数据
  • 5. 构建kNN模型:调用sklearn库的分类模型类KNeighborsClassifier构建模型(本实现已手动设置预测样本结果的邻居值为3,因为该训练样本中最多只有3个鸢尾花类别)
  • 6. 训练模型:调用sklearn库的fit()方法对训练集数据进行训练
  • 7. 预测模型:调用sklearn库的predict()方法对测试集数据进行预测
  • 8. 评估模型:由于该模型是分类模型,所以调用sklearn库的准确率评估方法accuracy_score()进行评估

注:

  • 在Python中使用(导入)scikit-learn框架时,需要先安装,本实现使用的是pip命令安装 pip install -U scikit-learn
  • Scikit-Learn官方教程

 

二、代码实现

注:源代码地址

# 主题:使用kNN(k-近邻)算法实现鸢尾花类别分类

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 第一、二步:导入鸢尾花数据并进行数据预处理
X, y = load_iris(return_X_y=True)

# 第三步:分割数据集
# 设置这个随机状态(random_state)是为了保证数据集的“不随机”​。
# 因为设置random_state的目的就是确保每次运行分割程序时,获得完全一样的训练集和测试集。否则,同样的算法模型在不同的训练集和测试集上的效果不一样。如果每次都随机抽样,那么在确定模型和初始参数后,你会发现,模型每运行一次,就会得到不同的预测准确率(因为模型性能通常都对训练集敏感)​,从而使得调参无法有效进行
# 可以这样理解,每个随机状态(random_state,即某个整数值)都代表一批不同的训练集和测试集。如果它的值不变,无论程序运行多少次,获取的都是固定的一批训练集和测试集,这种稳定性为我们进行模型调参提供了方便
# 一旦模型调参完毕,这个值就不需要设置了。如果不设置这个值,就会启用它的默认值None。一旦这个值被设置为None,就启用np.random作为随机种子,即默认以系统时间为随机种子。我们知道,时光荏苒,每时每刻的系统时间都不同,反而让样本的抽取更趋近随机抽样状态。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=123)

# 第四步:导入K-近邻算法模型
knn_model = KNeighborsClassifier(n_neighbors=3)

# 第五步:训练模型
knn_model.fit(X_train, y_train)

# 第六步:预测模型
y_train_pred = knn_model.predict(X_train)
y_pred = knn_model.predict(X_test)

# 第七步:绘制预测结果


# 第八步:评估模型
# 由于目标值是离散的,因此可直接使用准确率进行评估
acc_score = accuracy_score(y_test, y_pred) # 其自定义的实现为:sum(y_pred == y_test) / len(y_test) * 100
train_acc_score = accuracy_score(y_train, y_train_pred)
print("Accuracy: {:.2f}%".format(100 * acc_score))
print("Train accuracy score: {:.2f}%".format(100 * train_acc_score))

 

三、运行结果

 

标签:kNN,score,模型,分类,train,test,鸢尾花,sklearn
From: https://www.cnblogs.com/xl1164191281/p/18677289

相关文章

  • 高斯贝叶斯分类器实战
    目录前言实战前言面部皮肤区分数据集来自于UCI网站,该数据集含有两个部分,一部分为人类面部皮肤数据,该部分数据是由不同种族、年龄和性别人群的图片转换而成的;另一部分为非人类面部皮肤数据。两个部分的数据集一共包含245057条样本和4个变量,其中用于识别样本是否为人......
  • [Machine Learning] 使用经典分类模型k-最近邻(kNN)实现手写数字识别
    一、内容实现概述本文主要讲述使用scikit-learn库内置的kNN模型,实现手写数字识别预测房价实现过程如下:导入所需库:预先导入pandas、matplotlib以及scikit-learn库导入数据:使用pandas库的文件解析方法read_csv(),读取房价文件数据数据预处理:对房价数据进行预处理,获得特征数据与......
  • LLM大模型实践12-评估输入—分类
    简介本章聚焦评估输入任务的重要性,其对系统质量与安全性意义重大。处理多种独立指令集任务时,先对查询类型分类,再据此确定所用指令,好处众多。实现方式是定义固定类别,硬编码特定类别任务相关指令。比如构建客户服务助手,查询类型分类及指令确定尤为关键:用户要求关闭账户,二级......
  • JAVA开源免费项目 基于Vue和SpringBoot的多维分类的知识管理系统(附源码)
    本文项目编号T121,文末自助获取源码\color{red}{T121,文末自助获取源码}......
  • SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab2023b
    SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab2023b%************************************************************************************************************************************************************************......
  • 【机器学习:十七、多分类问题和Softmax函数】
    1.多分类问题1.1多分类问题定义多分类问题是指一个模型需要从多个类别中选择一个类别作为输出的任务。与二分类问题不同,多分类任务中类别的数量n>2......
  • 走进数据中心:了解定义、作用、分类,洞悉云计算大数据时代发展新趋势
    一、数据中心的定义、作用及分类数据中心是一整套复杂的设施,它不仅包括计算机系统和其他与之配套的网络、存储等设备,还包含冗余的数据通信连接设备、环境控制设备、监控设备以及各种安全装置。Google在其发布的《TheDatacenterasaComputer》一书中,将数据中心定义为:多功能......
  • C语言中操作符的分类和优先级(万字)
    C语言中操作符的分类和优先级1.操作符的分类总结算术操作符单目操作符赋值操作符位操作符逻辑操作符关系操作符三目操作符逗号表达式索引访问操作符函数调用成员访问操作符2.操作符的优先级1.操作符的分类总结算术操作符:+、-、*、/、%单目操作符:++、--、!......
  • springboot基于图像识别与分类的中国蛇类识别系统
    文章目录详细视频演示项目介绍技术介绍功能介绍核心代码系统效果图详细视频演示文章底部名片,获取项目的完整演示视频,免费解答技术疑问项目介绍  随着人工智能技术的不断发展,SpringBoot基于图像识别与分类的中国蛇类识别系统将在未来得到更广泛的应用和发展。它......
  • 机器学习之DBSCAN算法自动分类
    机器学习之DBSCAN算法自动分类目录机器学习之DBSCAN算法自动分类1DBSCAN算法1.1概念1.2关键概念:1.3算法步骤:1.4函数和参数1.5优缺点2实际测试2.1部分数据展示2.2代码测试1DBSCAN算法1.1概念DBSCAN(Density-BasedSpatialClusteringofApplications......