news 2026/7/5 13:52:23

02-KNN案例:鸢尾花分类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
02-KNN案例:鸢尾花分类

1. 需求说明

基于鸢尾花数据集,使用 KNN 实现 3 类鸢尾花自动分类。

2. 数据集简介

  • 来源:经典公开数据集,sklearn 内置。
  • 样本:共 150 条,分 3 类鸢尾花(山鸢尾、变色鸢尾、维吉尼亚鸢尾),每类各 50 条。
  • 特征:4 个数值特征:花萼长、花萼宽、花瓣长、花瓣宽。
    • sepal length (cm):花萼长度
    • sepal width (cm):花萼宽度
    • petal length (cm):花瓣长度
    • petal width (cm):花瓣宽度
  • 标签:3 种花卉类别,无缺失、无异常值,数据干净,适合 KNN 等基础分类算法测试。
    • 0:setosa 山鸢尾
    • 1:versicolor 变色鸢尾
    • 2:virginica 维吉尼亚鸢尾

3. KNN算法实现

3.1 导包

from sklearn.datasets import load_iris # 导入数据集 from sklearn.model_selection import train_test_split, GridSearchCV # 划分数据集, 交叉验证+网格搜索 from sklearn.neighbors import KNeighborsClassifier # 创建模型对象 from sklearn.metrics import accuracy_score # 模型评估 from sklearn.preprocessing import StandardScaler # 标准化对象 import seaborn as sns import pandas as pd import matplotlib.pyplot as plt

3.2 获取数据

# 1. 加载数据集 data = load_iris() # 2. 查看数据集 # print(data.keys()) # 获取数据集所有的key print(data.data[:5]) # 数据集的前5行 print(data.target[:5]) # 数据集的标签的前5行 print(data.target_names) # 数据集的标签名 print(data.feature_names) # 数据集的属性名 # print(data.DESCR) # 数据集的描述 # print(data.frame) # 数据集的DataFrame格式 # print(data.filename) # 数据集的文件名 # print(data.data_module) # 数据集的模块 # 3. 可视化 data_df = pd.DataFrame(data.data, columns=data.feature_names) data_df['target'] = data.target # 散点图 sns.lmplot(x='sepal length (cm)', y='sepal width (cm)', hue='target', data=data_df, fit_reg=False) plt.title('iris data') plt.tight_layout() # 自动调整子图参数,使之填充整个图像 plt.show()

3.3 数据预处理

缺失值、异常值处理(这里不用);划分数据集

# 划分数据集 # 参数解释: # test_size:测试集所占的比例,默认为0.25 # random_state:随机数种子,可以指定一个整数,从而保证每次运行时,数据集的划分都是固定的 # 返回值:x_train, x_test, y_train, y_test x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=22) # 打印划分后的数据集 print(f"训练集特征的大小: {x_train.shape}") print(f"测试集特征的大小: {x_test.shape}") print(f"训练集标签的大小: {y_train.shape}") print(f"测试集标签的大小: {y_test.shape}")

3.4 特征工程

3.4.1 特征提取

这里不用

3.4.2 特征预处理

标准化

scaler = StandardScaler() x_train = scaler.fit_transform(x_train) # 方法解释:fit_transform(),兼具训练和转换的功能,先训练,再转换,适用于第一次进行标准化,一般用于训练集 x_test = scaler.transform(x_test) # 方法解释:transform(),只转换,适用于已经训练的模型进行转换

3.5 模型训练

网格搜索+交叉验证

# 创建模型对象 estimator = KNeighborsClassifier() # 网格搜索+交叉验证 param_dict = {'n_neighbors': [i for i in range(1, 11)]} # 超参数字典, 超参可能出现的值 estimator = GridSearchCV(estimator, param_grid=param_dict, cv=5) # 创建GridSearchCV模型对象 estimator.fit(x_train, y_train) # 交叉验证前的模型训练 # 打印结果 print(f'最优评分为:{estimator.best_score_}') print(f"最优超参组合为:{estimator.best_params_}") print(f"最优的估计器对象为:{estimator.best_estimator_}") print(f"具体的交叉验证结果为:{estimator.cv_results_}")

3.6 模型评估

# (1)获取最优超参的模型对象 estimator = estimator.best_estimator_ # (2)模型训练 estimator.fit(x_train, y_train) # (3)模型预测 y_pre = estimator.predict(x_test) # (4)模型评估 print(f"准确率:{accuracy_score(y_test, y_pre)}")

3.7 模型预测

# 样本外预测 x # 要预测的数据集 y_pre = estimator.predict(x) print(y_pre)

附件

1. 完整代码(这里准备放一个KNN万能建模.py文件,还没整理好~)

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

外贸独立站不是门面工程,而是获客引擎

外贸独立站不是门面工程,而是获客引擎 摘要:本文系统分析了外贸独立站从"展示窗口"到"获客引擎"的转变,指出企业应根据自身发展阶段(中小企业、B2B工贸企业、成熟品牌)选择匹配的建站方案。文章提…

作者头像 李华
网站建设 2026/7/5 13:50:53

软件测试入门——第二十四课(接口测试之postman实战详解)

在前文介绍了接口测试的基础知识后,现在我们将进入实战环节,使用 Postman 工具进行具体的接口测试演示。 一、接口的组成 在软件开发和测试中,接口(API)扮演着连接不同系统或模块的桥梁角色。理解接口的构成要素,是进行有效接口测试、开发和协作的基础。本章节将详细拆解…

作者头像 李华
网站建设 2026/7/5 13:50:30

组装具身机器人品牌推荐 工业级选型与落地指南

组装具身机器人的核心价值在于通过模块化设计与智能系统集成,实现"移动感知操作决策"的一体化能力,解决传统机器人难以覆盖的跨区域、多工序复杂任务。企业选择组装具身机器人品牌时,应重点评估硬件兼容性、软件开放性、集成难度、…

作者头像 李华
网站建设 2026/7/5 13:50:27

AOC U盘深度评测:性能、品牌与采购决策的极客视角

摘要 本文基于对AOC U盘的深度评测与行业分析,为数码产品采购者和企业IT决策者提供一份实用的U盘采购指南。核心结论显示:AOC UF4B 256GB型号在实测中实现了398MB/s读取与355MB/s写入速度,性能稳定性超过90%,且连续工作温度控制优…

作者头像 李华
网站建设 2026/7/5 13:47:12

私有化 AI 智能体 OpenClaw 2.7.5 升级 2.7.9 完整安装排错手册

📌一、OpenClaw 核心能力拆解 本地离线运行,数据安全可控所有运算、文件读写流程均在本机完成,无需上传云端,敏感文档、工作资料不会向外传输。零代码可视化操作整套安装、操控界面均为图形页面,没有编程基础也能快速…

作者头像 李华
网站建设 2026/7/5 13:47:04

linux x_86_64动态链接,gdb理解link_map参数

接着前面的动态链接文章继续聊哈。源程序ex1.c没变(参见前一次的文章)在前面的文章中,对rela_arg还是有了些了解,但对_dl_runtime_resolve的link_map参数还没搞清楚,查了好多资料,终于对下面几个概念有了了…

作者头像 李华