零基础入门机器学习:用Scikit-learn实现鸢尾花分类

发布于:2025-03-19 ⋅ 阅读:(15) ⋅ 点赞:(0)

适合人群:机器学习新手 | 数据分析爱好者 | 需快速展示案例的学生

一、引言:为什么要学这个案例?

目的:明确机器学习解决什么问题,建立学习信心。

  • 机器学习定义:让计算机从数据中自动学习规律(如分类鸢尾花品种)。

  • 为什么选鸢尾花数据集:数据量小、特征明确,适合教学演示。

  • Scikit-learn优势:提供现成算法和工具,无需从头写数学公式。

二、环境准备:5分钟快速上手

目的:搭建可运行的代码环境,避免卡在工具安装环节。

  1. 安装库(命令逐行执行):

    pip install numpy pandas matplotlib scikit-learn  
  2. 加载数据

    from sklearn.datasets import load_iris  
    iris = load_iris()  
    X, y = iris.data, iris.target  # X:特征矩阵,y:品种标签  

三、数据探索:理解数据才能用好模型

目的:避免“垃圾进垃圾出”,确保数据质量。

  1. 查看特征含义

    print(iris.feature_names)  # 输出:['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度']  
    print(iris.target_names)   # 输出:['山鸢尾', '变色鸢尾', '维吉尼亚鸢尾']  
  2. 可视化特征分布(代码+作用):

    import matplotlib.pyplot as plt  
    # 绘制花瓣长度与宽度的散点图  
    plt.scatter(X[:, 2], X[:, 3], c=y)  
    plt.xlabel('花瓣长度')  
    plt.ylabel('花瓣宽度')  
    plt.show()  

    ✅ 作用:观察不同品种在特征空间中的分布是否可分。

四、数据预处理:让模型更好学习

目的:消除特征尺度差异,提升模型收敛速度与精度。

  1. 标准化处理

    from sklearn.preprocessing import StandardScaler  
    scaler = StandardScaler()  
    X_scaled = scaler.fit_transform(X)  # 转换为均值为0、方差为1的分布  
  2. 划分训练集与测试集

    from sklearn.model_selection import train_test_split  
    X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2)  

✅ 作用

  • 训练集:用于模型学习规律

  • 测试集:模拟新数据评估模型效果

五、模型训练与评估:三步完成分类

目的:掌握机器学习核心流程,理解模型性能评估方法。

  1. 选择并训练模型

    from sklearn.svm import SVC  
    model = SVC(kernel='linear')  # 使用线性核的支持向量机  
    model.fit(X_train, y_train)   # 喂入训练数据  
  2. 预测与评估

    from sklearn.metrics import accuracy_score, confusion_matrix  
    y_pred = model.predict(X_test)  
    
    # 计算准确率  
    print("准确率:", accuracy_score(y_test, y_pred))  
    
    # 查看混淆矩阵  
    print("混淆矩阵:\n", confusion_matrix(y_test, y_pred))  

✅ 指标解释

  • 准确率:正确预测的比例(越高越好)

  • 混淆矩阵:展示各类别预测结果与真实值的对应关系

六、模型优化:让效果更上一层楼

目的:理解调参重要性,提升模型泛化能力。

  1. 网格搜索调参

    from sklearn.model_selection import GridSearchCV  
    
    # 定义参数范围  
    param_grid = {'C': [0.1, 1, 10], 'gamma': [1, 0.1, 0.01]}  
    
    # 自动搜索最优参数  
    grid = GridSearchCV(SVC(), param_grid, cv=5)  
    grid.fit(X_train, y_train)  
    
    print("最优参数:", grid.best_params_)  

✅ 作用:通过交叉验证找到最佳超参数组合(如SVM的惩罚系数C)。

七、总结与下一步

目的:明确学习成果,规划后续方向。

  1. 机器学习局限性

    • 依赖数据质量(需人工特征工程)

    • 复杂问题(如图像识别)需转向深度学习

  2. 推荐学习路径