No.1鸢尾花分类——整理
No.1鸢尾花分类——整理
一、库
- numpy:处理数组和矩阵运算(StandarScaler返回的就是numpy数组)
- pandas:提供DataFrame和Series数据结构,方便数据操作和分析。series是一维的数据结构,由索引index和数据value组成,dataframe是二维的,每一列都可以看作是Series。
- matplotlib:数据可视化库,用于绘制图形
- scikit-learn:
- load_iris:加载内置的数据集(不用去网站下载了。。。)
- train_test_split:划分训练集和测试集
- StandarScaler:数据标准化
- kNeighborsClassifier:K近邻分类器
- accuracy_score:计算分类准确率
二、加载数据集
- 特征与标签分离:X是特征数据(4列)y是标签(0,1,2)
- Pandas数据结构:DataFrame适合处理表格数据,Series存储一维标签。
三、划分训练集和测试集
- 划分的目的:防止模型在训练数据上过拟合(训练数据表现出色但新数据表现不佳),需要用独立的数据评估性能
- test_size=0.2:20%做测试集;random_state=42固定随机种子,确保结果可复现
- 分层抽样:默认根据标签分布划分,保持类别比例
四、数据标准化
- 为什么要标准化?
选择的KNN算法基于距离计算的,需要消除特征量纲差异。(在同一组数据中,不同特征的测量尺度或单位存在明显差异的情况,比如花萼的长度远大于花瓣的宽度)
量纲差异的问题有:权重不平衡:由于不同特征的尺度不同,模型对于数值较大的特征可能给予更多的权重,而对于数值较少的特征给予过少的权重。收敛速度差异:可能会导致收敛速度差异,使优化过程更难达到最优解。
为此,要将所有特征缩放到相似的尺度,方法有标准化(将数据转换为均值为0,标准查为1的分布),归一化(将数据缩放到0到1范围内)。
- 标准化的公式:
其中:
- fit_transform vs transform:
- fit_transform:在训练集计算均值和标准差,并应用转换。
- transform:在测试集使用训练集的均值和标准差,避免数据泄露。
五、KNN分类器的创建
-
KNN算法?
K-近邻算法,基于实例的监督学习算法,适用于分类和回归任务。核心思想:相似的样本在特征空间中彼此靠近。在预测时,通过查找测试样本的k个最近的邻居,根据这些邻居的标签进行多数投票(分类)或者平均值计算(回归)。KNN算法的具体实现等单独弄一个文档整理。。。
-
关键参数
- n_neighbors=3:选择最近的3个邻居
- 采用默认的欧式距离(其实就是两点之间的距离公式。。。)
- 距离计算公式:
六、训练模型
- KNN算法是基于实例的,就是没有显式的训练过程,是直接使用训练数据进行预测(惰性学习)——不从训练数据集中学到任何判别数据模型的函数,只记住训练数据集中的数据。我觉得可以理解为:大学准备期末考试,根据老师画的范围背,然后直接上去考试哈哈哈哈。
- fit()的作用:试讲数据保存到模型对象中,供后续预测的时候计算距离
- 惰性学习和急切学习是什么?
惰性知道了,急切学习是利用算法进行判断之前,先利用训练集数据通过训练得到一个目标函数,在需要进行判断的时候利用已经训练好的函数进行决策。
很明显能看出来,急切学习的训练时间会比较长,但是后期使用的时候会方便很多。
七、预测与评估
- 对于测试样本,计算与所有训练样本的距离,然后取最近的k个点投票
- 准确率计算公式:
八、可视化结果
展示模型在二维空间中的分类结果(只展示了前两个特征)
简化后信息会有丢失。。。
有没有什么方法可以可视化所有的特征信息???deepseek说可以用PCA降维,先挖个坑等回来填。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构