Scikit-learn 是 Python 中最常用的机器学习库之一。它并不是把各种算法零散地堆放在一起,而是围绕机器学习的完整流程,按照不同任务组织成一组相互配合的模块。从官方 API 的模块结构来看,Scikit-learn 包含数据集、模型选择、预处理、缺失值处理、线性模型、树模型、集成学习、聚类、降维、评估、管道与组合式建模等多个模块。

在学习 Scikit-learn 的过程中,如果一时记不清有哪些顶层模块,可以直接在 Python 中查看:

import sklearn
print(dir(sklearn))

输出中通常可以看到许多顶层名称,例如:datasets、model_selection、preprocessing、linear_model、tree、ensemble、metrics、pipeline 等。需要注意的是,dir(sklearn) 显示的是顶层名称集合,并不等于学习时必须逐一掌握的模块清单。

从整体上看,可以把 Scikit-learn 的主要模块理解为三类分工:

第一类是工作流骨架模块,负责数据、划分、预处理、评估和流程组织。

第二类是主要学习器模块,负责真正训练模型和执行预测。

第三类是扩展专题模块,负责文本特征、特征选择、概率校准、可视化降维、多输出学习等更具体的问题。

这种模块化设计使得 Scikit-learn 不只是“很多算法的集合”,而是一个围绕统一接口组织起来的机器学习工具体系。

一、第一层:核心工作流模块

这一层模块直接对应机器学习最常见的流程:准备数据、划分数据、预处理数据、组织流程、评估结果。在初学阶段,这一层最值得优先掌握。

1、datasets:数据集模块

sklearn.datasets 用于加载常见示例数据、获取公开数据以及生成合成数据。它回答的是“数据从哪里来”。官方 API 将它概括为“加载常用数据集与人工数据生成器的工具集合”。

常用工具:

• load_iris():加载鸢尾花分类数据集,常用于分类教学示例。

• load_wine():加载葡萄酒分类数据集。

• load_digits():加载手写数字小型数据集。

• fetch_california_housing():获取加州房价回归数据集。

• fetch_openml():获取 OpenML 平台公开数据。

• make_classification():生成人工分类数据。

• make_regression():生成人工回归数据。

• make_blobs():生成适合聚类实验的样本点。

2、model_selection:模型选择与数据划分模块

sklearn.model_selection 主要负责训练集与测试集划分、交叉验证和超参数搜索。它回答的是“如何公平地比较模型、如何更稳健地评估模型”。

常用工具:

• train_test_split():把数据集划分为训练集和测试集。

• cross_val_score():用交叉验证给出模型评分。

• KFold:K 折交叉验证划分器。

• StratifiedKFold:分层 K 折,常用于分类任务。

• GridSearchCV:网格搜索超参数。

• RandomizedSearchCV:随机采样方式搜索超参数。

3、preprocessing:数据预处理模块

sklearn.preprocessing 用于把原始数据变成更适合模型处理的形式,例如标准化、归一化、编码和特征扩展。它回答的是“数据进入模型之前,需要做什么整理”。

常用工具:

• StandardScaler:标准化,使特征近似具有零均值、单位标准差。

• MinMaxScaler:缩放到指定区间,常见为 [0, 1]。

• RobustScaler:基于中位数和四分位数缩放,对异常值更稳健。

• OneHotEncoder:把类别特征编码为独热向量。

• OrdinalEncoder:把类别映射为整数序号。

• LabelEncoder:把目标标签编码为整数,通常用于 y,而不用于普通特征列。

• PolynomialFeatures:扩展多项式特征。

4、impute:缺失值处理模块

在当前 Scikit-learn 中,缺失值填补由 sklearn.impute 独立承担。官方 API 明确把它定义为“缺失值填补变换器”模块。

常用工具:

• SimpleImputer:用均值、中位数、众数或常量填补缺失值。

• KNNImputer:根据近邻样本估计缺失值。

• IterativeImputer:用其他特征迭代估计缺失值。

• MissingIndicator:生成“该位置是否缺失”的指示特征。

5、metrics:评估指标模块

sklearn.metrics 用于评价模型表现。不同任务需要不同指标,不能只“训练模型”,却不讨论“怎样衡量模型”。

常用工具:

• accuracy_score:分类准确率。

• precision_score:精确率。

• recall_score:召回率。

• f1_score:F1 值。

• confusion_matrix:混淆矩阵。

• classification_report:分类指标汇总报告。

• mean_squared_error:均方误差。

• mean_absolute_error:平均绝对误差。

• r2_score:决定系数。

6、pipeline:流程串联模块

Pipeline 可以把多个估计器按顺序串联起来,形成“预处理 + 建模”的统一流程。官方文档明确指出,Pipeline 可将一系列变换器顺序应用到数据上,并可在最后接一个预测器。

常用工具:

• Pipeline:显式定义多步处理流程。

• make_pipeline():自动命名步骤,快速创建管道。

7、compose:组合式建模模块

sklearn.compose 主要用于处理异构数据,尤其适合“数值列”和“类别列”混合存在的表格数据。它常与 Pipeline 配合使用,以构造更完整的表格数据处理流程。

常用工具:

• ColumnTransformer:对不同列应用不同的预处理器。

• make_column_transformer():快速构造列变换器。

• TransformedTargetRegressor:对目标变量 y 先变换再回归。

示例 1:从数据到预处理再到模型

下面这个示例把第一层中的几个核心模块串起来:先加载数据,再划分训练集与测试集,然后做标准化,最后训练逻辑回归并计算准确率。

from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.pipeline import Pipelinefrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score
# 1. 加载数据iris = load_iris()X = iris.datay = iris.target
# 2. 划分训练集与测试集X_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.2, random_state=42, stratify=y)
# 3. 用 Pipeline 串联“标准化 + 逻辑回归”pipe = Pipeline([    ("scaler", StandardScaler()),    ("model", LogisticRegression(max_iter=200))])
# 4. 训练与预测pipe.fit(X_train, y_train)y_pred = pipe.predict(X_test)
# 5. 评估print("测试集准确率:", accuracy_score(y_test, y_pred))

这个示例体现了 Scikit-learn 工作流的典型顺序:数据准备 → 数据划分 → 数据预处理 → 模型训练 → 结果评估。

二、第二层:主要学习器模块

这一层模块主要负责“真正进行学习”的部分,也就是具体的模型与算法。初学者最常接触的分类器、回归器、聚类器、降维器,大多集中在这一层。

1、linear_model:线性模型模块

这一模块提供各种线性思想下的模型。它既包括回归模型,也包括分类模型。线性模型通常结构清晰、解释性较强,因此很适合作为入门。

常用工具:

• LinearRegression:线性回归。

• LogisticRegression:逻辑回归,常用于分类。

• Ridge:带 L2 正则化的回归。

• Lasso:带 L1 正则化的回归。

• ElasticNet:同时结合 L1 与 L2 正则化。

• SGDClassifier:基于随机梯度下降的线性分类器。

• SGDRegressor:基于随机梯度下降的线性回归器。

2、neighbors:近邻方法模块

这一模块基于“相似样本通常具有相似输出”的思想。它既可用于分类,也可用于回归,还能用于邻近样本搜索。

常用工具:

• KNeighborsClassifier:K 近邻分类。

• KNeighborsRegressor:K 近邻回归。

• NearestNeighbors:近邻搜索工具。

• RadiusNeighborsClassifier:基于固定半径的近邻分类。

3、tree:决策树模块

决策树通过逐步划分特征空间来完成分类或回归。它的优势在于结构较直观,规则路径较容易解释。

常用工具:

• DecisionTreeClassifier:分类决策树。

• DecisionTreeRegressor:回归决策树。

• export_text:把树结构导出为文本形式。

• plot_tree:绘制树结构图。

4、ensemble:集成学习模块

集成学习将多个学习器组合起来,以提升整体性能与稳定性。

常用工具:

• RandomForestClassifier:随机森林分类器。

• RandomForestRegressor:随机森林回归器。

• GradientBoostingClassifier:梯度提升分类器。

• GradientBoostingRegressor:梯度提升回归器。

• AdaBoostClassifier:AdaBoost 分类器。

• VotingClassifier:投票集成分类器。

5、svm:支持向量机模块

支持向量机强调寻找更优的分类边界;在引入核函数后,还能处理非线性问题。它是机器学习中的经典模块之一。

常用工具:

• SVC:支持向量分类器。

• LinearSVC:线性支持向量分类器。

• SVR:支持向量回归。

• OneClassSVM:单类支持向量机,常用于异常检测。

6、naive_bayes:朴素贝叶斯模块

朴素贝叶斯基于条件独立的简化假设,训练速度快,在文本分类等任务中很常见。

常用工具:

• GaussianNB:高斯朴素贝叶斯。

• MultinomialNB:多项式朴素贝叶斯,常用于词频特征。

• BernoulliNB:伯努利朴素贝叶斯,适合二值特征。

• ComplementNB:对类别不平衡问题更稳健的变体。

7、neural_network:神经网络模块

这一模块提供神经网络模型。在 Scikit-learn 中,它主要对应多层感知机等经典神经网络方法,适合作为传统机器学习与神经网络入门之间的过渡。用户指南将其列为监督学习与无监督学习中的正式主题。

常用工具:

• MLPClassifier:多层感知机分类器。

• MLPRegressor:多层感知机回归器。

• BernoulliRBM:伯努利受限玻尔兹曼机,属于无监督神经网络模型,一般不作为入门重点。

8、discriminant_analysis:判别分析模块

这一模块主要包括线性判别分析和二次判别分析,既可用于分类,也可用于降维背景下的判别建模。它在 Scikit-learn 的用户指南中被单独列为一类监督学习方法。

常用工具:

• LinearDiscriminantAnalysis:线性判别分析,常用于分类,也可用于监督式降维。

• QuadraticDiscriminantAnalysis:二次判别分析,适合类别边界更复杂的情形。

9、cluster:聚类模块

聚类属于无监督学习,不依赖预先给定的标签,而是试图从数据本身发现分组结构。

常用工具:

• KMeans:K 均值聚类。

• DBSCAN:基于密度的聚类。

• AgglomerativeClustering:层次聚类。

• MiniBatchKMeans:适合更大规模数据的 K 均值变体。

10、mixture:混合模型模块

这一模块主要实现高斯混合模型等概率模型方法。官方 API 明确将其作为“Gaussian Mixture Models”模块,用于对数据分布进行混合建模,在聚类、密度估计等问题中都有应用。

常用工具:

• GaussianMixture:高斯混合模型。

• BayesianGaussianMixture:贝叶斯高斯混合模型,可自动调节有效成分数。

11、decomposition:降维模块

这一模块主要用于降维与特征提取。它帮助我们把高维特征变成更紧凑的表示。

常用工具:

• PCA:主成分分析。

• NMF:非负矩阵分解。

• TruncatedSVD:截断奇异值分解。

• FastICA:独立成分分析。

示例 2:更换不同学习器

下面的示例展示“同样的数据,不同学习器可以方便替换”。这正是 Scikit-learn 统一接口设计的价值所在。

from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.metrics import accuracy_score
# 1. 加载数据iris = load_iris()X = iris.datay = iris.target
# 2. 划分数据X_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.2, random_state=42, stratify=y)
# 3. 两个不同学习器models = {    "KNN": KNeighborsClassifier(n_neighbors=5),    "DecisionTree": DecisionTreeClassifier(random_state=42)}
# 4. 训练与比较for name, model in models.items():    model.fit(X_train, y_train)    y_pred = model.predict(X_test)    print(name, "准确率:", accuracy_score(y_test, y_pred))

这段代码说明:虽然 K 近邻和决策树的原理不同,但它们都遵循 fit() 与 predict() 这样的统一接口,因此可以方便地替换和比较。

三、第三层:扩展与专题模块

这一层模块同样是正式模块,但专题性更强,初学阶段不必展开太多。它们更适合作为“知道有这些工具,后面遇到问题再深入”的知识储备。

1、feature_extraction:特征提取模块

这一模块常用于把原始对象转换为特征表示,尤其常见于文本数据。

常用工具:

• CountVectorizer:把文本转换为词频矩阵。

• TfidfVectorizer:把文本转换为 TF-IDF 特征。

• DictVectorizer:把字典形式数据转换为特征矩阵。

• FeatureHasher:用哈希技巧做特征映射。

2、feature_selection:特征选择模块

这一模块用于筛选更有用的特征,去掉冗余或无效特征。

常用工具:

• VarianceThreshold:基于方差过滤低变化特征。

• SelectKBest:按统计量选前 K 个特征。

• chi2:卡方检验,常用于分类任务特征评分。

• RFE:递归特征消除。

3、calibration:概率校准模块

用于让分类器输出的概率更接近真实概率。

常用工具:

• CalibratedClassifierCV:对分类器做概率校准。

• CalibrationDisplay:可视化校准结果。

4、manifold:流形学习模块

多用于高维数据的非线性降维与可视化。

常用工具:

• TSNE:t-SNE,可视化常用。

• Isomap:等距映射降维。

• MDS:多维尺度分析。

• LocallyLinearEmbedding:局部线性嵌入。

5、gaussian_process:高斯过程模块

这一模块实现基于高斯过程的回归与分类方法。官方文档指出,高斯过程是一类非参数监督学习方法,可用于回归和概率分类。

常用工具:

• GaussianProcessRegressor:高斯过程回归。

• GaussianProcessClassifier:高斯过程分类。

• kernels 子模块:提供 RBF、Matern 等常见核函数。

6、inspection:模型检查与解释模块

这一模块用于分析模型行为与解释模型结果,适合在模型训练完成后进一步观察特征影响、局部变化趋势等。它属于机器学习流程中“训练之后的分析工具”。

常用工具:

• permutation_importance:基于置换的重要性分析。

• PartialDependenceDisplay:绘制部分依赖图。

• DecisionBoundaryDisplay:可视化分类边界。

7、其他专题模块

• sklearn.multioutput:多输出分类与回归。

• sklearn.random_projection:随机投影降维。

• sklearn.semi_supervised:半监督学习。

• sklearn.isotonic:保序回归。

• sklearn.covariance:协方差估计模块,用于协方差矩阵与精度矩阵估计。

• sklearn.cross_decomposition:交叉分解模块,如 PLS、CCA。

• sklearn.kernel_approximation:核近似模块,把核方法转化为显式特征映射。

• sklearn.dummy:基线模型模块,提供简单规则分类器与回归器,适合做对照实验。

示例 3:查看文本特征提取结果

下面用 TfidfVectorizer 演示扩展模块中的一个典型用法。

from sklearn.feature_extraction.text import TfidfVectorizer
texts = [    "machine learning is useful",    "scikit learn is practical",    "machine learning and scikit learn"]
vectorizer = TfidfVectorizer()X = vectorizer.fit_transform(texts)
print("特征词:", vectorizer.get_feature_names_out())print("矩阵形状:", X.shape)print("TF-IDF 矩阵:")print(X.toarray())

📘 小结

Scikit-learn 的主要模块大致可分为三层:工作流骨架模块、主要学习器模块和扩展专题模块。理解这些模块的分工,有助于从整体上把握 Scikit-learn 的结构,并逐步建立完整的机器学习工作流意识。

图片

“点赞有美意,赞赏是鼓励”

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐