用途
本技能为使用 scikit-learn 进行经典机器学习任务提供系统化参考。scikit-learn 是 Python 中经典机器学习的行业标准库,本技能覆盖分类、回归、聚类、降维、预处理、模型评估以及构建可用于生产的机器学习流水线。
主要能力
监督学习
提供分类与回归算法,包括:线性模型(Logistic Regression、Linear Regression、Ridge、Lasso、ElasticNet);树模型(Decision Trees、Random Forest、Gradient Boosting);支持向量机(SVC、SVR,支持多种核函数);集成方法(AdaBoost、Voting、Stacking);神经网络(MLPClassifier、MLPRegressor);以及 Naive Bayes、K-Nearest Neighbors。适用于预测离散类别(如垃圾邮件检测、图像分类、欺诈检测)和连续值(如价格预测、需求预测)。
无监督学习
通过聚类与降维发现无标签数据中的模式。聚类算法包括:基于划分的 K-Means、MiniBatchKMeans;基于密度的 DBSCAN、HDBSCAN、OPTICS;层次聚类 AgglomerativeClustering;概率模型 Gaussian Mixture Models;以及 MeanShift、SpectralClustering、BIRCH。降维方法包括:线性的 PCA、TruncatedSVD、NMF;流形学习的 t-SNE、UMAP、Isomap、LLE;特征提取的 FastICA、LatentDirichletAllocation。适用于客户分群、异常检测、数据可视化、特征降维、主题建模、图像压缩等。
模型评估与选择
提供稳健的评估、交叉验证与超参数调优工具。交叉验证策略包括 KFold、StratifiedKFold(分类)、TimeSeriesSplit(时序数据)、GroupKFold(分组样本)。超参数调优包括 GridSearchCV(穷举搜索)、RandomizedSearchCV(随机采样)、HalvingGridSearchCV(逐次减半)。评估指标涵盖分类(accuracy、precision、recall、F1-score、ROC AUC、混淆矩阵)、回归(MSE、RMSE、MAE、R²、MAPE)、聚类(silhouette score、Calinski-Harabasz、Davies-Bouldin)。
数据预处理
将原始数据转换为适合机器学习的格式。缩放与归一化包括 StandardScaler、MinMaxScaler、RobustScaler、Normalizer。类别变量编码包括 OneHotEncoder、OrdinalEncoder、LabelEncoder(编码目标标签 y,而非特征)、TargetEncoder(用交叉拟合的目标均值编码高基数类别特征)。缺失值处理包括 SimpleImputer、KNNImputer、IterativeImputer。特征工程包括 PolynomialFeatures、KBinsDiscretizer 以及特征选择(RFE、SelectKBest、SelectFromModel)。
流水线与组合
构建可复现、可用于生产的机器学习工作流。关键组件包括 Pipeline(顺序连接转换器与估计器)、ColumnTransformer(对不同列应用不同预处理)、FeatureUnion(并行组合多个转换器)、TransformedTargetRegressor(转换目标变量)。其优势在于防止交叉验证中的数据泄漏、简化代码、支持联合超参数调优、保证训练与预测的一致性。
使用方式
安装命令:
# 使用 uv 安装 scikit-learn
uv pip install scikit-learn
# 可选:安装可视化依赖
uv pip install matplotlib seaborn
# 常与以下库配合使用
uv pip install pandas numpy
本技能附带两个可运行的端到端脚本:
python scripts/classification_pipeline.py # 混合数据预处理、模型比较、GridSearchCV、评估、特征重要性
python scripts/clustering_analysis.py # 最优 k 搜索、K-Means/DBSCAN/Agglomerative/GMM 比较、PCA 可视化
快速开始:最小分类流程为分层 train_test_split → StandardScaler(仅在训练集上拟合)→ 拟合估计器 → classification_report。对于数值与类别混合数据,将预处理包装在 Pipeline 内的 ColumnTransformer 中,以便交叉验证时不发生泄漏。
常见工作流:
- 分类模型:加载数据 → 分层 train_test_split → Pipeline 内 ColumnTransformer 预处理 → GridSearchCV 调优 → 在留出测试集上输出 classification_report。
- 聚类分析:StandardScaler → 对 k 进行 silhouette 扫描以选择 optimal_k → 拟合 KMeans → PCA(n_components=2) 投影用于可视化。
适用场景
当需要构建分类或回归模型、执行聚类或降维、为机器学习预处理和转换数据、用交叉验证评估模型性能、用网格或随机搜索调优超参数、为生产工作流创建 ML 流水线、比较不同算法、处理结构化(表格)与文本数据,或需要可解释的经典机器学习方法时,使用本技能。
限制与不适用场景
以下场景应改用其他技能:贝叶斯模型(后验、可信区间、MCMC 诊断)使用 alterlab-pymc;删失的生存时间结局(Cox 模型、生存森林、C-index)使用 alterlab-scikit-survival;UMAP 嵌入及 n_neighbors / min_dist 调优使用 alterlab-umap;用 SHAP 值解释已拟合模型的预测使用 alterlab-shap;系数表、p 值与残差诊断等推断任务使用 alterlab-statsmodels。
版本说明(scikit-learn 1.8–1.9)
- LogisticRegression(penalty=...) 已弃用(1.10 移除):改用 l1_ratio(0 表示 L2,1 表示 L1,中间值表示弹性网络),无惩罚时使用 C=np.inf。
- SVC(probability=True) 已弃用(1.11 移除):需要概率时用 CalibratedClassifierCV(SVC(), ensemble=False) 包装模型。
- MDS(metric=True/False) 改为 metric_mds=;HDBSCAN 除非显式设置 copy,否则会发出警告。
- mean_squared_error(..., squared=False) 已移除;改用 root_mean_squared_error。
最佳实践要点
- 始终在 Pipeline 内进行预处理(防止泄漏);仅在训练集上拟合,在测试集上转换。
- 分类划分使用 stratify=y;在各处设置 random_state 以保证可复现性。
- 对 SVM/KNN/NN/PCA/正则化线性模型/K-Means 需要缩放特征;树模型和 Naive Bayes 不需要。
- 根据问题选择指标:平衡数据用 F1/accuracy;不平衡数据用 precision/recall/ROC AUC/balanced accuracy。
参考文档
本技能包含多个参考文件:quick_reference.md(常用导入、工作流模板、算法选择速查表、常见陷阱、性能优化);supervised_learning.md(监督学习算法详解);unsupervised_learning.md(无监督学习算法详解);model_evaluation.md(交叉验证、调优、指标、学习曲线);preprocessing.md(缩放、编码、缺失值、特征工程、自定义转换器);pipelines_and_composition.md(流水线构建、ColumnTransformer、FeatureUnion、端到端示例);worked_examples.md(快速开始片段与分步工作流);best_practices_and_troubleshooting.md(流水线/泄漏纪律、可复现性、指标选择、ConvergenceWarning、过拟合、大数据集内存错误的修复)。
附加资源
官方文档:https://scikit-learn.org/stable/ 用户指南:https://scikit-learn.org/stable/user_guide.html API 参考:https://scikit-learn.org/stable/api/index.html 示例库:https://scikit-learn.org/stable/auto_examples/index.html