Skip to content

参考

基于 scikit-learn 1.9.0 官方 API 文档 + 算法选型经验整理

速查

  • 算法选型一句话:表格数据 → 树模型集成(随机森林/梯度提升)打榜;线性可分 → 逻辑回归/SVM 基线;小样本高维 → 朴素贝叶斯/SVM;要可解释 → 决策树/线性模型
  • scikit-learn 版本:1.9.0(2025),Python ≥ 3.10,NumPy ≥ 1.19,SciPy ≥ 1.6
  • 安装pip install scikit-learn(含 NumPy/SciPy 依赖);打榜加装 xgboost lightgbm
  • 6 主力算法族 importlinear_model / svm / neighbors / naive_bayes / tree / ensemble
  • 评估 importsklearn.metrics(指标)/ sklearn.model_selection(划分/CV/调参)/ sklearn.preprocessing(标准化)
  • 经典数据集load_iris(分类)/ load_digits(多分类)/ load_wine(分类)/ load_bostonfetch_california_housing(回归,boston 因伦理问题 1.2 起移除)

算法选型决策表

场景首选算法备选理由
表格数据打榜梯度提升(XGBoost/LightGBM)随机森林树模型集成是表格任务事实标准
线性可分 / 强基线逻辑回归(分类)/ 岭回归(回归)线性 SVM快、稳、可解释,先跑基线再考虑复杂模型
小样本 + 高维(文本分类)朴素贝叶斯 / 线性 SVM逻辑回归小样本不易过拟合,高维表现好
中小样本 + 非线性RBF 核 SVM / 随机森林KNN万能核/集成,非线性边界
强可解释性需求决策树 / 线性模型规则/系数直接可读,合规审计友好
大数据(>10 万样本)LinearSVC / 随机森林 / SGD避免核 SVM核 SVM O(n²)+ 训练慢
特征量纲不一任何算法(但必须先标准化KNN/SVM/SGD/神经网络对量纲敏感

scikit-learn 17 算法族速查

算法族模块代表典型场景
线性模型linear_modelLinearRegression / Ridge / Lasso / LogisticRegression基线、可解释、高维
线性/二次判别分析discriminant_analysisLDA / QDA降维 + 分类、高斯假设
核岭回归kernel_ridgeKernelRidge小样本非线性回归
支持向量机svmSVC / SVR / LinearSVC中小样本、非线性边界
随机梯度下降linear_modelSGDClassifier / SGDRegressor大数据流式训练
最近邻neighborsKNeighborsClassifier懒惰学习、推荐原型
高斯过程gaussian_processGaussianProcessRegressor贝叶斯、不确定性估计
交叉分解cross_decompositionPLSRegression共线性回归
朴素贝叶斯naive_bayesGaussianNB / MultinomialNB文本分类、小样本
决策树treeDecisionTreeClassifier可解释、规则提取
集成方法ensembleRandomForest / GradientBoosting表格数据主力
多类多输出(各模块)OneVsRestClassifier多标签、多输出
特征选择feature_selectionSelectKBest降维、去噪
半监督semi_supervisedLabelSpreading标注成本高时
等渗回归isotonicIsotonicRegression单调回归(校准)
概率校准calibrationCalibratedClassifierCV概率可信度修正
神经网络neural_networkMLPClassifier / MLPRegressor小型 MLP(深度学习用 PyTorch/TF)

核心 API 速查

估计器统一接口

python
estimator.fit(X, y)              # 训练
estimator.predict(X)             # 预测标签(分类)/ 数值(回归)
estimator.predict_proba(X)       # 预测每类概率(分类特有)
estimator.score(X, y)            # 评分(分类=accuracy,回归=R²)
estimator.transform(X)           # 转换(预处理器/特征选择)
estimator.fit_transform(X, y)    # 拟合 + 转换(等价 fit 后 transform,但更高效)

数据划分与交叉验证(sklearn.model_selection

python
train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
KFold(n_splits=5, shuffle=True, random_state=42)
StratifiedKFold(n_splits=5, shuffle=True, random_state=42)  # 分类必用
cross_val_score(estimator, X, y, cv=kf, scoring='f1_macro')
GridSearchCV(estimator, param_grid, cv=5, scoring='f1', n_jobs=-1)
RandomizedSearchCV(estimator, param_distributions, n_iter=50, cv=5)

评估指标(sklearn.metrics

python
# 分类
accuracy_score(y_true, y_pred)
precision_score(y_true, y_pred, average='macro')
recall_score(y_true, y_pred, average='macro')
f1_score(y_true, y_pred, average='macro')
confusion_matrix(y_true, y_pred)
classification_report(y_true, y_pred)  # 一键输出 P/R/F1/support
roc_auc_score(y_true, y_proba[:, 1])

# 回归
mean_squared_error(y_true, y_pred)      # MSE
root_mean_squared_error(y_true, y_pred) # RMSE(1.4+)
mean_absolute_error(y_true, y_pred)     # MAE
r2_score(y_true, y_pred)                # R²

预处理(sklearn.preprocessing

python
StandardScaler()    # 标准化:均值 0 标准差 1(Z-score)
MinMaxScaler()      # 归一化:缩放到 [0, 1]
RobustScaler()      # 鲁棒标准化:用中位数和四分位距(对异常值鲁棒)
Normalizer()        # 样本归一化:每行单位范数(文本向量常用)
LabelEncoder()      # 标签编码:类别→0,1,2...
OneHotEncoder()     # 独热编码:类别→二值向量

经典数据集(sklearn.datasets

python
# 玩具数据集(小,内置无需下载)
load_iris()                        # 分类:150 样本 4 特征 3 类(鸢尾花)
load_digits()                      # 分类:1797 样本 64 特征 10 类(手写数字)
load_wine()                        # 分类:178 样本 13 特征 3 类(葡萄酒)
load_breast_cancer()               # 二分类:569 样本 30 特征(乳腺癌)
fetch_california_housing()         # 回归:20640 样本 8 特征(加州房价)

# 真实数据集(较大,首次下载)
fetch_openml(name='titanic')       # OpenML 海量数据集入口

⚠️ load_boston 因伦理问题(数据含种族相关特征)在 scikit-learn 1.2 起被移除,用 fetch_california_housing 替代做回归入门。

官方资源