No.1鸢尾花分类——整理

No.1鸢尾花分类——整理

一、库

  1. numpy:处理数组和矩阵运算(StandarScaler返回的就是numpy数组)
  2. pandas:提供DataFrame和Series数据结构,方便数据操作和分析。series是一维的数据结构,由索引index和数据value组成,dataframe是二维的,每一列都可以看作是Series。
  3. matplotlib:数据可视化库,用于绘制图形
  4. scikit-learn:
    • load_iris:加载内置的数据集(不用去网站下载了。。。)
    • train_test_split:划分训练集和测试集
    • StandarScaler:数据标准化
    • kNeighborsClassifier:K近邻分类器
    • accuracy_score:计算分类准确率

二、加载数据集

  1. 特征与标签分离:X是特征数据(4列)y是标签(0,1,2)
  2. Pandas数据结构:DataFrame适合处理表格数据,Series存储一维标签。

三、划分训练集和测试集

  1. 划分的目的:防止模型在训练数据上过拟合(训练数据表现出色但新数据表现不佳),需要用独立的数据评估性能
  2. test_size=0.2:20%做测试集;random_state=42固定随机种子,确保结果可复现
  3. 分层抽样:默认根据标签分布划分,保持类别比例

四、数据标准化

  1. 为什么要标准化?

​ 选择的KNN算法基于距离计算的,需要消除特征量纲差异。(在同一组数据中,不同特征的测量尺度或单位存在明显差异的情况,比如花萼的长度远大于花瓣的宽度)

​ 量纲差异的问题有:权重不平衡:由于不同特征的尺度不同,模型对于数值较大的特征可能给予更多的权重,而对于数值较少的特征给予过少的权重。收敛速度差异:可能会导致收敛速度差异,使优化过程更难达到最优解。

​ 为此,要将所有特征缩放到相似的尺度,方法有标准化(将数据转换为均值为0,标准查为1的分布),归一化(将数据缩放到0到1范围内)。

  1. 标准化的公式:

z=xμσ

其中:μ是均值,σ​是标准差

  1. fit_transform vs transform
    • fit_transform:在训练集计算均值和标准差,并应用转换。
    • transform:在测试集使用训练集的均值和标准差,避免数据泄露。

五、KNN分类器的创建

  1. KNN算法?

    K-近邻算法,基于实例的监督学习算法,适用于分类和回归任务。核心思想:相似的样本在特征空间中彼此靠近。在预测时,通过查找测试样本的k个最近的邻居,根据这些邻居的标签进行多数投票(分类)或者平均值计算(回归)。KNN算法的具体实现等单独弄一个文档整理。。。

  2. 关键参数

  • n_neighbors=3:选择最近的3个邻居
  • 采用默认的欧式距离(其实就是两点之间的距离公式。。。)
  1. 距离计算公式:

d(p,q)=i=1n(piqi)2

六、训练模型

  1. KNN算法是基于实例的,就是没有显式的训练过程,是直接使用训练数据进行预测(惰性学习)——不从训练数据集中学到任何判别数据模型的函数,只记住训练数据集中的数据。我觉得可以理解为:大学准备期末考试,根据老师画的范围背,然后直接上去考试哈哈哈哈。
  2. fit()的作用:试讲数据保存到模型对象中,供后续预测的时候计算距离
  3. 惰性学习和急切学习是什么?

​ 惰性知道了,急切学习是利用算法进行判断之前,先利用训练集数据通过训练得到一个目标函数,在需要进行判断的时候利用已经训练好的函数进行决策。

​ 很明显能看出来,急切学习的训练时间会比较长,但是后期使用的时候会方便很多。

七、预测与评估

  1. 对于测试样本,计算与所有训练样本的距离,然后取最近的k个点投票
  2. 准确率计算公式:

Accuracy=

八、可视化结果

​ 展示模型在二维空间中的分类结果(只展示了前两个特征)

​ 简化后信息会有丢失。。。

​ 有没有什么方法可以可视化所有的特征信息???deepseek说可以用PCA降维,先挖个坑等回来填。。。

posted @   吃不着葡萄不吐葡萄皮  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示