《Python实战进阶》第30集:Scikit-learn 入门:分类与回归模型

发布于:2025-03-28 ⋅ 阅读:(29) ⋅ 点赞:(0)

第30集:Scikit-learn 入门:分类与回归模型


摘要

Scikit-learn 是 Python 数据科学生态系统中最重要的库之一,广泛应用于机器学习任务。本集聚焦于 Scikit-learn 的核心功能,涵盖分类与回归两大经典任务。我们将学习如何使用 Scikit-learn 构建基础的机器学习模型,并通过实战案例掌握其在数据科学中的实际应用。同时,我们还将探讨传统机器学习模型在 AI 大模型时代的适用场景。
在这里插入图片描述


核心概念和知识点

1. Scikit-learn 的模块化设计

Scikit-learn 的设计遵循一致的接口规范,主要分为以下几部分:

  • 数据预处理:包括标准化、归一化、特征编码等。
  • 模型构建:提供丰富的算法实现,如线性回归、逻辑回归、支持向量机(SVM)等。
  • 模型评估:支持多种评估指标,例如准确率、F1 分数、均方误差(MSE)等。
  • 模型优化:通过交叉验证、网格搜索等方式优化模型性能。

2. 常用算法

  • 线性回归:用于连续值预测的回归任务。
  • 逻辑回归:用于二分类或多分类问题。
  • 支持向量机(SVM):适用于高维数据的分类与回归任务。

3. 数据预处理

  • 标准化:将数据转换为均值为 0、标准差为 1 的分布。
  • 归一化:将数据缩放到 [0, 1] 区间。

4. 模型评估指标

  • 回归任务:均方误差(MSE)、均绝对误差(MAE)、R² 分数。
  • 分类任务:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 分数。

实战案例

案例 1:使用 Scikit-learn 预测房价(回归任务)

背景

我们将使用波士顿房价数据集,构建一个线性回归模型来预测房价。

代码实现
import numpy as np
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 加载数据集
boston = load_boston()
X = pd.DataFrame(boston.data, columns=boston.feature_names)
y = boston.target

# 数据集划分
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)

# 构建线性回归模型
model = LinearRegression()
model.fit(X_train_scaled, y_train)

# 模型预测
y_pred = model.predict(X_test_scaled)

# 模型评估
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"Mean Squared Error: {mse:.2f}")
print(f"R² Score: {r2:.2f}")
输出结果
Mean Squared Error: 23.87
R² Score: 0.74
可视化

我们可以绘制实际房价与预测房价的对比图:

import matplotlib.pyplot as plt

plt.scatter(y_test, y_pred, alpha=0.5)
plt.xlabel("Actual Prices")
plt.ylabel("Predicted Prices")
plt.title("Actual vs Predicted Prices")
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--')  # 对角线
plt.show()

案例 2:使用逻辑回归对鸢尾花数据进行分类

背景

鸢尾花数据集是经典的分类问题数据集,包含 3 类鸢尾花的特征。我们将使用逻辑回归模型对其进行分类。

代码实现
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 构建逻辑回归模型
model = LogisticRegression(max_iter=200)
model.fit(X_train_scaled, y_train)

# 模型预测
y_pred = model.predict(X_test_scaled)

# 模型评估
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred, target_names=iris.target_names)

print(f"Accuracy: {accuracy:.2f}")
print(report)
输出结果
Accuracy: 1.00
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        16
  versicolor       1.00      1.00      1.00        19
   virginica       1.00      1.00      1.00        15

    accuracy                           1.00        50
   macro avg       1.00      1.00      1.00        50
weighted avg       1.00      1.00      1.00        50
可视化

可以通过混淆矩阵展示分类结果:

from sklearn.metrics import ConfusionMatrixDisplay

ConfusionMatrixDisplay.from_predictions(y_test, y_pred, display_labels=iris.target_names)
plt.title("Confusion Matrix")
plt.show()

总结

Scikit-learn 提供了简单易用的接口,使得初学者能够快速上手机器学习的核心算法。通过本集的学习,我们掌握了如何使用 Scikit-learn 构建回归与分类模型,并通过实战案例深入理解了数据预处理、模型训练与评估的完整流程。


扩展思考

1. 如何将 Scikit-learn 与深度学习框架结合?

Scikit-learn 可以作为深度学习框架(如 TensorFlow 和 PyTorch)的补充工具。例如:

  • 使用 Scikit-learn 进行数据预处理和特征工程。
  • 使用深度学习框架构建复杂模型,然后利用 Scikit-learn 的 PipelineGridSearchCV 进行超参数调优。

2. 传统机器学习模型在 AI 大模型时代的适用场景

尽管大模型(如 GPT、BERT)在许多领域表现出色,但传统机器学习模型仍然具有重要价值:

  • 小数据集:当数据量有限时,传统模型往往表现更稳定。
  • 可解释性:传统模型(如线性回归、决策树)更容易解释,适合需要透明度的场景。
  • 计算资源受限:传统模型通常计算成本较低,适合嵌入式设备或边缘计算。

通过结合传统机器学习与 AI 大模型的优势,可以更好地应对不同场景的需求。