Scikit-learn:主要模块简介
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 的结构,并逐步建立完整的机器学习工作流意识。

“点赞有美意,赞赏是鼓励”
更多推荐


所有评论(0)