scikit-learn

scikit-learn

热门

使用 scikit-learn 在 Python 中进行机器学习。适用于监督学习(分类、回归)、无监督学习(聚类、降维)、模型评估、超参数调优、预处理或构建机器学习流水线。提供算法、预处理技术、流水线和最佳实践的全面参考文档。

3.8万Star
3574Fork
更新于 2026/8/29
SKILL.md
只读
名称
scikit-learn
描述

使用 scikit-learn 在 Python 中进行机器学习。适用于监督学习(分类、回归)、无监督学习(聚类、降维)、模型评估、超参数调优、预处理或构建机器学习流水线。提供算法、预处理技术、流水线和最佳实践的全面参考文档。

Scikit-learn

概述

本技能提供使用 scikit-learn(经典机器学习的行业标准 Python 库)进行机器学习任务的全面指导。适用于分类、回归、聚类、降维、预处理、模型评估以及构建生产级机器学习流水线。

安装

已针对 scikit-learn 1.8.0(稳定版;2025 年 12 月)进行测试。需要 Python 3.11–3.14(1.8+ 提供自由线程 CPython 3.14 wheels)。

安装 PyPI 包 scikit-learn(而不是 PyPI 上已弃用的 sklearn 包)。在代码中导入为 sklearn

# 使用 uv 安装 scikit-learn
uv pip install "scikit-learn>=1.7"

# 可选:绘图工具和捆绑脚本依赖项
uv pip install "scikit-learn[plots]" matplotlib seaborn

# 通常与以下一起使用
uv pip install pandas numpy

检查您的版本:

import sklearn
print(sklearn.__version__)

何时使用此技能

在以下情况下使用 scikit-learn 技能:

  • 构建分类或回归模型
  • 执行聚类或降维
  • 为机器学习预处理和转换数据
  • 通过交叉验证评估模型性能
  • 使用网格或随机搜索调整超参数
  • 为生产工作流创建机器学习流水线
  • 比较不同算法以完成任务
  • 处理结构化(表格)和文本数据
  • 需要可解释的经典机器学习方法

快速开始

分类示例

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# 分割数据
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42
)

# 预处理
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 训练模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train_scaled, y_train)

# 评估
y_pred = model.predict(X_test_scaled)
print(classification_report(y_test, y_pred))

混合数据的完整流水线

from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.ensemble import GradientBoostingClassifier

# 定义特征类型
numeric_features = ['age', 'income']
categorical_features = ['gender', 'occupation']

# 创建预处理流水线
numeric_transformer = Pipeline([
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())
])

categorical_transformer = Pipeline([
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))
])

# 组合转换器
preprocessor = ColumnTransformer([
    ('num', numeric_transformer, numeric_features),
    ('cat', categorical_transformer, categorical_features)
])

# 完整流水线
model = Pipeline([
    ('preprocessor', preprocessor),
    ('classifier', GradientBoostingClassifier(random_state=42))
])

# 拟合和预测
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

核心能力

五个能力领域在 references/core_capabilities.md 中有文档说明,每个主题的详细信息在 references/supervised_learning.mdreferences/unsupervised_learning.mdreferences/model_evaluation.mdreferences/preprocessing.mdreferences/pipelines_and_composition.md 中:

  1. 监督学习 — 分类和回归估计器家族。
  2. 无监督学习 — 聚类、分解和流形学习。
  3. 模型评估和选择 — 指标、交叉验证和超参数搜索。
  4. 数据预处理 — 缩放、编码、插补和特征选择。
  5. 流水线和组合PipelineColumnTransformer

始终在 Pipeline 内拟合预处理,以便在每个交叉验证折上重新拟合;在分割前缩放或插补会将测试信息泄漏到训练中。

两个完整工作流在 references/common_workflows.md 中。

示例脚本

分类流水线

运行完整的分类工作流,包括预处理、模型比较、超参数调优和评估:

uv run python scripts/classification_pipeline.py

此脚本演示:

  • 处理混合数据类型(数值和分类)
  • 使用交叉验证进行模型比较
  • 使用 GridSearchCV 进行超参数调优
  • 使用多个指标进行全面评估
  • 特征重要性分析

聚类分析

执行聚类分析,包括算法比较和可视化:

uv run python scripts/clustering_analysis.py

此脚本演示:

  • 找到最佳聚类数(肘部法、轮廓分析)
  • 比较多种聚类算法(K-Means、DBSCAN、层次聚类、高斯混合)
  • 在没有真实标签的情况下评估聚类质量
  • 使用 PCA 投影可视化结果

参考文档

此技能包含全面的参考文件,用于深入探讨特定主题:

快速参考

文件: references/quick_reference.md

  • 常见导入模式和安装说明
  • 常见任务的快速工作流模板
  • 算法选择速查表
  • 常见模式和陷阱
  • 性能优化技巧

监督学习

文件: references/supervised_learning.md

  • 线性模型(回归和分类)
  • 支持向量机
  • 决策树和集成方法
  • K 近邻、朴素贝叶斯、神经网络
  • 算法选择指南

无监督学习

文件: references/unsupervised_learning.md

  • 所有聚类算法及其参数和使用场景
  • 降维技术
  • 异常值和新颖性检测
  • 高斯混合模型
  • 方法选择指南

模型评估

文件: references/model_evaluation.md

  • 交叉验证策略
  • 超参数调优方法
  • 分类、回归和聚类指标
  • 学习和验证曲线
  • 模型选择的最佳实践

预处理

文件: references/preprocessing.md

  • 特征缩放和归一化
  • 编码分类变量
  • 缺失值插补
  • 特征工程技术
  • 自定义转换器

流水线和组合

文件: references/pipelines_and_composition.md

  • 流水线构建和使用
  • 用于混合数据类型的 ColumnTransformer
  • 用于并行转换的 FeatureUnion
  • 完整的端到端示例
  • 最佳实践

最佳实践

始终使用流水线

流水线防止数据泄漏并确保一致性:

# 好:预处理在流水线中
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('model', LogisticRegression())
])

# 坏:预处理在外部(可能泄漏信息)
X_scaled = StandardScaler().fit_transform(X)

仅在训练数据上拟合

切勿在测试数据上拟合:

# 好
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)  # 仅转换

# 坏
scaler = StandardScaler()
X_all_scaled = scaler.fit_transform(np.vstack([X_train, X_test]))

分类时使用分层分割

保持类别分布:

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42
)

设置随机状态以确保可重现性

model = RandomForestClassifier(n_estimators=100, random_state=42)

选择合适的指标

  • 平衡数据:准确率、F1 分数
  • 不平衡数据:精确率、召回率、ROC AUC、平衡准确率
  • 成本敏感:定义自定义评分器

在需要时缩放特征

需要特征缩放的算法:

  • SVM、KNN、神经网络
  • 带正则化的 PCA、线性/逻辑回归
  • K-Means 聚类

不需要缩放的算法:

  • 基于树的模型(决策树、随机森林、梯度提升)
  • 朴素贝叶斯

常见问题排查

ConvergenceWarning

问题: 模型未收敛
解决方案: 增加 max_iter 或缩放特征

model = LogisticRegression(max_iter=1000)

测试集性能不佳

问题: 过拟合
解决方案: 使用正则化、交叉验证或更简单的模型

# 添加正则化
model = Ridge(alpha=1.0)

# 使用交叉验证
scores = cross_val_score(model, X, y, cv=5)

大数据集内存错误

解决方案: 使用专为大数据设计的算法

# 对大数据集使用 SGD
from sklearn.linear_model import SGDClassifier
model = SGDClassifier()

# 或使用 MiniBatchKMeans 进行聚类
from sklearn.cluster import MiniBatchKMeans
model = MiniBatchKMeans(n_clusters=8, batch_size=100)

其他资源