news 2026/7/4 4:19:17

【KNN算法】对鸢尾花分类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【KNN算法】对鸢尾花分类

要分的三类鸢尾花:

0、导包

# 导包 import seaborn as sns import pandas import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split # 分割训练集的测试集 from sklearn.preprocessing import StandardScaler # 数据标准化 from sklearn.metrics import accuracy_score # 模型评估,计算模型预测的准确率 from sklearn.neighbors import KNeighborsClassifier # KNN算法 from sklearn.datasets import load_iris # 加载鸢尾花测试集

1、查看数据集

# 定义函数,加载鸢尾花数据集,并查看数据集 def dm01_loadiris(): # 加载鸢尾花数据集 iris_data = load_iris() # 查看数据集 print(iris_data) # 字典形态 # print(f"data type:{type(iris_data)}") # 查看数据集的键 print(f'数据集的键:{iris_data.keys()}') #dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module']) # 键对应的值 print(f'具体的数据:{iris_data.data[:5]}') # 前五条,其中一条: [[5.1 3.5 1.4 0.2]...] 有4个特征 print(f'具体的标签:{iris_data.target[:5]}') #[0 0 0 0 0] print(f'标签对应的名称:{iris_data.target_names}') # ['setosa' 'versicolor' 'virginica'] print(f'特征对应的名称:{iris_data.feature_names}') #['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] if __name__ == '__main__': dm01_loadiris()

运行结果:

2、绘制鸢尾花的散点图

# 定义函数,绘制鸢尾花的散点图 def dm02_show_iris(): # 加载数据集 iris_data = load_iris() # 把数据集中的 data 封装成DataFrame对象 iris_df = pd.DataFrame(iris_data.data, columns=iris_data.feature_names) # 给df对象新增label列 iris_df['label'] = iris_data.target print(iris_df) # 绘制散点图 # 参1:数据集 参2:X轴 参3:y轴 参4:分组字段 参5:是否显示拟合回归线 sns.lmplot(data=iris_df, x='sepal length (cm)', y='sepal width (cm)', hue='label', fit_reg=False) # 设置标题,显式 plt.title("iris data") plt.tight_layout() # 自动调整子图参数,以使整个图像的边界与子图匹配 plt.show() if __name__ == '__main__': # dm01_loadiris() dm02_show_iris()

运行结果:

3、数据集划分

主要是用到 from sklearn.model_selection import train_test_split

# 定义函数,切分训练集和测试集 def dm03_split_train_test(): # 加载数据 iris_data = load_iris() # 共150条特征和标签 # 数据的预处理 # 参1:特征数据 参2:标签数据 参3:测试集比例 参4:随机种子(种子一致,每次生成的随机数据集都是固定的) # 返回值:训练集、测试集的特征数据;训练集、测试集的标签数据 x_train, x_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2, random_state=23) # 打印切割后的结果 print(f'训练集的特征:{x_train},个数:{len(x_train)}') print(f'测试集的特征:{x_test},个数:{len(x_test)}') print(f'训练集的标签:{y_train},个数:{len(y_train)}') print(f'训练集的标签:{y_test},个数:{len(y_test)}') if __name__ == '__main__': dm03_split_train_test()

运行结果:

4、实现鸢尾花完整案例

重点都在注释里了。

# 定义函数,实现鸢尾花完整案例 --> 加载数据、数据预处理、特征工程、模型训练 def dm04_complite(): # 加载数据 iris_data = load_iris() # 数据预处理 x_train, x_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2, random_state=23) # 特征工程 # 思考1: 特征提取: 因为源数据只有四个特征列,且都是我们用的,所以这里无需做特征提取 # 思考2: 特征预处理:因为源数据4列特征的量纲差别不大,无需做特征处理。但!为了理解步骤,这里还是加上了标准化 # 对数据进行标准化 # 1.创建标准化对象 transfer = StandardScaler() # 2.特征列进行标准化,即:x_train 和 x_test # 2.1 对训练集进行标准化 # fit_transform: 兼具fit和transform的功能,即:训练,转换。一般适用于:第一次进行标准化,一般是处理:训练集。 x_train = transfer.fit_transform(x_train) # 2.2 对测试集进行标准化 # transform:只有转换。该函数适用于:重复进行标准化动作是使用,一般用于测试集。 x_test = transfer.transform(x_test) # 模型训练 # 创建模型对象 estimator = KNeighborsClassifier(n_neighbors=3) # 具体的训练动作 estimator.fit(x_train,y_train) # 模型预测 # 场景1:对刚才切分的测试集进行测试 y_pred_1 = estimator.predict(x_test) print(f'测试集的预测结果为:{y_pred_1}') # 场景2:对新的数据集进行测试 # 自定义测试数据集 my_data = [[7.8,2.2,3.9,1.6]] # 注意!! 要对数据进行标准化处理 my_data = transfer.transform(my_data) # 进行预测 y_pred_2 = estimator.predict(my_data) print(f'自定义数据集的预测结果为:{y_pred_2}') # 模型评估 # 方式1:直接评分,基于:测试集的特征 和 测试集的标签 print(f"正确率:{estimator.score(x_test,y_test)}") # 方式2:基于 测试集的特征 和 预测结果 print(f'正确率:{accuracy_score(y_test,y_pred_1)}') if __name__ == '__main__': dm04_complite()

运行结果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 4:18:24

HI3519芯片在高速视觉分析中的应用与优化

1. HI3519平台概述:为什么选择它做高速视觉分析HI3519是海思半导体推出的一款高性能视频处理芯片,专为需要实时高清视频采集与分析的场景设计。这颗芯片在交通监控、体育赛事和运动分析领域已经形成了成熟的解决方案生态。我经手过的几个省级智能交通改造…

作者头像 李华
网站建设 2026/7/4 4:15:10

Agent 流程架构三大核心运行机制

现在做大模型相关应用,比拼的核心早就不是模型参数量多大、或是写得多精巧的提示词,真正拉开差距的关键,是你给大模型搭出来的整套运行流程好不好。Agent是依托大语言模型(LLM)搭建的智能系统框架,属于能完…

作者头像 李华
网站建设 2026/7/4 4:13:18

Android安全开发:AES-CMAC消息认证码原理、实现与实战指南

1. 项目概述:为什么在Android上需要AES-CMAC?在移动应用开发,尤其是涉及金融支付、身份认证、设备绑定等安全敏感场景时,数据的完整性和真实性验证是重中之重。我们常听到HMAC(基于哈希的消息认证码)&#…

作者头像 李华
网站建设 2026/7/4 4:10:28

2026 年大模型学习路线盘点,码士集团课程体系全解析

2026 技术风向标:大模型课程体系的深度拆解 站在 2026 年的年中回望,AI 大模型早已褪去了最初的神秘光环,从“尝鲜玩具”彻底演变为软件工程的“基础设施”。对于开发者而言,单纯会调用几个 API 已不足以构成核心竞争力。市场的需…

作者头像 李华
网站建设 2026/7/4 4:08:06

GPT-5.4 Mini与Nano选型指南:任务分级驱动的工业级AI部署

1. 这不是参数表对比,是真金白银跑出来的选型指南 上周三下午三点,我正对着客服系统后台的响应延迟曲线发愁——日均 4.7 万次对话请求,平均首 token 时间卡在 820ms,用户已经开始在对话框里打“?”和“在吗”。技术方…

作者头像 李华
网站建设 2026/7/4 4:07:48

Grok与GPT实战能力对比:从模型架构到业务场景的精准选型指南

1. 这不是一场“谁更好”的辩论,而是一次模型能力边界的实地测绘“Grok真的比GPT更优秀吗?”——这句话在技术社区里刷屏的频率,已经快赶上“Python和JavaScript哪个更适合初学者”了。但说实话,我盯着这个标题看了三分钟&#xf…

作者头像 李华