Scikit-learn 中文教程

第二部分:Scikit-learn 核心基础
第 3 章 Scikit-learn 核心设计与 API 体系
第 4 章 数据集模块与数据划分
第三部分:数据预处理与特征工程
第 5 章 数据预处理核心模块(sklearn.preprocessing)
第 6 章 特征工程:提取、选择与构建
第四部分:模型评估与验证
第 7 章 模型评估指标(按任务类型划分)
第 8 章 模型验证与超参数调优
第五部分:Scikit-learn 核心算法模块
第 9 章 有监督学习:分类算法
第 10 章 有监督学习:回归算法
第 11 章 无监督学习:聚类与密度算法
第 12 章 半监督学习与其他常用算法
第八部分:性能优化与问题解决
第 18 章 Scikit-learn 性能优化
第 19 章 Scikit-learn 常见问题与解决方案

13.1 分类实战:鸢尾花品种分类

Scikit-learn教程:鸢尾花分类实战与完整项目流程解析

Scikit-learn 中文教程

本章节通过Scikit-learn实战项目,详细介绍鸢尾花品种分类的完整流程,包括数据解析、预处理、多分类算法训练、模型评估与调优,帮助初学者掌握分类任务的基础实现方法。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

分类实战:鸢尾花品种分类

欢迎来到Scikit-learn教程的实战章节!本章将带你通过一个经典的机器学习项目——鸢尾花品种分类,系统地学习分类任务的基础流程。鸢尾花数据集是机器学习入门的最佳实践,因为它简单、清晰,适合新手快速上手。我们将从项目需求出发,一步步解析数据、预处理、训练模型、评估调优,最后总结整个流程。这不仅是一个技术演练,更是你掌握分类任务核心技能的关键一步。

项目需求与数据解析

在开始任何机器学习项目前,明确项目需求至关重要。本项目目标:使用鸢尾花的特征(如花萼长度、宽度等)预测其品种(如Setosa、Versicolor、Virginica)。这是一个典型的多分类问题,因为品种有三个类别。

首先,我们来解析数据。Scikit-learn内置了鸢尾花数据集,使用它非常方便。通过load_iris()函数加载数据,它会返回一个包含特征矩阵和目标向量的对象。特征矩阵有150个样本,每个样本4个特征(花萼和花瓣的长度与宽度);目标向量有3个类别标签。解析数据后,我们可以初步查看数据分布和统计信息,确保数据质量良好。例如,使用iris.data获取特征,iris.target获取标签,并用pandas或简单打印来检查。

代码示例(Python):

from sklearn.datasets import load_iris
import pandas as pd

iris = load_iris()
X = iris.data  # 特征矩阵
y = iris.target  # 目标向量
df = pd.DataFrame(X, columns=iris.feature_names)
df['species'] = y
print(df.head())
print("特征形状:", X.shape)
print("类别分布:", pd.Series(y).value_counts())

解析数据显示,数据均衡,特征值在合理范围内,没有缺失值,这简化了后续处理。

数据预处理与特征工程(简单标准化)

数据预处理是提升模型性能的关键步骤。对于鸢尾花数据,特征值具有不同量纲(例如,长度单位),直接使用可能导致某些算法(如SVM)偏好大数值特征。因此,我们采用简单标准化(Standardization),将特征缩放为均值为0、方差为1的标准正态分布。

Scikit-learn的StandardScaler类能轻松实现这一点。标准化不仅加速算法收敛,还提高模型稳定性。我们先将数据分为训练集和测试集,然后对训练集进行标准化,并用同样的变换应用到测试集,以避免数据泄露。

步骤:

  1. 使用train_test_split划分数据(例如,80%训练,20%测试)。
  2. StandardScaler拟合训练集特征。
  3. 转换训练集和测试集特征。

代码示例:

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

标准化后,特征值范围一致,模型训练更高效。

多分类算法训练(逻辑回归 / SVM / 随机森林)

现在进入核心环节:训练多分类模型。我们将介绍三种常用算法——逻辑回归(Logistic Regression)、支持向量机(SVM)和随机森林(Random Forest),并展示如何在Scikit-learn中实现。

  • 逻辑回归:尽管名为回归,但它广泛用于分类任务。Scikit-learn的LogisticRegression默认支持多分类(使用OvR策略)。适合线性可分数据。
  • 支持向量机(SVM):通过核函数处理非线性边界。使用SVC类,对于多分类,内部使用一对一或一对多策略。
  • 随机森林:基于决策树的集成方法,能处理复杂模式且不易过拟合。RandomForestClassifier天生支持多分类。

我们将分别训练这些模型,使用标准化后的训练数据,并保持简单配置以便比较。

代码示例:

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier

models = {
    'Logistic Regression': LogisticRegression(random_state=42),
    'SVM': SVC(random_state=42),
    'Random Forest': RandomForestClassifier(random_state=42)
}

for name, model in models.items():
    model.fit(X_train_scaled, y_train)
    print(f"{name} 训练完成")

每个模型都有其优势和适用场景,后续评估将帮助选择最佳模型。

模型评估与调优(交叉验证 + 网格搜索)

训练模型后,评估其性能至关重要。我们使用准确率作为主要指标,但多分类问题也需考虑混淆矩阵等。首先,用测试集进行初步评估。

初步评估:

from sklearn.metrics import accuracy_score

for name, model in models.items():
    y_pred = model.predict(X_test_scaled)
    acc = accuracy_score(y_test, y_pred)
    print(f"{name} 测试集准确率: {acc:.2f}")

为了优化模型,我们采用交叉验证和网格搜索。交叉验证(如5折交叉验证)减少过拟合风险,网格搜索自动寻找最佳超参数。

  • 交叉验证:使用cross_val_score评估模型稳定性。
  • 网格搜索:用GridSearchCV探索参数组合,例如SVM的C和kernel参数。

示例以SVM调优:

from sklearn.model_selection import GridSearchCV

param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
grid_search = GridSearchCV(SVC(random_state=42), param_grid, cv=5)
grid_search.fit(X_train_scaled, y_train)
print("最佳参数:", grid_search.best_params_)
print("最佳交叉验证得分:", grid_search.best_score_)

通过调优,模型性能可能提升,并选出最适合该数据的算法。

项目总结:分类任务基础流程落地

恭喜你完成鸢尾花分类实战!本章节通过一个完整项目,演示了分类任务的基础流程:

  1. 需求明确:设定分类目标。
  2. 数据解析:加载和检查数据。
  3. 预处理:标准化特征以优化训练。
  4. 模型训练:尝试多种算法,比较初步效果。
  5. 评估调优:使用交叉验证和网格搜索提升模型。

关键点:

  • 数据预处理(如标准化)是模型成功的基础。
  • 多分类问题中,算法选择需考虑数据特性和复杂度。
  • 评估与调优确保模型泛化能力,避免过拟合。

对于初学者,这个流程是机器学习项目的通用模板。鸢尾花数据集虽简单,但原理可扩展到更复杂场景。继续实践,探索更多算法和技巧,逐步提升你的Scikit-learn技能!

在后续章节,我们将深入高级主题,如特征选择、模型集成等。保持学习,机器学习之路越走越宽。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包