库内机器学习-监督、无监督学习

机器学习

1. 监督学习

Regression(回归任务)

​ 回归任务的目的是预测一个连续值。常见的包括 scikit-learnXGBoostLightGBMCatBoost

回归任务的目的是预测一个连续值。许多机器学习库和框架都提供了回归算法,常见的包括 scikit-learnXGBoostLightGBMCatBoost,它们各自提供了高效且强大的回归算法。下面是对这些回归算法的介绍:


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 BoostingPermutation-based 技术来减少过拟合。
4.2 特点
  • 处理类别特征:CatBoost自动处理类别特征,避免了特征工程的繁琐步骤。
  • 高精度:通过复杂的正则化机制,CatBoost通常能够提供比XGBoost和LightGBM更精确的预测。
  • 高效性:训练速度较快,且内存占用较少。
  • 自动调参:CatBoost在训练过程中自动进行超参数调整,提升模型的表现。
4.3 适用场景
  • 包含大量类别特征的数据集,尤其是对类别特征的建模有较高需求的场景。

🎯 总结

特性/算法 scikit-learn XGBoost LightGBM CatBoost
基础算法 线性回归、决策树等 梯度提升树 梯度提升树(直方图) 梯度提升树(类别处理优化)
正则化 有(Ridge, Lasso等) 有(L1、L2正则化) 有(L2正则化) 有(内置正则化)
并行化 部分支持 高效支持 高效支持 高效支持
处理类别特征
适用场景 小型到中型数据集 大规模数据集,复杂关系 大数据集,内存高效 类别特征丰富,精度要求高
训练速度 较慢 较快 非常快
内存效率 一般 一般 高效 高效

Classification(分类任务)

​ 分类任务是监督学习中的一种任务,目的是将输入数据分类为不同的类别或标签。通常,分类任务的输出是一个离散的标签。

分类任务简介

分类任务是监督学习中的一种任务,目的是将输入数据分类为不同的类别或标签。通常,分类任务的输出是一个离散的标签。与回归任务(预测连续值)不同,分类任务的目标是基于输入特征,预测类别标签。

常见的分类任务包括:

  • 二分类:只有两个类别(例如,垃圾邮件与非垃圾邮件)。
  • 多分类:有多个类别(例如,手写数字识别任务,类别为0-9)。

分类算法概述

许多机器学习库提供了分类算法。以下是常用分类算法的简介,包括 scikit-learnXGBoostLightGBMCatBoost 中的分类算法。


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 BoostingPermutation-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(聚类任务)

聚类任务属于无监督学习的范畴,目标是将数据集中的样本分成若干个类(簇),使得同一簇中的样本相似度较高,而不同簇之间的样本相似度较低。聚类算法不依赖于事先标注的标签数据,它仅依据数据本身的特征进行分组。

聚类任务常见的应用场景包括:

  • 图像分割
  • 客户细分
  • 异常检测
  • 数据降维

常见的聚类算法

  1. Affinity Propagation
  2. BIRCH
  3. K-Means
  4. 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-MeansBIRCH 是不错的选择。如果不确定簇的数量,可以尝试 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 适合数据有较多异常值时。

小结:数据预处理步骤

  1. 编码分类值
    • Label Encoding:适合有序类别。
    • One-Hot Encoding:适合无序类别。
  2. 处理缺失值
    • 均值/中位数填充:适合连续变量。
    • 常量填充:适合逻辑上可定义的缺失。
    • 前/后向填充:适合时间序列。
  3. 缩放变量范围
    • Min-Max Scaling:将数据缩放至 [0, 1]
    • Z-Score 标准化:调整数据至均值为0、方差为1。
    • RobustScaler:适合异常值较多的数据集。

Hyperparameter Search (超参数搜索)

超参数搜索(Hyperparameter Search) 是机器学习模型调优的重要步骤,用于自动寻找一组最优的超参数组合,以提升模型的性能。


超参数和超参数搜索的区别:

  • 超参数(Hyperparameters):
    • 训练前设置的参数,会影响模型的学习过程,但不能通过数据直接学习到。
    • 例如:
      • 对于降维模型(如PCA):n_components 控制降维后的维度。
      • 对于随机森林模型:n_estimators 控制决策树的数量。
  • 超参数搜索(Hyperparameter Search):
    • 自动尝试不同的超参数组合,找到最佳方案。
    • 常见方法:
      1. Grid Search(网格搜索): 穷举所有超参数组合,计算成本较高。
      2. Random Search(随机搜索): 随机抽样超参数组合,更高效。
      3. 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) 的场景下,同时对多个目标变量进行联合建模和优化。


为什么要用联合优化?

应用场景:
  1. 多任务回归:
    • 房价 + 租金
    • 产品销量 + 客户满意度
    • 股票价格 + 市场波动率
  2. 多目标分类:
    • 电影评分 + 评论情感倾向
    • 文本主题 + 作者风格标签
  3. 共享特征空间:
    • 当多个目标变量有共同的输入特征时,联合优化可以让模型共享这些特征的学习结果,从而更高效地学习复杂关系。

联合优化的好处:
  • 信息共享: 多个目标可能有潜在的关联,联合学习能互相促进。
  • 减少过拟合: 联合优化可作为一种正则化方式,让模型更稳健。
  • 计算效率: 一次训练解决多个目标,而不是分别训练多个模型。

Embeddings

预处理后的文本会输入到预训练的 Transformer 模型中。该模型在训练过程中学会了将语义相似的文本映射到相近的向量。

这几个概念在处理文本、图像等嵌入向量时都非常重要!让我依次拆解每个概念的原理数学公式、以及实际应用场景


1. Dimensionality Reduction(降维)

原理:

降维是把高维空间的数据投射到低维空间,同时尽可能保留数据的主要特征。

常见算法:

  • PCA(主成分分析): 通过线性变换,将数据投影到能解释最多方差的方向上。
  • t-SNE: 非线性降维,擅长可视化高维数据,但对大数据集比较慢。
  • UMAP: 更高效的非线性降维,比 t-SNE 快,适合可视化和聚类。
  • Autoencoder(自编码器): 基于神经网络,压缩输入数据到低维表示。

公式(PCA简化版):

  1. 数据去均值: Xcentered=X−mean(X)X_{centered} = X - \text{mean}(X)
  2. 计算协方差矩阵: C=1n−1XcenteredTXcenteredC = \frac{1}{n-1} X_{centered}^T X_
  3. 特征分解得到主成分,并取前 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 计算距离、梯度下降

posted @ 2025-03-16 15:18  代码世界faq  阅读(70)  评论(0)    收藏  举报