库内机器学习-监督、无监督学习
机器学习
1. 监督学习
Regression(回归任务)
回归任务的目的是预测一个连续值。常见的包括 scikit-learn、XGBoost、LightGBM 和 CatBoost
回归任务的目的是预测一个连续值。许多机器学习库和框架都提供了回归算法,常见的包括 scikit-learn、XGBoost、LightGBM 和 CatBoost,它们各自提供了高效且强大的回归算法。下面是对这些回归算法的介绍:
1. scikit-learn 回归算法
scikit-learn 是 Python 中一个广泛使用的机器学习库,提供了多种回归算法。以下是一些常见的回归算法:
1.1 线性回归(Linear Regression)
-
线性回归是一种最基本的回归模型,假设目标变量与输入特征之间存在线性关系。
-
模型通过最小化误差平方和(OLS)来拟合一条直线,进而预测连续目标值。
-
优点
:
- 简单、易于理解。
- 计算效率高,适用于小型数据集。
-
缺点
:
- 对异常值敏感。
- 假设数据是线性的,无法捕捉复杂的非线性关系。
1.2 岭回归(Ridge Regression)
- 岭回归是线性回归的正则化版本,通过L2正则化惩罚模型参数,减小过拟合的风险。
- 适用于特征较多或存在多重共线性的情况。
1.3 套索回归(Lasso Regression)
- 套索回归也是一种正则化线性回归,但它使用L1正则化来惩罚模型参数,具有特征选择的效果。
- 当有很多无关特征时,Lasso可以自动将一些特征的权重压缩为零,从而实现特征选择。
1.4 弹性网回归(ElasticNet Regression)
- 弹性网回归结合了L1和L2正则化,适用于具有较多特征且特征之间可能相关的数据。
1.5 支持向量回归(SVR)
- 支持向量回归是一种基于支持向量机(SVM)的回归算法,适用于非线性回归问题。
- 通过映射到高维特征空间,在高维空间中找到一个最大化间隔的超平面。
1.6 决策树回归(Decision Tree Regression)
- 决策树回归通过递归地划分特征空间来预测连续值,适用于非线性回归问题。
- 优点:无需特征缩放和正则化,能够自动捕捉特征之间的复杂关系。
- 缺点:容易过拟合,尤其是在特征空间较大时。
2. XGBoost 回归算法
XGBoost(Extreme Gradient Boosting)是一种基于梯度提升(Gradient Boosting)的算法,广泛应用于回归和分类任务。XGBoost回归算法的主要特点:
2.1 工作原理
- XGBoost采用 梯度提升树(Gradient Boosting Trees),通过构建多个决策树来进行回归预测,每棵树的训练都依赖于前一棵树的错误。
- 采用 加法模型,每棵树都试图纠正之前树的错误,直到误差达到最小。
2.2 特点
- 正则化:XGBoost加入了L1和L2正则化,有助于防止过拟合。
- 并行化:训练过程可以并行化,提高计算效率。
- 支持处理缺失值:自动处理数据中的缺失值。
- 支持自定义损失函数:可以根据任务需要自定义损失函数。
- 高效性:XGBoost优化了计算流程,通常在大规模数据集上表现非常好。
2.3 适用场景
- 大规模数据集、复杂的非线性关系、高维特征。
3. LightGBM 回归算法
LightGBM(Light Gradient Boosting Machine)是微软提出的一种梯度提升算法,它在效率和性能上相较于XGBoost做了很多优化,特别适合大规模数据集。
3.1 工作原理
- LightGBM基于梯度提升树,并使用基于直方图的决策树学习算法来加速模型训练。
- 采用了Leaf-wise(叶子-wise)策略,而非传统的 Level-wise(层级-wise)策略,能够让树的深度增加,从而提升模型的拟合能力。
3.2 特点
- 高效性:训练速度更快,尤其在大数据集和高维数据集上表现优秀。
- 内存效率:采用了直方图算法,减少了内存占用。
- 支持类别特征:直接支持类别特征输入,无需预处理。
- 并行化和分布式计算:支持并行和分布式计算,适合大规模数据集。
3.3 适用场景
- 大数据集、需要高效性和内存优化的任务。
4. CatBoost 回归算法
CatBoost(Categorical Boosting)是由Yandex提出的梯度提升算法,特别优化了对类别特征的处理。它与XGBoost和LightGBM类似,都是基于梯度提升的算法,但它在类别特征的处理和训练稳定性上有独特的优势。
4.1 工作原理
- CatBoost使用梯度提升树(GBT),并通过特殊的算法处理类别特征,而不需要像其他算法那样进行手动的编码(如one-hot编码)。
- 通过 Ordered Boosting 和 Permutation-based 技术来减少过拟合。
4.2 特点
- 处理类别特征:CatBoost自动处理类别特征,避免了特征工程的繁琐步骤。
- 高精度:通过复杂的正则化机制,CatBoost通常能够提供比XGBoost和LightGBM更精确的预测。
- 高效性:训练速度较快,且内存占用较少。
- 自动调参:CatBoost在训练过程中自动进行超参数调整,提升模型的表现。
4.3 适用场景
- 包含大量类别特征的数据集,尤其是对类别特征的建模有较高需求的场景。
🎯 总结
| 特性/算法 | scikit-learn | XGBoost | LightGBM | CatBoost |
|---|---|---|---|---|
| 基础算法 | 线性回归、决策树等 | 梯度提升树 | 梯度提升树(直方图) | 梯度提升树(类别处理优化) |
| 正则化 | 有(Ridge, Lasso等) | 有(L1、L2正则化) | 有(L2正则化) | 有(内置正则化) |
| 并行化 | 部分支持 | 高效支持 | 高效支持 | 高效支持 |
| 处理类别特征 | 无 | 无 | 有 | 有 |
| 适用场景 | 小型到中型数据集 | 大规模数据集,复杂关系 | 大数据集,内存高效 | 类别特征丰富,精度要求高 |
| 训练速度 | 较慢 | 较快 | 非常快 | 快 |
| 内存效率 | 一般 | 一般 | 高效 | 高效 |
Classification(分类任务)
分类任务是监督学习中的一种任务,目的是将输入数据分类为不同的类别或标签。通常,分类任务的输出是一个离散的标签。
分类任务简介
分类任务是监督学习中的一种任务,目的是将输入数据分类为不同的类别或标签。通常,分类任务的输出是一个离散的标签。与回归任务(预测连续值)不同,分类任务的目标是基于输入特征,预测类别标签。
常见的分类任务包括:
- 二分类:只有两个类别(例如,垃圾邮件与非垃圾邮件)。
- 多分类:有多个类别(例如,手写数字识别任务,类别为0-9)。
分类算法概述
许多机器学习库提供了分类算法。以下是常用分类算法的简介,包括 scikit-learn、XGBoost、LightGBM 和 CatBoost 中的分类算法。
1. scikit-learn 分类算法
scikit-learn 是一个流行的机器学习库,提供了许多经典的分类算法。以下是其中的一些常见分类算法:
1.1 逻辑回归(Logistic Regression)
- 逻辑回归是一个线性分类模型,通过求解一个线性决策边界来分类,通常用于二分类任务(也可以扩展到多分类)。
- 优点:简单、快速,适用于线性可分数据。
- 缺点:对于非线性问题性能较差,容易受到异常值影响。
1.2 支持向量机(SVM)
- 支持向量机是一种强大的分类方法,通过寻找最优超平面将数据分开。SVM可以使用不同的核函数来处理非线性问题。
- 优点:对于复杂和高维的数据,SVM通常表现出色。
- 缺点:训练时间长,特别是在大数据集上。
1.3 决策树(Decision Trees)
- 决策树是一种基于树结构的分类方法,每个节点表示一个特征的判断,叶节点表示类别标签。
- 优点:直观、易于理解,能处理非线性数据。
- 缺点:容易过拟合。
1.4 随机森林(Random Forest)
- 随机森林是集成学习方法,基于多个决策树进行分类,通过投票机制决定最终的分类结果。
- 优点:准确率高,能够处理大规模数据,抗过拟合能力强。
- 缺点:模型较大,训练和预测速度较慢。
1.5 k最近邻(k-NN)
- k-NN是基于实例的学习方法,通过计算新样本与训练集中的样本的距离进行分类。
- 优点:简单且易于实现,无需假设数据分布。
- 缺点:计算量大,对于大数据集效率较低,且对于特征选择敏感。
1.6 朴素贝叶斯(Naive Bayes)
- 朴素贝叶斯是基于贝叶斯定理的分类算法,假设特征之间条件独立。
- 优点:简单、高效,特别适用于文本分类(如垃圾邮件过滤)。
- 缺点:假设特征条件独立,实际数据中这一假设往往不成立。
1.7 神经网络(Neural Networks)
- 神经网络通过多层次的结构模拟人脑神经元的工作方式,能够建模复杂的非线性关系。
- 优点:适用于复杂的非线性数据,尤其是大数据集和深度学习任务。
- 缺点:需要大量数据、计算资源和时间。
2. XGBoost 分类算法
XGBoost(Extreme Gradient Boosting)是一个高效的梯度提升框架,广泛用于分类任务。XGBoost的核心思想是通过加法模型组合多个弱分类器(通常是决策树),逐步减少误差。
2.1 工作原理
- XGBoost使用 梯度提升(Gradient Boosting) 方法,构建多个决策树,每棵树都尝试减少前一棵树的误差。
- 采用 加法模型,每棵树的预测结果会加到前一棵树的结果上,直到误差最小。
2.2 特点
- 正则化:XGBoost引入了L1和L2正则化,能够有效防止过拟合。
- 高效性:支持并行计算,训练速度非常快,适用于大规模数据。
- 缺失值处理:能够自动处理缺失数据。
2.3 适用场景
- 大规模数据集,复杂的非线性关系,要求高精度的分类任务。
3. LightGBM 分类算法
LightGBM(Light Gradient Boosting Machine)是一个快速、分布式的梯度提升框架,相比XGBoost,在效率和内存占用方面有进一步的优化,尤其适合处理大规模数据集。
3.1 工作原理
- LightGBM通过 直方图算法 加速训练过程,并且采用 Leaf-wise(叶子-wise)分裂策略,提高了模型的表达能力。
3.2 特点
- 训练速度快:相比其他梯度提升算法,LightGBM在训练速度和内存使用方面有显著优势。
- 支持类别特征:直接处理类别特征,不需要预处理。
- 高效性:内存占用低,支持大数据集。
3.3 适用场景
- 对大规模数据集和高维度特征有较高需求的分类任务。
4. CatBoost 分类算法
CatBoost(Categorical Boosting)是由Yandex提出的梯度提升算法,专门优化了对类别特征的处理。它通过一些特殊的技术来处理类别特征,能够提高分类模型的精度。
4.1 工作原理
- CatBoost基于梯度提升树(GBT),并通过 Ordered Boosting 和 Permutation-based 技术来减少过拟合。
- 特别的,CatBoost能够自动处理类别特征,无需人工编码,如One-hot编码。
4.2 特点
- 自动处理类别特征:CatBoost能够直接处理原始的类别特征(无需额外的编码处理)。
- 高精度:通常能够在准确性上优于XGBoost和LightGBM,特别是在类别特征较多时。
- 易于使用:默认配置下,CatBoost通常能够给出相对较好的表现,适合快速实验。
4.3 适用场景
- 对类别特征有较高需求的分类任务,尤其是对于复杂的数据集,CatBoost能够自动处理类别特征并获得更好的结果。
🎯 总结
| 特性/算法 | scikit-learn | XGBoost | LightGBM | CatBoost |
|---|---|---|---|---|
| 分类算法 | 逻辑回归、SVM、决策树等 | 梯度提升树(GBDT) | 梯度提升树(GBDT) | 梯度提升树(GBDT) |
| 处理类别特征 | 无 | 无 | 有 | 有 |
| 正则化 | 有(L1、L2正则化) | 有(L1、L2正则化) | 有(L2正则化) | 有(内置正则化) |
| 并行化 | 部分支持 | 高效支持 | 高效支持 | 高效支持 |
| 适用场景 | 小型到中型数据集 | 大规模数据集,复杂关系 | 大数据集,内存高效 | 类别特征丰富,精度要求高 |
| 训练速度 | 较慢 | 较快 | 非常快 | 快 |
| 内存效率 | 一般 | 一般 | 高效 | 高效 |
Clustering(聚类任务)
聚类任务属于无监督学习的范畴,目标是将数据集中的样本分成若干个类(簇),使得同一簇中的样本相似度较高,而不同簇之间的样本相似度较低。聚类算法不依赖于事先标注的标签数据,它仅依据数据本身的特征进行分组。
聚类任务常见的应用场景包括:
- 图像分割
- 客户细分
- 异常检测
- 数据降维
常见的聚类算法
- Affinity Propagation
- BIRCH
- K-Means
- Mini-Batch K-Means
以下是对这些算法的详细介绍:
1. Affinity Propagation
Affinity Propagation(亲和传播)是一种基于“消息传递”的聚类算法,它通过在样本之间传递“亲和力”来自动确定簇的数量,并对数据进行聚类。
工作原理:
- Affinity Propagation基于两个主要的思想:一个是责任(responsibility),它表示某个样本作为簇中心的责任;另一个是可用性(availability),它表示某个样本作为簇成员的可用性。
- 在算法的每一轮迭代中,每个数据点都会发送责任消息和可用性消息,并逐步收敛,最终选择最优的簇中心。
- 亲和力矩阵:数据点之间的相似度矩阵(例如,欧几里得距离、相似度度量),其中每个数据点对其他数据点的相似度表示它与其他点的亲和力。
优缺点:
- 优点:不需要预先指定簇的数量。对数据点的分布、簇的大小和形状不敏感。
- 缺点:计算开销较大,尤其是在大规模数据集上可能不适用。
适用场景:
- 对簇数没有明确先验知识,且数据集不太大时。
2. BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)
BIRCH 是一种专门为大规模数据集设计的聚类算法,基于层次聚类的思想,但通过一个增量式的方式来提高效率。它通过构建一个特征树(CF树)来进行聚类。
工作原理:
- CF树:BIRCH使用一个层次结构的CF树来存储数据。CF树通过压缩数据点并将它们分配到叶子节点中,从而加速了聚类过程。
- 增量式聚类:BIRCH使用逐步的增量方法处理数据,并通过合并数据点来形成簇。
- 第二步聚类:在构建CF树之后,BIRCH执行传统的聚类方法(如K-Means)在CF树的叶节点上进一步优化聚类结果。
优缺点:
- 优点:适合大规模数据集,处理速度较快。可以高效地处理海量数据。
- 缺点:需要选择合适的簇数,并且对数据的初步分布比较敏感。
适用场景:
- 用于非常大的数据集或流数据的聚类分析。
3. K-Means
K-Means 是最经典的聚类算法之一,采用划分式聚类方法,目标是将数据集划分为k个簇,每个簇由其质心(均值)来代表。
工作原理:
- 选择簇数:首先需要指定聚类的簇数 k。
- 初始质心选择:随机选择k个数据点作为初始质心。
- 分配样本:将每个样本分配到距离其最近的质心的簇中。
- 更新质心:计算每个簇的均值,并更新簇的质心。
- 迭代:不断重复分配样本和更新质心的步骤,直到收敛。
优缺点:
- 优点:算法简单、计算高效,适合处理大规模数据。
- 缺点:需要预先指定簇数 k,对初始质心较为敏感,可能会陷入局部最优。
适用场景:
- 数据规模适中,簇数明确的情况。
4. Mini-Batch K-Means
Mini-Batch K-Means 是K-Means算法的一个变种,适用于大规模数据集。它采用小批量(mini-batch)的方式来更新簇中心,减少了每次迭代的计算量。
工作原理:
- 小批量更新:在每次迭代中,Mini-Batch K-Means只随机选择一小部分数据点进行更新,而不是使用所有数据点。这使得每次迭代的计算量大大降低,适合处理大数据集。
- 批量更新:与K-Means相比,它能更快地进行训练,同时在一定程度上保持了较好的聚类效果。
优缺点:
- 优点:对于大规模数据集非常有效,训练速度较K-Means更快,计算资源消耗更低。
- 缺点:由于使用小批量数据,结果可能不是全局最优。
适用场景:
- 适用于非常大的数据集,特别是在内存限制下需要快速训练时。
算法比较总结
| 特性/算法 | Affinity Propagation | BIRCH | K-Means | Mini-Batch K-Means |
|---|---|---|---|---|
| 簇数要求 | 自动确定 | 需要指定簇数 | 需要指定簇数 | 需要指定簇数 |
| 时间复杂度 | 高(O(n^2)) | 较低(O(n)) | 较低(O(nkd)) | 低(O(n)) |
| 内存消耗 | 较高 | 低(使用CF树) | 较低 | 低 |
| 适用场景 | 中小型数据集,簇数不确定 | 大规模数据集,流数据聚类 | 中小型数据集,簇数已知 | 大规模数据集,簇数已知 |
| 优点 | 不需要预先指定簇数,灵活 | 高效处理大规模数据 | 简单高效,易于实现 | 适合大规模数据集,速度更快 |
| 缺点 | 计算开销大,效率较低 | 对簇数和初始数据敏感 | 需要选择簇数,容易陷入局部最优 | 结果可能不是全局最优 |
总结
- Affinity Propagation 适用于不确定簇数的情况,适合较小规模的数据集。
- BIRCH 适用于大规模数据集,尤其是处理流数据时的增量聚类。
- K-Means 是最常用的聚类算法,适合簇数已知且数据规模适中的场景。
- Mini-Batch K-Means 是K-Means的变种,专为大数据集设计,能够更快地收敛。
根据不同的数据集大小和计算资源,可以选择最适合的聚类算法。如果数据量庞大或需要快速聚类,Mini-Batch K-Means 或 BIRCH 是不错的选择。如果不确定簇的数量,可以尝试 Affinity Propagation。
Decomposition(降纬分解)
在机器学习中,decompose(分解/降维)通常指的是对数据集进行一种结构化的变换,将高维数据映射到低维空间,同时尽量保留原始数据的重要特征。
1. PCA(主成分分析)—— 常用的分解方法
- 目标: 找到数据中方差最大的方向,并把数据投影到比原来维度更低的空间。
- 为什么要降维?
- 高维数据往往很稀疏,训练模型时计算量大、噪声多。
- 降维有助于去掉冗余信息,让模型更专注于重要特征。
- 例子:
假如你有一个手写数字图片数据集,每张图片是 28x28=784维 的像素向量。PCA 可以把它们降到 2维或者3维,让你更容易可视化数字在二维空间的分布。
2. 分解的效果示例:
原始数据:784维像素向量(手写数字图片)
| id | label | image (784维向量) |
|---|---|---|
| 1 | 0 | [0.0, 0.1, 0.2, ..., 0.9] |
| 2 | 1 | [0.3, 0.4, 0.5, ..., 0.8] |
PCA降维到3维后的数据:
| id | label | pca (3维向量) |
|---|---|---|
| 1 | 0 | [12.34, -4.56, 7.89] |
| 2 | 1 | [3.21, 6.78, -1.23] |
你可以想象成把一团数据压缩成一个更小的表示方式,同时尽可能保留区分度。
3. 常见的分解方法:
PostgresML 可能支持的降维方法:
- PCA(主成分分析): 线性降维,强调方差最大化。
- t-SNE(t-分布随机邻域嵌入): 适合非线性数据降维,常用于可视化复杂数据。
- UMAP(统一流形逼近与投影): 比 t-SNE 快速且保持更多局部结构。
- SVD(奇异值分解): 常用于矩阵分解、文本数据降维。
Data Pre-processing(数据预处理)
训练前+predict时,对数据集进行数据处理
1. 将分类值编码为定量值(Label Encoding / One-Hot Encoding)
目标:把类别特征(文本、标识符等)转换成数值型特征,以便机器学习模型能够理解。
方法:
-
Label Encoding(标签编码)
将每个类别映射成一个整数,比如:['apple', 'banana', 'cherry'] -> [0, 1, 2]代码示例(用
sklearn):from sklearn.preprocessing import LabelEncoder data = ['apple', 'banana', 'cherry', 'apple'] encoder = LabelEncoder() encoded_data = encoder.fit_transform(data) print(encoded_data) # [0 1 2 0] -
One-Hot Encoding(独热编码)
为每个类别创建一个二进制列:['apple', 'banana', 'cherry'] -> apple banana cherry 1 0 0 0 1 0 0 0 1代码示例:
import pandas as pd data = pd.DataFrame({'fruit': ['apple', 'banana', 'cherry', 'apple']}) encoded_data = pd.get_dummies(data, columns=['fruit']) print(encoded_data)
📊 选择建议:
- Label Encoding 适合有序类别(如评分:低、中、高)。
- One-Hot Encoding 适合无序类别(如颜色、品牌名)。
2. 处理 NULL 值(缺失值处理)
目标:将缺失值填充为某个合理的数值(如均值、中位数等)。
方法:
-
均值填充
:
import pandas as pd data = pd.DataFrame({'score': [85, 90, None, 88, None]}) data['score'].fillna(data['score'].mean(), inplace=True) print(data) -
中位数填充
:
data['score'].fillna(data['score'].median(), inplace=True) -
常量填充
: 将所有NULL值替换为固定值(如0、-1等):
data['score'].fillna(0, inplace=True) -
前向/后向填充
(适用于时间序列):
data['score'].fillna(method='ffill', inplace=True) # 前向填充 data['score'].fillna(method='bfill', inplace=True) # 后向填充
📊 选择建议:
- 均值/中位数填充适合数值型数据。
- 常量填充适合逻辑上有明确“默认值”的情况。
- 前/后向填充适合时间序列数据。
3. 数据缩放(Normalization / Standardization)
目标:将所有变量的数值缩放到相似的范围,确保不同尺度的数据不会对模型造成不均衡影响。
方法:
-
Min-Max Scaling(归一化)
将数值缩放到
[0, 1]范围:
Xscaled=X−XminXmax−XminX_{scaled} = \frac{X - X_{min}}{X_{max} - X_{min}}
代码示例
:
from sklearn.preprocessing import MinMaxScaler data = [[-1, 2], [0, 4], [1, 6]] scaler = MinMaxScaler() scaled_data = scaler.fit_transform(data) print(scaled_data) -
Z-Score 标准化(Standardization)
将数据转化为均值为0、方差为1的分布:
Xscaled=X−μσX_{scaled} = \frac{X - \mu}{\sigma}
代码示例
:
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaled_data = scaler.fit_transform(data) print(scaled_data) -
RobustScaler(抗异常值缩放)
使用
中位数和四分位距
进行缩放,不受异常值影响:
from sklearn.preprocessing import RobustScaler scaler = RobustScaler() scaled_data = scaler.fit_transform(data) print(scaled_data)
📊 选择建议:
- Min-Max Scaling 适合数据分布稳定且范围有限的情况。
- Z-Score 标准化 适合数据呈正态分布时。
- RobustScaler 适合数据有较多异常值时。
小结:数据预处理步骤
- 编码分类值:
- Label Encoding:适合有序类别。
- One-Hot Encoding:适合无序类别。
- 处理缺失值:
- 均值/中位数填充:适合连续变量。
- 常量填充:适合逻辑上可定义的缺失。
- 前/后向填充:适合时间序列。
- 缩放变量范围:
- Min-Max Scaling:将数据缩放至
[0, 1]。 - Z-Score 标准化:调整数据至均值为0、方差为1。
- RobustScaler:适合异常值较多的数据集。
- Min-Max Scaling:将数据缩放至
Hyperparameter Search (超参数搜索)
超参数搜索(Hyperparameter Search) 是机器学习模型调优的重要步骤,用于自动寻找一组最优的超参数组合,以提升模型的性能。
超参数和超参数搜索的区别:
- 超参数(Hyperparameters):
- 训练前设置的参数,会影响模型的学习过程,但不能通过数据直接学习到。
- 例如:
- 对于降维模型(如PCA):
n_components控制降维后的维度。 - 对于随机森林模型:
n_estimators控制决策树的数量。
- 对于降维模型(如PCA):
- 超参数搜索(Hyperparameter Search):
- 自动尝试不同的超参数组合,找到最佳方案。
- 常见方法:
- Grid Search(网格搜索): 穷举所有超参数组合,计算成本较高。
- Random Search(随机搜索): 随机抽样超参数组合,更高效。
- Bayesian Optimization(贝叶斯优化): 根据历史搜索结果调整搜索方向,更智能。
在 PostgresML 中如何使用超参数搜索?
假如你想在 PCA降维模型 上搜索最优的降维维度:
SELECT * FROM pgml.train(
'Handwritten Digit Components',
'decomposition',
'pgml.digit_vectors',
hyperparams => '{
"n_components": [2, 3, 5, 10]
}'
);
解读:
n_components是超参数,我们让它尝试 2、3、5、10 这四种降维维度。- PostgresML 会自动帮你跑4次实验,并挑选表现最好的模型。
查看超参数搜索结果:
训练完成后,你可以查看模型表现:
SELECT name, task, status, hyperparams, metrics
FROM pgml.models
WHERE name = 'Handwritten Digit Components';
结果可能是:
| name | task | status | hyperparams | metrics |
|---|---|---|---|---|
| Handwritten Digit Components | decomposition | complete | ||
| Handwritten Digit Components | decomposition | complete | ||
| Handwritten Digit Components | decomposition | complete | ||
| Handwritten Digit Components | decomposition | complete |
解释:
- n_components=10 时,模型保留的方差最多(95.3%),说明降维效果最好。
- 你可以选择用这个模型来做降维推理。
总结:
👉 超参数搜索的作用是: 自动尝试不同的超参数组合,寻找最优的模型配置,从而提升模型性能。
在 PostgresML 里:
- 超参数 用
hyperparams参数指定。 - 超参数搜索 支持传入多个候选值,让系统自动挑选最优方案。
- 结果 可以通过
pgml.models查看模型和超参数的对应表现。
Joint Optimization (联合优化)
联合优化(Joint Optimization)。这个函数的作用是在 多目标学习(multi-target learning) 的场景下,同时对多个目标变量进行联合建模和优化。
为什么要用联合优化?
应用场景:
- 多任务回归:
- 房价 + 租金
- 产品销量 + 客户满意度
- 股票价格 + 市场波动率
- 多目标分类:
- 电影评分 + 评论情感倾向
- 文本主题 + 作者风格标签
- 共享特征空间:
- 当多个目标变量有共同的输入特征时,联合优化可以让模型共享这些特征的学习结果,从而更高效地学习复杂关系。
联合优化的好处:
- 信息共享: 多个目标可能有潜在的关联,联合学习能互相促进。
- 减少过拟合: 联合优化可作为一种正则化方式,让模型更稳健。
- 计算效率: 一次训练解决多个目标,而不是分别训练多个模型。
Embeddings
预处理后的文本会输入到预训练的 Transformer 模型中。该模型在训练过程中学会了将语义相似的文本映射到相近的向量。
这几个概念在处理文本、图像等嵌入向量时都非常重要!让我依次拆解每个概念的原理、数学公式、以及实际应用场景:
1. Dimensionality Reduction(降维)
原理:
降维是把高维空间的数据投射到低维空间,同时尽可能保留数据的主要特征。
常见算法:
- PCA(主成分分析): 通过线性变换,将数据投影到能解释最多方差的方向上。
- t-SNE: 非线性降维,擅长可视化高维数据,但对大数据集比较慢。
- UMAP: 更高效的非线性降维,比 t-SNE 快,适合可视化和聚类。
- Autoencoder(自编码器): 基于神经网络,压缩输入数据到低维表示。
公式(PCA简化版):
- 数据去均值: Xcentered=X−mean(X)X_{centered} = X - \text{mean}(X)
- 计算协方差矩阵: C=1n−1XcenteredTXcenteredC = \frac{1}{n-1} X_{centered}^T X_
- 特征分解得到主成分,并取前 k 个特征向量组成变换矩阵 WW: Z=XcenteredWZ = X_{centered} W
应用场景:
- NLP:降维词向量或句向量,减少计算复杂度。
- 图像处理:压缩 CNN 提取的特征图。
- 相似度计算:减少噪声,让相似度度量更精准。
2. Aggregation(聚合)
原理:
聚合是将多个向量合并成一个向量的操作,常用于文本或图像嵌入任务中,比如对一段文本中每个词向量聚合,得到整个句子的向量表示。
常见方法:
- 均值聚合 (Mean Pooling):
对所有向量取均值: v=1n∑i=1nviv = \frac{1}{n} \sum_{i=1}^{n} v_i - 最大池化 (Max Pooling):
取每个维度上的最大值: vj=max(v1j,v2j,...,vnj)v_j = \max(v_{1j}, v_{2j}, ..., v_{nj}) - 加权平均 (Weighted Sum):
根据权重 wiw_i 计算加权平均: v=∑i=1nwiviv = \sum_{i=1}^{n} w_i v_i - 注意力机制 (Attention):
动态计算每个向量的权重并聚合,常见于 Transformer 模型。
应用场景:
- NLP:将词向量聚合成句向量或文档向量。
- 图像处理:在 CNN 的特征图上进行池化操作。
- 推荐系统:对用户交互的商品向量进行加权聚合以获取用户画像。
3. Similarity(相似度计算)
原理:
相似度计算是衡量两个向量在嵌入空间中的接近程度,常用于搜索、推荐、聚类等任务。
常见度量方式:
- 欧几里得距离 (Euclidean Distance):衡量两个点的直线距离。 d(a,b)=∑i=1n(ai−bi)2d(a, b) = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2}
- 余弦相似度 (Cosine Similarity):衡量两个向量夹角的余弦值,反映方向上的相似性。 cos(a,b)=a⋅b∥a∥∥b∥\text{cos}(a, b) = \frac
- 点积 (Dot Product):衡量向量在相同方向上的投影大小,尤其在神经网络中常用。 a⋅b=∑i=1naibia \cdot b = \sum_{i=1}^{n} a_i b_i
- 曼哈顿距离 (Manhattan Distance):沿坐标轴计算距离。 d(a,b)=∑i=1n∣ai−bi∣d(a, b) = \sum_{i=1}^{n} |a_i - b_i|
应用场景:
- 文本搜索:计算查询向量与候选文本向量之间的相似度。
- 图像检索:比较图片特征向量之间的欧氏距离。
- 推荐系统:衡量用户嵌入向量与物品嵌入向量的点积。
4. Normalization(归一化)
原理:
归一化是调整向量的长度或数值范围,使它们更适合距离计算或梯度下降等操作。
常见方法:
- L2 归一化(单位向量):将向量长度缩放为1,保持方向不变。 vnorm=v∥v∥2v_{norm} = \frac
- Min-Max 归一化:把向量的每个维度压缩到 [0, 1] 区间: vi=vi−min(v)max(v)−min(v)v_i = \frac
- Z-Score 标准化:让数据分布的均值为0、标准差为1: vi=vi−μσv_i = \frac
为什么要归一化?
- 避免特征尺度不均衡影响相似度计算(尤其是欧几里得距离、点积等)。
- 加速神经网络梯度下降收敛。
- 提升聚类、推荐系统等模型效果。
应用场景:
- NLP:归一化文本向量用于余弦相似度计算。
- 图像处理:标准化像素值范围(如 [0, 255] 转换成 [0, 1])。
- 数据库向量索引:向量存储前通常归一化,以便高效检索。
5 总结
| 概念 | 作用 | 常见方法 | 应用场景 |
|---|---|---|---|
| 降维 | 压缩高维数据,提取主要特征 | PCA, t-SNE, UMAP | NLP、图像聚类 |
| 聚合 | 合并多个向量成一个整体向量 | 平均池化、最大池化、注意力机制 | 文本->句向量、用户画像 |
| 相似度计算 | 衡量两个向量的相似程度 | 欧氏距离、余弦相似度、点积 | 搜索、推荐、检索系统 |
| 归一化 | 统一向量尺度,消除量纲影响 | L2 归一化、Z-Score、Min-Max | 计算距离、梯度下降 |

浙公网安备 33010602011771号