海口建站模板厂家搜索引擎提交入口大全
第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 pltplt.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.00precision recall f1-score supportsetosa 1.00 1.00 1.00 16versicolor 1.00 1.00 1.00 19virginica 1.00 1.00 1.00 15accuracy 1.00 50macro avg 1.00 1.00 1.00 50
weighted avg 1.00 1.00 1.00 50
可视化
可以通过混淆矩阵展示分类结果:
from sklearn.metrics import ConfusionMatrixDisplayConfusionMatrixDisplay.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 的
Pipeline
和GridSearchCV
进行超参数调优。
2. 传统机器学习模型在 AI 大模型时代的适用场景
尽管大模型(如 GPT、BERT)在许多领域表现出色,但传统机器学习模型仍然具有重要价值:
- 小数据集:当数据量有限时,传统模型往往表现更稳定。
- 可解释性:传统模型(如线性回归、决策树)更容易解释,适合需要透明度的场景。
- 计算资源受限:传统模型通常计算成本较低,适合嵌入式设备或边缘计算。
通过结合传统机器学习与 AI 大模型的优势,可以更好地应对不同场景的需求。