1. 项目概述与背景
鸢尾花分类是机器学习领域的经典入门项目,就像程序员学习编程时的"Hello World"一样。这个项目使用K最近邻(KNN)算法,根据鸢尾花的花萼和花瓣尺寸来预测其品种。我在实际工作中发现,很多初学者虽然能跑通代码,但对背后的原理和细节一知半解。本文将带你从零开始,不仅实现分类,更要理解每个步骤的why和how。
鸢尾花数据集包含150个样本,每个样本有4个特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,以及对应的品种标签(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。KNN算法的核心思想是"物以类聚"——一个新样本的类别由其最近的K个邻居的多数投票决定。
提示:虽然代码只有几十行,但其中每个选择都有讲究。比如为什么要标准化?为什么测试集不能用fit_transform?这些细节决定了你是"调包侠"还是真正的实践者。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据准备与预处理
2.1 数据加载与探索
首先用pandas加载数据,这是机器学习项目的第一步也是关键一步。原始数据通常存放在CSV文件中,列名需要手动指定:
python复制import pandas as pd
df = pd.read_csv('data/iris.csv', sep=',',
names=['花萼长', '花萼宽', '花瓣长', '花瓣宽', '标签'])
检查数据维度很重要:(150,5)表示150个样本,5列(4个特征+1个标签)。这一步能发现数据是否完整加载:
python复制print(df.shape) # 输出 (150,5)
print(df.head()) # 查看前5行数据
2.2 特征与标签分离
机器学习模型需要明确区分输入特征(X)和预测目标(y):
python复制x = df[['花萼长','花萼宽', '花瓣长', '花瓣宽']]
y = df['标签']
这里有个细节:特征选择使用双括号[[]]返回DataFrame,而单括号[]返回Series。KNN等算法要求X是二维结构,这点容易被忽视。
2.3 数据集划分
使用train_test_split将数据分为训练集和测试集:
python复制from sklearn.model_
