一、数据集模块 ( datasets )

1.1 数据集生成函数

1.1.1 生成回归任务数据集

make_regression(n_samples=100, n_features=100, n_informative=10, n_targets=1, 
                bias=0.0, effective_rank=None, tail_strength=0.5, noise=0.0, 
                shuffle=True, coef=False, random_state=None)

参数说明

  1. n_samples = 100【int】:生成样本的总数。
  2. n_features = 100【int】:每个样本的总特征数量。
    • 必须 n_features ≥ n_informative。
    • 注意:高维特征(n_features >> n_samples)可用于测试正则化回归(如 Ridge、Lasso)。
  3. n_informative = 10【int】:对目标变量有实际贡献的信息特征数量。
    • 这些特征的系数非零,其余特征系数为零(即不参与生成 y)。
    • 必须满足 0 ≤ n_informative ≤ n_features。
    • 注意:控制问题的有效复杂度;n_informative 越小,稀疏性越强。
  4. n_targets = 1【int】:回归目标的数量(即输出维度)。
    • 若为 1,y 为一维数组(形状 (n_samples,))。
    • 若 >1,y 为二维数组(形状 (n_samples, n_targets)),每列是一个独立目标。
    • 注意:多目标回归中,各目标共享相同的特征矩阵 X,但具有独立的系数和噪声。
  5. bias = 0.0【float】:目标变量的全局偏置项(即截距)。
    • 生成公式为:y = X @ coef + bias + noise。
  6. effective_rank = None【int | None】:控制特征矩阵 X 的近似秩(即内在维度)。
    • 若为 None(默认),X 的各特征相互独立(满秩)。
    • 若为 int,则通过低秩矩阵近似生成 X,使其具有指定的有效秩(使用奇异值衰减)。
    • 注意:用于模拟特征间存在线性相关性的现实数据;会降低 X 的条件数,影响回归稳定性。
  7. tail_strength = 0.5【float】:当 effective_rank 非 None 时,控制奇异值衰减的“尾部强度”。
    • 值越小,非主成分的奇异值衰减越快(矩阵更接近严格低秩)。
    • 值越大(趋近于1),奇异值分布越平坦。
    • 仅在 effective_rank 被指定时生效。
    • 注意:与 effective_rank 共同决定 X 的协方差结构。
  8. noise = 0.0【float】:添加到目标变量 y 中的高斯噪声标准差。
    • noise=0.0 表示无噪声,y 完全由线性模型生成。
    • noise>0(如 1.0)表示加入均值为0、标准差为 noise 的独立高斯噪声。
    • 注意:噪声越大,回归任务越困难;常用于评估模型抗噪能力。
  9. shuffle = True【bool】:是否在返回前打乱样本顺序。
    • 注意:打乱不影响 X 与 y 的对应关系,仅改变行顺序。
  10. coef = False【bool】:是否返回真实的回归系数(ground-truth coefficients)。
    • 若为 False(默认),仅返回 (X, y)。
    • 若为 True,返回 (X, y, coef),其中 coef 形状为 (n_features,) 或 (n_features, n_targets)。
    • 注意:返回的 coef 中,仅有前 n_informative 个元素非零(其余为0),且符号和大小由内部随机生成
  11. random_state = None【int | RandomState | None】:控制随机数生成器的种子。

1.1.2 生成分类任务数据集

make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=2, 
                    n_repeated=0, n_classes=2, n_clusters_per_class=2, weights=None,
                    flip_y=0.01, class_sep=1.0, hypercube=True, shift=0.0, scale=1.0,
                    shuffle=True, random_state=None)

参数说明

  1. n_samples = 100【int】:生成样本的总数。
  2. n_features = 20【int】:每个样本的总特征数量。
  3. n_informative = 2【int】:对分类有判别力的信息特征数量。
    • 必须满足 1 ≤ n_informative ≤ min(n_features, n_classes × n_clusters_per_class)。
    • 这些特征是从高斯分布中生成并用于构造类别边界。
    • 注意:若设置过高,可能导致数据过于容易分类;过低则任务太难。
  4. n_redundant = 2【int】:由信息特征线性组合生成的冗余特征数量。
    • 必须满足 n_informative + n_redundant + n_repeated ≤ n_features。
    • 冗余特征不增加新信息,但可能影响模型性能(如多重共线性)。
    • 注意:若 n_informative = 0,则无法生成冗余特征,会报错。
  5. n_repeated = 0【int】:从信息特征和冗余特征中随机复制得到的重复特征数量。
    • 用于模拟真实数据中的重复测量或冗余变量。
    • 取值范围:0 ≤ n_repeated ≤ n_features - n_informative - n_redundant。
    • 注意:重复特征完全相同,可用于测试特征选择算法。
  6. n_classes = 2【int】:目标变量的类别数量,必须 ≥ 2。
    • 注意:类别数越多,生成的数据结构越复杂,需确保 n_informative 足够支撑多类分离。
  7. n_clusters_per_class = 2【int】:每个类别包含的簇(cluster)数量。
    • 每个簇代表该类别中的一个局部高密度区域。
    • 总簇数 = n_classes × n_clusters_per_class。
    • 注意:簇越多,类内结构越复杂;若设为1,则每类为单峰分布。
  8. weights = None【ArrayLike | None】:各类别的先验概率(或样本比例)。
    • 若为 None,则各类别样本数大致相等。
    • 若指定(如 [0.7, 0.3]),则按比例分配样本,且长度必须等于 n_classes。
    • 注意:实际样本数受 n_samples 和随机性影响,可能略有偏差;若比例之和不为1,会自动归一化。
  9. flip_y = 0.01【float】:随机翻转标签的比例(引入噪声)。
    • 取值范围 [0.0, 1.0]。0.0 表示无噪声;0.1 表示约 10% 的标签被随机打乱,用于模拟现实中的标注错误。
    • 翻转后的标签在所有类别中均匀随机分配(包括原类别)。
    • 注意:flip_y > 0 会降低数据可分性,适合测试鲁棒性。
  10. class_sep = 1【float】:类别之间的分离程度。
    • 值越大,类别间距离越远,分类越容易。
  11. hypercube = True【bool】:是否将类别中心放置在超立方体的顶点上。
    • 若为 True,类别中心位于 [-class_sep, class_sep]^n_informative 的顶点,结构更规则。
    • 若为 False,类别中心随机分布在球体内。
    • 注意:设为 False 可增加数据多样性,但可能降低类别可分性。
  12. shift = 0【ArrayLike | float | None】:对所有特征整体平移的偏移量。
    • 若为 float,所有特征统一加上该值。
    • 若为 ArrayLike(长度 = n_features),每个特征分别平移。
    • 若为 None,则不进行平移。
    • 注意:平移不影响分类难度,但可模拟非零均值特征。
  13. scale = 1【ArrayLike | float | None】:对所有特征进行缩放的比例因子。
    • 若为 float(如 2.0),所有特征乘以该值。
    • 若为 ArrayLike(长度 = n_features),每个特征独立缩放。
    • 若为 None,则不缩放。
    • 注意:缩放改变特征量纲,可能影响基于距离的算法(如KNN. SVM)。
  14. shuffle = True【bool】:是否在返回前打乱样本顺序
    • 注意:通常应保持 True 以避免引入人为顺序偏差。
  15. random_state = None【int | RandomState | None】:控制随机数生成器的种子

1.1.3 聚类数据生成

make_blobs(n_samples=100, centers=3, cluster_std=1.0, center_box=(-10.0, 10.0), 
           shuffle=True, random_state=None, return_centers=False)

参数说明

  1. n_samples = 100【int | ArrayLike】:生成样本的总数或每个簇的样本数量。

    • 若为 int,总样本数均匀分配给各簇(除非 centers 指定不等权重)。

    • 若为 ArrayLike(如 [50, 100, 150]),则分别指定每个簇的样本数;长度必须等于 centers 的数量。

    • 注意:当与 weights 同时使用时,weights 会被忽略;实际行为由 n_samples 的类型决定。

  2. centers = 3【int | ArrayLike】:簇(中心点)的数量或具体坐标。

    • 若为 int,则随机生成该数量的中心点(在 [-10, 10] 范围内)。

    • 若为 ArrayLike(如 [[0,0], [2,2], [-2,2]]),则直接使用这些坐标作为簇中心;此时 n_features 自动推断为坐标的维度。

    • 注意:若提供 centers 为数组,则 n_features 必须与其中心点维度一致,且不能同时指定与之冲突的 n_features。

  3. cluster_std = 1.0【float | ArrayLike】:每个簇的标准差(控制簇的紧密程度)。

    • 若为 float(如 0.5),所有簇使用相同标准差。

    • 若为 ArrayLike(如 [0.5, 1.0, 1.5]),则分别为每个簇指定标准差;长度必须等于 centers 数量。

    • 取值越大,簇越分散;过大会导致簇重叠,增加聚类难度。

    • 注意:标准差作用于每个特征维度,假设各维度独立同分布。

  4. center_box = (-10.0, 10.0)【tuple[float, float]】:当 centers 为 int 时,随机生成中心点的边界框(最小值, 最大值)。

    • 默认在 [-10, 10] 区间内均匀采样中心坐标,若如center_box=(-5.0, 5.0) 将中心限制在更小区域,可能增加簇重叠风险。

    • 注意:仅当 centers 为整数时生效;若 centers 为数组,则此参数被忽略。

  5. shuffle = True【bool】:是否在返回前打乱样本顺序。

    • 若为 False,样本按簇顺序排列(先簇0,再簇1,依此类推)。
  6. random_state = None【int | RandomState | None】:控制随机数生成器的种子。

    • 注意:影响中心点生成(当 centers 为 int)、样本扰动(由 cluster_std 决定)和 shuffle 行为。
  7. return_centers = False【bool】:是否同时返回真实的簇中心坐标。

    • 若为 False(默认),仅返回 (X, y),即样本和标签。

    • 若为 True,返回 (X, y, centers),便于评估聚类算法对中心的估计精度。

    • 注意:当 centers 参数本身是数组时,返回的 centers 与输入一致;若 centers 是 int,则返回实际生成的中心坐标。


1.1.4 其他生成函数

  • make_classification:生成用于分类的高维人工数据集(含信息特征、冗余特征等)
  • make_regression:生成用于回归的人工数据集(可控制噪声、特征相关性等)
  • make_blobs:生成聚类中心明确的各向同性高斯分布簇(常用于聚类可视化)
  • make_moons:生成两个交错半圆形状的二分类数据(非线性可分)
  • make_circles:生成同心圆形状的二分类数据(非线性可分)
  • make_friedman1/2/3:生成基于 Friedman 公式的回归数据集
  • make_hastie_10_2:生成二分类数据(Hastie et al. 提出的 10 维问题)
  • make_sparse_coded_signal:生成稀疏编码信号
  • make_low_rank_matrix:生成低秩矩阵
  • make_s_curve / make_swiss_roll:生成流形学习用的 S 形曲线或瑞士卷数据。

1.2 内置数据集

数据集名称 任务类型 说明
load_breast_cancer 二分类 乳腺癌威斯康星州数据集
load_iris 多分类 鸢尾花数据集
load_wine 多分类 葡萄酒识别数据集
load_digits 多分类 手写数字图像数据 (0-9,8×8像素)
load_linnerud 多输出回归 Linnerud数据集
load_diabetes 回归 糖尿病数据集
fetch_california_housing 回归 加州房价数据集
fetch_covtype 分类 森林覆盖类型数据集 (大型)
fetch_20newsgroups 文本分类 20类新闻组文本数据
fetch_20newsgroups_vectorized 文本分类 已TF-IDF向量化的20newsgroups数据
fetch_kddcup99 KDD Cup 1999 网络入侵检测数据集
fetch_lfw_pairs/fetch_lfw_people Labeled Faces in the Wild 人脸数据

注意:波士顿房价预测数据集load_boston 已被弃用


二、数据预处理模块 ( preprocessing )

2.1 编码方法

2.1.1 标签编码

LabelEncoder()

用途:将类别标签转换为 0,1,2,... 的整数编码 (仅接受一维数组y)

方法

  • fit(y)
  • transform(y)
  • fit_transform(y)
  • inverse_transform(y_encoded)

属性

  • classes_ -> list:编码顺序对应的标签列表

注意:仅用于目标变量 y 的编码


2.1.2 有序编码

OrdinalEncoder()
  • 用途:将类别特征转换为整数编码 (接受二维数组或DataFrame)

  • 方法

    • fit(X, y=None)
    • transform(X)
    • fit_transform(X)
    • inverse_transform(X_encoded)
  • 属性

    • categories_:每列的类别列表
    • feature_names_in_:特征名
    • n_features_in_:特征数量

2.1.3 独热编码 (OneHotEncoder)

OneHotEncoder()
  • 用途:将类别特征转换为独热编码的稀疏矩阵
  • 关键参数
    • sparse_output=True
    • handle_unknown='ignore'

2.2 特征扩展

2.2.1 多项式扩展

PolynomialFeatures(degree=2, interaction_only=False, include_bias=True, order='C')

参数说明

  1. degree = 2【int | tuple[int, int]】:多项式的最高阶数。

    • 若为 int(如 3),生成从 0 阶到该阶的所有交叉项(默认包含低阶)。

    • 若为 tuple(如 (2, 3)),则仅生成指定范围内的阶数(scikit-learn ≥ 1.5 支持;旧版本仅支持 int)。

    • 注意:degree 越高,特征数量呈组合爆炸增长(尤其当 n_features 较大时);例如 n_features=10, degree=3 会产生 286 个特征。

  2. interaction_only = False【bool】:是否仅生成交互项(即不含单个特征的高次幂)。

    • 若为 False(默认),生成所有多项式项,包括 x₁², x₂³ 等纯幂项。

    • 若为 True,则只保留不同特征的乘积项(如 x₁x₂, x₁x₂x₃),且每个特征在单项中最多出现一次。

    • 示例:原始特征 [x₁, x₂],degree=2 时:

      • interaction_only=False → [1, x₁, x₂, x₁², x₁x₂, x₂²]
      • interaction_only=True → [1, x₁, x₂, x₁x₂]
    • 注意:设为 True 可显著减少特征数量并避免过拟合,适用于关注特征间协同效应的场景。

  3. include_bias = True【bool】:是否包含全1的偏置列(即 0 次项,对应常数项 1)。

    • 若为 True(默认),输出矩阵第一列为 1(对应截距项)。

    • 注意:若后续使用 LinearRegression(fit_intercept=True),通常可设 include_bias=False 以避免冗余;但若 fit_intercept=False,则需保留 bias 列以建模常数项。

  4. order = 'C'【str】:输出数组的内存布局顺序。

    • 可选 'C'(行优先,C-style)或 'F'(列优先,Fortran-style),默认为 'C',与 NumPy 默认一致。

    • 注意:一般用户无需修改;仅在特定性能优化或与底层库交互时才需调整。


2.3 标准化与归一化

2.3.1 标准缩放器

StandardScaler()
  • Z-score标准化:\(s = \frac{s - s.mean()}{s.std()}\\\)

2.3.2 最小最大缩放器

MinMaxScaler()
  • 缩放至 [0, 1] 或指定范围:\(m = \frac{m - m.min()}{m.max() - m.min()}\\\)

2.3.3 鲁棒缩放器

RobustScaler()
  • 基于中位数和四分位数,对异常值不敏感

2.3.4 归一化

Normalizer(norm='l2', copy=True)

用途:用于对每个样本(即数据矩阵的每一行)进行独立的范数归一化,使其具有单位长度(unit norm),常用于文本挖掘、聚类或需要消除样本尺度影响的场景(如使用余弦相似度时)。

参数

  1. norm = 'l2'【str】:指定使用的范数类型。

    • 若为 'l2'(默认),将每个样本缩放为欧几里得范数(L2 范数)为 1,即 ( \frac{x}{|x|_2} )。
    • 若为 'l1',将每个样本缩放为 L1 范数(绝对值之和)为 1,即 ( \frac{x}{|x|_1} )。
    • 若为 'max',将每个样本缩放为最大绝对值为 1(也称 L∞ 归一化),即 ( \frac{x}{|x|_\infty} )。
    • 注意:归一化是按进行的(axis=1),与 StandardScaler 等按列(特征)标准化不同。
  2. copy = True【bool】:是否在变换时创建输入数据的副本。


2.4 离散化

2.4.1 KBinsDiscretizer

KBinsDiscretizer(n_bins=5, encode='onehot', strategy='quantile', 
                 dtype=None, subsample=200_000, random_state=None)

用途:用于将连续特征离散化为若干个分箱(bin),将数值型数据转换为类别型表示,适用于提升模型对非线性关系的鲁棒性、减少异常值影响或适配仅支持离散输入的算法。

参数说明

  1. n_bins = 5【int | ArrayLike】:每个特征的分箱数量。
  • 若为 int,所有特征使用相同的分箱数。

  • 若为 ArrayLike(如 [5, 10, 3]),则分别为每个特征指定分箱数;长度必须等于特征数量(n_features)。

  • 取值必须 ≥ 2。

  • 注意:分箱数越多,保留的原始信息越精细,但可能引入噪声;过少则丢失细节。某些策略(如 'quantile')在样本不足时可能无法生成指定数量的有效分箱。

  1. encode = 'onehot'【str】:离散化后的编码方式。

    • 若为 'onehot'(默认),输出稀疏的 one-hot 编码矩阵(每个 bin 对应一个二元特征)。

    • 若为 'onehot-dense',输出稠密的 one-hot 编码矩阵(NumPy 数组而非稀疏矩阵)。

    • 若为 'ordinal',输出每个样本所属的 bin 索引(整数,从 0 开始),形状与输入相同。

    • 注意:'onehot' 适合大多数分类模型;'ordinal' 适用于树模型(如 DecisionTree)或需保持维度紧凑的场景。

  2. strategy = 'quantile'【str】:分箱策略,决定如何划分区间。

    • 若为 'uniform',将特征值范围等宽划分(即每个 bin 的宽度相同)。

      • 对异常值敏感:若数据分布偏斜,可能导致某些 bin 样本极少甚至为空。
    • 若为 'quantile'(默认),按分位数划分,使每个 bin 包含大致相等数量的样本。

      • 更鲁棒于偏态分布;但若存在大量重复值,可能导致 bin 边界重合。
    • 若为 'kmeans',使用一维 KMeans 聚类中心确定 bin 边界,最小化 bin 内方差。

      • 能更好地适应数据局部密度,但计算开销略高。
    • 注意:所有策略均在 fit 阶段基于训练数据计算 bin 边界,transform 阶段直接映射;测试集中的值若超出训练范围,会被分配到最近的 bin(不会报错)。

  3. dtype = None【type | None】:输出数据的数据类型。

    • 若为 None(默认),根据 encode 自动选择:

      • 'onehot' / 'onehot-dense' → np.float64
      • 'ordinal' → np.float64(即使 bin 索引为整数)
    • 若显式指定(如 np.int32),仅在 encode='ordinal' 时生效;对于 one-hot 编码,dtype 必须为浮点型(因稀疏矩阵限制)。

    • 注意:scikit-learn 推荐保留默认行为;手动设置 dtype 需确保兼容性。

  4. subsample = 200_000【int | None】:用于 'quantile' 或 'kmeans' 策略时的采样数量上限。

    • 为加速分位数或 KMeans 计算,当 n_samples > subsample 时,会随机采样子集进行 bin 边界估计。

    • 若为 None,则使用全部样本。

    • 默认 200,000 在精度与效率间取得平衡。

    • 注意:仅影响 fit 阶段的计算速度,不影响最终 transform 的确定性(若 random_state 固定)。

  5. random_state = None【int | RandomState | None】:控制 subsample 采样的随机状态。


三、不平衡数据处理 ( imblearn )

3.1 过采样 (over_sampling)

3.1.1 ADASYN

3.1.2 SMOTE

概念:Synthetic Minority Over-sampling Technique,合成少数类过采样技术}

用途:用于解决分类任务中的类别不平衡问题。通过对少数类样本在其近邻之间插值,生成新的合成样本,从而增加少数类的代表性,改善模型对少数类的识别能力。

参数

  1. sampling_strategy = 'auto'【float | str | dict | callable】:指定重采样策略,控制目标类别比例。

    • 若为 'auto'(默认),对所有少数类进行过采样,使其数量等于多数类(即 1:1)。
    • 若为 float(如 0.5),仅适用于二分类,表示少数类 / 多数类 的目标比例(必须 ∈ (0, 1])。
    • 若为 dict(如 {0: 200, 1: 300}),显式指定每个类别的最终样本数(仅对键中包含的类执行过采样)。
    • 若为 callable,接收 y 值并返回目标采样策略字典。
    • 注意:SMOTE 只对少数类进行过采样,不会减少多数类;若需同时欠采样,应结合如 SMOTETomek 等组合方法。
  2. random_state = None【int | RandomState | None】:控制随机数生成器的种子。

  3. k_neighbors = 5【int | object】:用于为每个少数类样本寻找近邻的 KNN 参数。

    • 若为 int(默认 5),表示使用 k=5 的 KNeighborsClassifier 查找同类近邻。
    • 若为 KNeighborsMixin 实例(如自定义的 NearestNeighbors 对象),则直接使用该对象进行近邻搜索。
    • 注意:k_neighbors 必须小于少数类样本数;若少数类样本太少(如 <6),需减小该值,否则会报错。
  4. n_jobs = None【int | None】:并行计算时使用的 CPU 核心数。

注意事项

  • SMOTE 要求输入特征为数值型,不支持类别型特征(需先编码)。
  • 生成的新样本位于少数类样本与其近邻之间的连线上(通过线性插值)。
  • 在高维或稀疏数据中,SMOTE 效果可能下降(“维度灾难”导致近邻无意义)。
  • 不适用于噪声大或类别边界模糊的数据,可能生成跨越决策边界的无效样本。

3.2 欠采样 (under_sampling)

3.2.1 RandomUnderSampler

3.3 组合采样 (combine)

3.3.1 SMOTETomek


四、特征工程模块 ( feature_selection

4.1 特征选择

4.1.1 过滤法

4.1.1.1 方差过滤
VarianceThreshold(threshold=0.0)

用途:用于特征选择,通过移除低方差的特征(即在所有样本中几乎不变的特征)来简化数据集。假设特征值为数值型且已适当缩放,方差越小说明该特征提供的信息越少。

参数

  1. threshold = 0.0【float】:特征保留的方差阈值,剔除所有方差 ≤ threshold 的特征。
    • 默认为 0.0,表示移除在所有样本中完全不变的特征(即方差为 0)。
    • 注意:该方法仅适用于数值型特征;类别型特征需先编码,且对未标准化的不同量纲特征敏感(例如,以“米”和“毫米”为单位的同一物理量方差差异巨大)。

注意事项

  • VarianceThreshold 是一种无监督的过滤式(filter)特征选择方法,不依赖目标变量 y。
  • 在 fit 阶段计算每个特征的方差;在 transform 阶段仅保留方差 > threshold 的列。
  • 对稀疏矩阵支持良好,计算高效。 - 常用于预处理流水线的第一步,尤其适用于高维数据(如文本 TF-IDF 矩阵)中去除恒定词项。

4.1.1.2 筛选K个最佳 SelectKBest
SelectKBest(score_func=f_classif, k=10)

用途:一种基于单变量统计检验的过滤式(filter)特征选择方法,通过计算每个特征与目标变量之间的统计得分(如卡方、F值、互信息等),保留得分最高的 k 个特征,适用于降维和提升模型效率。

参数说明

  1. score_func = f_classif【callable】:用于评估特征重要性的评分函数。
    • 必须是一个可调用对象,接收 X(特征矩阵)和 y(目标变量),返回 (scores, pvalues) 或仅 scores。
    • 常见选项
      • 分类任务
        • f_classif(默认):ANOVA F 值,适用于连续特征与类别标签
        • chi2:卡方检验,要求特征非负(如词频、TF-IDF)
        • mutual_info_classif:互信息,能捕捉非线性关系
      • 回归任务
        • f_regression:F 值,基于特征与目标的相关性
        • mutual_info_regression:互信息回归版本
    • 注意:必须根据任务类型和数据特性选择合适的 score_func;错误选择(如对负值使用 chi2)会导致异常。
  2. k = 10【int | str】:要选择的特征数量。
    • 若为 'all',保留所有特征(相当于不进行选择)。
    • k 必须满足 1 ≤ k ≤ n_features(当为 int 时)。
    • 注意:若 k 大于特征总数,会自动调整为 n_features;若数据中存在相同得分,选择顺序可能不稳定(除非固定随机状态,但本方法本身无随机性)。

注意事项

  • SelectKBest 是有监督方法,必须提供 y 进行 fit。
  • 在 fit 阶段计算每个特征的得分并排序;在 transform 阶段返回 top-k 特征对应的列。
  • 不改变特征原始值,仅做子集选择。
  • 常用于 pipeline 中作为预处理步骤,尤其适用于高维稀疏数据(如文本)的初步筛选。

4.1.2 包装法

递归特征消除 (RFE)
RFE(estimator, n_features_to_select=None, step=1, verbose=0, importance_getter='auto')

概念:Recursive Feature Elimination,递归特征消除

用途:一种包装式(wrapper)特征选择方法,通过反复训练模型并剔除最不重要特征,最终保留指定数量的最优特征子集。适用于提升模型性能、降低过拟合风险和增强可解释性。

参数说明

  1. estimator【object】:用于评估特征重要性的基础估计器(必须实现 fit 方法,并提供 coef_ 或 feature_importances_ 属性)。

    • 常见选择:LinearRegression、LogisticRegression、SVC(需设置 probability=True 或使用 kernel='linear' 以支持 coef_)、RandomForestClassifier 等。
    • 注意:若 estimator 不具备特征权重属性(如 KNeighborsClassifier),会报错。
  2. n_features_to_select = None【int | float | None】:最终保留的特征数量。

    • 若为 float(如 0.5),表示保留总特征数的该比例(向下取整)。
    • 若为 None(默认),则保留总特征数的一半(即 n_features // 2)。
    • 注意:必须满足 1 ≤ n_features_to_select ≤ n_features。
  3. step = 1【int | float】:每轮迭代中剔除的特征数量或比例。

    • 若为 float(如 0.1),每轮移除当前剩余特征的该比例(至少剔除1个)。
    • 较小的 step 提高精度但增加计算开销;较大的 step 加速过程但可能跳过更优子集。
    • 注意:step 必须 > 0 且 < 当前特征数。
  4. verbose = 0【int】:控制输出日志的详细程度。

    • 0(默认):不输出。
    • ≥1:显示每轮消除的特征数量等信息。
    • 注意:主要用于调试或监控长时间运行的特征选择过程。
  5. importance_getter = 'auto'【str | callable】:指定如何从 estimator 获取特征重要性。

    • 若为 'auto'(默认),自动检测 estimator 是否有 coef_ 或 feature_importances_。
    • 若为 str(如 'coef_' 或 'feature_importances_'),显式指定属性名。
    • 若为 callable,接收 estimator 并返回形状为 (n_features,) 的重要性数组。
    • 注意:对于多输出模型(如 MultiOutputRegressor),重要性需聚合为一维;某些模型(如 SVM with RBF kernel)不提供 coef_,不可用于 RFE。

注意事项

  • RFE 是有监督方法,需在 fit 时提供 y。
  • 每轮训练 estimator → 获取特征重要性 → 剔除最不重要特征 → 重复直至达到目标特征数。
  • 支持 get_support()、get_feature_names_out() 等方法获取选中的特征索引或名称。
  • 计算成本较高(需多次训练模型),适用于中小规模数据集或作为最终精调步骤。

4.1.3 嵌入法

SelectFromModel
SelectFromModel(estimator, threshold=None, prefit=False, norm_order=1, 
                max_features=None, importance_getter='auto')

参数说明

参数 类型/默认值 说明
estimator object 已训练或待训练的估计器
threshold str/float/None 选择阈值:'median', 'mean', 或具体数值
prefit bool (False) estimator是否已预先拟合
norm_order int (1) 多维系数时的范数阶数
max_features int/None 最多保留的特征数量
importance_getter str/callable ('auto') 获取特征重要性的方式

4.1.4 RFECV (带交叉验证的RFE)

RFECV(estimator, step=1, cv=None, n_jobs=None, scoring=None)

关键属性

  • rfecv.n_features_:最佳特征数量
  • rfecv.estimator_:训练好的最佳模型
  • rfecv.ranking_:特征评级 (1为保留,越大越不重要)
  • rfecv.support_:特征是否被保留的bool列表
  • rfecv.cv_results_:每次交叉验证得分字典

3.2 特征提取 (feature_extraction)

3.2.1 文本特征提取

类名 用途
CountVectorizer 词频统计
TfidfVectorizer TF-IDF权重计算

3.2.2 字典特征提取

DictVectorizer()
  • 用途:将字典列表转换为特征矩阵 (自动处理类别和数值特征)

四、监督学习模块

4.1 近邻算法 (neighbors)

4.1.1 KNN分类器 (KNeighborsClassifier)

KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', 
                     leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)

参数说明

参数 类型/默认值 说明
n_neighbors int (5) 邻居数量k
weights str/callable ('uniform') 权重策略:'uniform', 'distance', 或自定义函数
algorithm str ('auto') 计算算法:'auto', 'ball_tree', 'kd_tree', 'brute'
leaf_size int (30) 树算法叶节点大小
p int (2) Minkowski距离幂参数 (p=1曼哈顿, p=2欧氏)
metric str/callable ('minkowski') 距离度量方式
metric_params dict/None 距离函数额外参数
n_jobs int/None 并行任务数

方法predict_proba(X_test) - 返回预测概率


4.1.2 KNN回归器 (KNeighborsRegressor)

  • 参数与分类器类似,预测方式为邻居值的平均或加权平均

4.2 线性模型 (linear_model)

4.2.1 线性回归 (LinearRegression)

LinearRegression(fit_intercept=True, copy_X=True, n_jobs=None, positive=False)

参数说明

参数 类型/默认值 说明
fit_intercept bool (True) 是否计算截距项
copy_X bool (True) 是否复制输入数据X
n_jobs int/None 并行任务数 (仅多输出回归有效)
positive bool (False) 是否强制系数为非负值

4.2.2 正则化线性回归

类名 正则化类型 特点
Ridge L2 岭回归,保持所有特征
Lasso L1 产生稀疏解,特征选择
ElasticNet L1+L2 弹性网络,结合两者优点

4.2.3 逻辑斯蒂回归 (LogisticRegression)

LogisticRegression(penalty='l2', dual=False, tol=1e-4, C=1.0, fit_intercept=True, 
                   intercept_scaling=1.0, class_weight=None, random_state=None, 
                   solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, 
                   warm_start=False, n_jobs=None, l1_ratio=None)

参数说明

参数 类型/默认值 说明
penalty str ('l2') 正则化类型:'l1', 'l2', 'elasticnet', 'none'
dual bool (False) 是否使用对偶形式 (仅penalty='l2'且solver='liblinear')
tol float (1e-4) 收敛容忍度
C float (1.0) 正则化强度的倒数 (C越大,正则化越弱)
fit_intercept bool (True) 是否计算截距项
intercept_scaling float (1.0) 截距缩放因子 (仅solver='liblinear')
class_weight dict/str/None 类别权重:'balanced'或自定义字典
solver str ('lbfgs') 优化算法:'lbfgs', 'liblinear', 'newton-cg', 'sag', 'saga'
max_iter int (100) 最大迭代次数
multi_class str ('auto') 多分类策略:'ovr', 'multinomial', 'auto'
l1_ratio float/None Elastic-Net混合比例 (仅penalty='elasticnet')

关键说明:

  • solver选择:小规模数据用'liblinear';大规模用'sag'/'saga';多分类用'multinomial'需避免'liblinear'
  • 正则化:L1实现稀疏特征选择;L2防止过拟合;Elastic-Net结合两者

4.2.4 梯度下降回归 (SGDRegressor)

SGDRegressor(loss='squared_error', penalty='l2', alpha=0.0001, l1_ratio=0.15, 
             fit_intercept=True, max_iter=1000, tol=1e-3, shuffle=True, 
             learning_rate='invscaling', eta0=0.01, early_stopping=False, 
             validation_fraction=0.1, n_iter_no_change=5)

参数说明

参数 类型/默认值 说明
loss str ('squared_error') 损失函数类型
penalty str ('l2') 正则化类型
alpha float (0.0001) 正则化强度 (≥0)
l1_ratio float (0.15) Elastic-Net中L1比例
max_iter int (1000) 最大迭代次数
learning_rate str ('invscaling') 学习率策略:'constant', 'optimal', 'invscaling', 'adaptive'
eta0 float (0.01) 初始学习率
early_stopping bool (False) 是否启用早停
validation_fraction float (0.1) 验证集比例

4.3 支持向量机 (SVM)

4.3.1 SVC (支持向量分类)

SVC(C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, 
    probability=False, tol=0.001, cache_size=200, class_weight=None, 
    max_iter=-1, decision_function_shape='ovr', break_ties=False, random_state=None)

关键参数

参数 说明
C 惩罚参数,控制误分类的惩罚程度
kernel 核函数:'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'
gamma 核系数,对'rbf', 'poly', 'sigmoid'有效
probability 是否启用概率估计 (需训练较慢的Platt scaling)
decision_function_shape 多分类策略:'ovr'(一对多), 'ovo'(一对一)

4.3.2 其他SVM类

  • LinearSVC:线性核SVM,适合大规模数据
  • SVR:支持向量回归
  • LinearSVR:线性核SVR

4.4 朴素贝叶斯 (naive_bayes)

4.4.1 分类朴素贝叶斯 (CategoricalNB)

CategoricalNB(alpha=1.0, fit_prior=True, class_prior=None, min_categories=None)
  • 用途:专为离散型类别特征设计
  • 输入要求:整数编码的类别型数据 (0到K-1的连续整数)
  • 属性:
    • category_count_:各特征每个类别各值的出现次数
    • class_log_prior_:标签对数概率
    • feature_log_prob_:各特征类别的对数条件概率

4.4.2 多项式朴素贝叶斯 (MultinomialNB)

MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
  • 用途:适用于非负离散特征 (词频、TF-IDF)
  • 特点:所有样本共享同一特征空间 (如固定词汇表)

4.4.3 高斯朴素贝叶斯 (GaussianNB)

  • 用途:适用于连续特征,假设特征服从高斯分布

4.4.4 伯努利朴素贝叶斯 (BernoulliNB)

BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
  • 用途:专为二值特征 (0/1) 设计
  • 参数binarize 阈值,将连续值转换为二值

4.4.5 互补朴素贝叶斯 (ComplementNB)

  • 用途:对多项式分布的改进,适合不平衡文本分类

4.5 决策树 (tree)

4.5.1 决策树分类器 (DecisionTreeClassifier)

DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, 
                       min_samples_split=2, min_samples_leaf=1, 
                       max_features=None, random_state=None, 
                       class_weight=None, ccp_alpha=0.0)

参数说明

参数 类型/默认值 说明
criterion str ('gini') 分割标准:'gini', 'log_loss'
splitter str ('best') 分割策略:'best'(最优), 'random'(随机)
max_depth int/None 最大树深度
min_samples_split int/float (2) 内部节点分裂最小样本数
min_samples_leaf int/float (1) 叶节点最小样本数
max_features int/float/str/None 分割时考虑的特征数:'sqrt', 'log2'
class_weight dict/str/None 类别权重,处理不平衡数据
ccp_alpha float (0.0) 代价复杂度剪枝参数

特点:可解释性强,无需特征缩放,易过拟合


4.5.2 决策树回归 (DecisionTreeRegressor)

  • 参数类似分类器,但criterion可选'squared_error', 'friedman_mse'等

4.6 集成学习 (ensemble)

4.6.1 随机森林分类器 (RandomForestClassifier)

RandomForestClassifier(n_estimators=100, criterion='gini', max_depth=None, 
                       min_samples_split=2, min_samples_leaf=1, 
                       max_features='sqrt', bootstrap=True, oob_score=False, 
                       n_jobs=None, random_state=None, class_weight=None, 
                       ccp_alpha=0.0, max_samples=None)

参数说明

参数 类型/默认值 说明
n_estimators int (100) 森林中决策树数量
bootstrap bool (True) 是否使用自助采样构建每棵树
oob_score bool (False) 是否计算袋外样本评估
max_samples int/float/None 每棵树bootstrap采样数量

属性:

  • feature_importances_:特征重要性
  • estimators_:所有决策树列表
  • oob_score_:袋外准确率 (需启用)

4.6.2 极端随机树 (ExtraTreesClassifier)

ExtraTreesClassifier(n_estimators=100, criterion='gini', max_depth=None, 
                     min_samples_split=2, min_samples_leaf=1, 
                     max_features='sqrt', bootstrap=False, oob_score=False)

核心区别:分割点完全随机选择,而非搜索最优切分点

  • 优点:训练速度极快,方差更低
  • 默认bootstrap=False (随机性已足够强)

4.6.3 梯度提升分类器 (GradientBoostingClassifier)

  • 基于梯度提升框架,逐步构建决策树

4.6.4 XGBoost (HistGradientBoostingClassifier)

  • 使用直方图算法的梯度提升,适合大规模数据

4.6.5 投票分类器 (VotingClassifier)

  • 集成多个分类器,通过投票机制预测

4.6.6 堆叠分类器 (StackingClassifier)

  • 分层训练,元学习器综合多个基学习器预测

4.7 神经网络 (neural_network)

4.7.1 多层感知器分类器 (MLPClassifier)

MLPClassifier(hidden_layer_sizes=(100,), activation='relu', solver='adam', 
              alpha=0.0001, batch_size='auto', learning_rate='constant', 
              learning_rate_init=0.001, max_iter=200, random_state=None)

4.7.2 多层感知器回归器 (MLPRegressor)

  • 参数类似分类器,支持回归任务

五、无监督学习模块

5.1 聚类 (cluster)

5.1.1 K-Means聚类 (KMeans)

KMeans(n_clusters=8, init='k-means++', n_init='auto', max_iter=300, 
       tol=1e-4, verbose=0, random_state=None, algorithm='lloyd')

参数说明

参数 类型/默认值 说明
n_clusters int (8) 簇数量k
init str/ArrayLike ('k-means++') 初始化方法:'k-means++', 'random'
n_init int/str ('auto') 运行次数,取最优结果
max_iter int (300) 单次运行最大迭代次数
tol float (1e-4) 收敛容忍度
algorithm str ('lloyd') 算法变体:'lloyd', 'elkan' (已弃用)

属性cluster_centers_, labels_, inertia_


5.1.2 其他聚类算法

  • MiniBatchKMeans:小批次K-Means,适合大规模数据
  • AgglomerativeClustering:层次聚类
  • DBSCAN:基于密度的聚类
  • OPTICS:改进的密度聚类

5.2 降维

5.2.1 流形学习 (manifold)

  • TSNE:t-分布随机邻域嵌入 (可视化)
  • MDS:多维缩放
  • Isomap:等距映射
  • LocallyLinearEmbedding:局部线性嵌入

5.2.2 线性降维 (decomposition)

  • PCA:主成分分析
  • TruncatedSVD:截断SVD (适用于稀疏矩阵)
  • KernelPCA:核PCA (非线性降维)

六、模型评估模块

6.1 评估指标 (metrics)

6.1.1 分类评估

函数 用途
accuracy_score 准确率
f1_score F1分数 (综合精确率和召回率)
recall_score 召回率 (查全率)
precision_score 精确率 (查准率)
confusion_matrix 混淆矩阵
classification_report 分类报告 (包含多个指标)
roc_curve ROC曲线
roc_auc_score ROC AUC分数
precision_recall_curve 精确率-召回率曲线
auc 计算曲线下的面积

6..2 回归评估

函数 用途
mean_squared_error 均方误差 (MSE)
mean_absolute_error 平均绝对误差 (MAE)
r2_score R²分数 (决定系数)

注意np.sqrt(mse) 可得RMSE


6.1.3 聚类评估

函数 是否需要真实标签 说明
silhouette_score 轮廓系数 (评估簇内紧密度和簇间分离度)
davies_bouldin_score Davies-Bouldin指数 (值越小越好)
calinski_harabasz_score Calinski-Harabasz指数 (值越大越好)
adjusted_rand_score 调整兰德指数
normalized_mutual_info_score 归一化互信息

6.2 模型选择 (model_selection)

6.2.1 数据集切分

train_test_split(X, y, train_size=None, test_size=None, shuffle=True, random_state=None)

关键说明:

  • shuffle=True:避免数据顺序引入的分布偏差
  • random_state:确保结果可复现

6.2.2 交叉验证策略

类名 用途
KFold K折交叉验证
StratifiedKFold 分层K折,保持类别比例
TimeSeriesSplit 时间序列交叉验证 (不打乱)
cross_val_score 交叉验证评估模型
cross_validate 多指标交叉验证

6.2.3 超参数调优

网格搜索 (GridSearchCV)
GridSearchCV(estimator, param_grid, scoring=None, n_jobs=None, 
             refit=True, cv=None, verbose=0)

参数说明

参数 类型/默认值 说明
estimator object 待调优的估计器
param_grid dict/list[dict] 超参数网格
scoring str/callable/list/dict/None 评估指标
refit bool/str (True) 是否用最佳参数重新训练
cv int/iterable/CV splitter 交叉验证策略
n_jobs int/None 并行任务数
verbose int (0) 日志详细程度

结果属性:

  • best_params_:最优参数
  • best_score_:最优交叉验证得分
  • best_estimator_:重训后的最佳模型
  • cv_results_:所有参数组合结果

随机搜索 (RandomizedSearchCV)
RandomizedSearchCV(estimator, param_distributions, n_iter=10)
  • 特点:从参数分布中随机采样,适合大规模参数空间
贝叶斯优化 (BayesSearchCV)
BayesSearchCV(estimator, search_spaces)
  • 特点:基于贝叶斯优化,智能搜索参数空间

参数空间定义:

from scipy.stats import uniform, randint
param_dist = {'C':uniform(0.1, 10), 'gamma':uniform(0.001, 0.1)}

# 或使用skopt
from skopt import Real, Categorical
search_spaces = {
    'C':Real(0.1, 10, prior='log-uniform'),
    'gamma':Real(0.001, 0.1, prior='log-uniform'),
    'kernel':Categorical(['rbf'])
}

七、工具模块

7.1 流水线 (pipeline)

7.1.1 Pipeline

Pipeline(steps, memory=None, verbose=False)

参数说明

参数 类型/默认值 说明
steps list[tuple[str, object]] 步骤序列:[(name, transformer/estimator)]
memory str/object/None 启用缓存以加速重复计算
verbose bool (False) 是否打印执行日志

关键特性:

  • 继承最后一个元素的estimator的所有属性和方法
  • 参数设置:pipe.set_params(步骤名__参数=值)
  • 避免数据泄露,确保训练/测试处理一致性

7.2 缺失值处理 (impute)

类名 参数 说明
SimpleImputer strategy='mean' 简单填充:mean, median, most_frequent, constant
KNNImputer n_neighbors=5 KNN近邻填充

7.3 多任务学习 (multioutput)

类名 用途
MultiOutputClassifier 多标签分类
MultiOutputRegressor 多输出回归

八、统计与可视化

8.1 统计量 (stats)

8.1.1 相关系数

pearsonr(x, y)
  • 用途:计算两个向量间的皮尔逊相关系数

8.2 可视化工具

8.2.1 混淆矩阵显示

from sklearn.metrics import ConfusionMatrixDisplay
ConfusionMatrixDisplay.from_estimator(model, X_test, y_test, 
                                      display_labels=["负例", "正例"], 
                                      cmap=plt.cm.Blues)

8.2.2 ROC曲线显示

from sklearn.metrics import RocCurveDisplay
RocCurveDisplay.from_estimator(model, X_test, y_test)
# 自动计算AUC

8.2.3 P-R曲线显示

from sklearn.metrics import PrecisionRecallDisplay
PrecisionRecallDisplay.from_estimator(model, X_test, y_test)
# 自动计算AP (Average Precision)

8.2.4 决策边界显示

from sklearn.inspection import DecisionBoundaryDisplay
DecisionBoundaryDisplay.from_estimator(estimator, X, features=[0, 1], 
                                       grid_resolution=100, response_method='auto',
                                       plot_method='contourf', scatter=True)

参数说明

参数 类型/默认值 说明
estimator object 已训练的分类器
X array-like 原始特征数据 (用于确定绘图范围)
features list[int] ([0,1]) 用于绘制的两个特征索引
grid_resolution int (100) 网格分辨率
response_method str ('auto') 预测方式:'auto', 'predict', 'decision_function', 'predict_proba'
plot_method str ('contourf') 绘图方法:'contourf', 'pcolormesh'
scatter bool (True) 是否叠加原始数据散点图

九、模型持久化

9.1 使用joblib

from joblib import dump, load

# 保存模型
dump(model, 'model.joblib')

# 加载模型
loaded_model = load('model.joblib')

9.2 使用pickle

import pickle

# 保存模型
with open('model.pkl', 'wb') as f:
    pickle.dump(model, f)

# 加载模型
with open('model.pkl', 'rb') as f:
    loaded_model = pickle.load(f)

推荐:对于scikit-learn模型,优先使用joblib,效率更高