图像处理

1.对深度学习相关神经网络理解深入,如 DNN、CNN、RNN、GAN 等; 2.有深厚的理论研究背景和数据基础,熟悉 EM、MCMC、LR、LDA、PCA、时间序列等数学方法; 4.熟悉一种以上的深度学习的开源框架,如 Caffe、TensorFlow、ARMAILibrary、SNPE、OpenGLES 等。

人工智能代理(Artificial Intelligence Agent)

AI Agent 深度解析:潜力与挑战并存的智能新世界

定义

感知环境、进行决策和执行动作的智能实体

应用

  • ABI/GBI 生成式 BI 或是数据分析
  • Code Agent 代码助手
  • 基于 RAG 技术的知识问答

Coding Agent

aiXcoder 代码大模型在企业的应用实践

PPT

  • 语言模型发展历程

    • 深度神经网络
    • 预训练模型
    • 大语言模型 论文
  • aiXcoder 构建

    • 训练数据收集与筛选

      • Github 数据爬取与过滤
      • 删除低质量项目
      • 相似算法去重
      • 去除敏感数据
      • 去除注释数据
      • 删除语法错误代码
      • 删除静态分析缺陷代码
      • 代码文件顺序重排
    • 训练

      • 任务 随机 Mask 抽象语法树节点
      • 存在问题 项目级代码生成下的长序列依赖
    • 测试 更符合真实场景的测评集

基于 CodeFuse 的下一代研发探索

PPT > Github

  • 数据来源
    • Github
  • 预训练&微调
  • 推理加速&部署
  • 发展
    • 仓库级代码

大模型落地到代码助手场景的探索实践

PPT

  • 提示工程
    • 基本原理
      • 单个、定义明确的任务或问题上
      • 说明明确且详细,最好附带示例
      • 简明扼要

百度大模型驱动下的智能代码助手提效实践

PPT

RAG技术

深度解析 RAG 技术在大模型时代的原理与实践

概念

Alt text

分类

Alt text

朴素 RAG

  • 步骤
    • 索引: 直接将输入数据向量化
    • 检索: 对向量数据库进行匹配
    • 生成: 最后将输入数据与向量数据库匹配结果共同放入大模型中生成最终结果

高级 RAG

  • 步骤
    • 增加了对数据的预筛选,围绕预检索和后检索提出了多种优化策略

模块化 RAG

  • 步骤
    • 引入多个特定的功能模块和替换现有模块上。
    • 整个过程不仅限于顺序检索和生成,还包括迭代和自适应检索等方法

RAG for Code

Code Generation

  • REDCODER 摘要和代码双向生成
  • APICoder
  • COCOGEN

Semantic Segmentation Models

语义分割模型:从 FCN 到 DeepLab V3+的全面解析

2015

FCN(全卷积网络)

2015 年提出,首次将卷积神经网络应用于像素级分类,开创了端到端语义分割的先河。FCN 将最后几层全连接层替换为卷积层,允许任意大小的输入图像,并通过上采样(反卷积)恢复分割图的分辨率。

U-Net

特别适用于医学图像分割,其特征是编码器-解码器结构,解码器层与编码器层之间有跳跃连接,用以恢复细节信息。

2016

SegNet

基于 VGG 网络,改进了 FCN 的上采样部分,使用了编码器-解码器结构,其中解码器的上采样层使用了编码器的池化索引来恢复细节。

DeepLab V1

DeepLab 系列模型是语义分割领域的另一个重要里程碑。DeepLab V1 首次引入了 Atrous Convolution 模块,弥补了删除池化模块后感受野大小的影响。

2017

PSPNet(金字塔场景解析网络)

引入了金字塔池化模块(Pyramid Pooling Module),捕获不同尺度的信息,增强了模型对不同大小物体的分割能力。

DeepLab V2

DeepLab V2 在 ResNet 的基础上引入了 ASPP(Atrous Spatial Pyramid Pooling)模块,进一步扩大了感受野并提高了分割精度。

MobileNet V1

深度可分离卷积的应用

2018

DeepLab V3

而 DeepLab V3 通过增加 ASPP 模块的宽度,进一步提升了模型的性能。DeepLab V3+是 DeepLab 系列的最新版本,它增加了网络深度,将 Xception 网络作为主干,使用深度可分离卷积 Depthwise Separable Convolution, 结合了解码器模块,以恢复细节信息,进一步提升了多尺度处理能力。

ENet

专为实时应用设计,使用了高效的编码-解码结构和跳过连接。

MobileNet V2

Inverted Residuals 和 Linear Bottleneck

ICNet

多尺度级联输入,深度监督

BiSeNet

结合了两个分支,Spatial 分支和 Context 分支。

2019

HRNet

维持高分辨率流以捕获更多细节,同时进行多尺度融合。

DANet

Spatial Attention 和 Channel Attention

Fast-SCNN:Fast Semantic Segmentation Network

共享下采样权重双分支网络

OCRNet(Object Contextual Representations)

引入了对象上下文表示,使用注意力机制来建模像素间的关系,增强对局部和全局上下文的理解。

CCNet

提出了交叉注意机制(Criss-Cross Attention),允许模型以较低的计算成本建模长距离依赖

MobileNet V3

SE 模块和 Swish

2021

SegFormer

SETR

图像块编码,输入纯 Transformer 网络提取特征,reshape 特征后卷积上采样

MaskFormer

将分割统一为 Mask 分类任务

2023

Segment Anything Model (SAM)

一种通用的分割模型,能够处理多种类型的分割任务,包括语义分割、实例分割和全景分割。

Generative Model

VAE

AE VAE
VAE GAN Diffusion

GAN

DDPM

  • 生成过程被设计成一系列的马尔可夫步骤,其中每一个步骤只依赖于前一步的状态

DDIM

  • 采样
    • DDIM 在每一步都会预测并尝试直接达到最终的清晰状态,而不是仅仅依赖于当前的模糊状态
    • DDPM 通过马尔科夫链推导下一状态,DDIM 通过减少推理步数加速推理

Stable Diffusion

ControlNet

RAG

DIT

指标

MSE

  • 计算公式

PSNR

  • 单位:信噪比

  • 计算公式

SSIM

  • 通过均值和协方差衡量两张图像的 Luminance(亮度)、Contrast(对比度)和 Structure(结构)
  • 计算公式
  • 取值范围:[-1, 1]

opencv

https://segmentfault.com/a/1190000044071469

cv2.imread(path, flag)

  • flag:
1
2
[return]    type: numpy.ndarray
size: (H, W, C), C -> (BGR)

ImageToTensor

1
2
3
4
5
image = cv2.imread(path)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

image = torch.from_numpy(image_rgb).transpose(1, 2).transpose(0, 1)
image = image.float().div(255)

cv2.imwrite(path, image)

TensorToImage

1
2
3
image = image.mul(255).byte()
image = image.transpose(0, 1).transpose(1, 2)
image = image.cpu().numpy()

通道处理

1
2
b, g, r = cv2.split(image)
image = cv2.merge((b, g, r))

图像处理与计算机视觉基础

二值化

  • cv2.threshold()

边缘检测

  • cv2.Canny()

图像滤波

  • cv2.filter2D()
  • cv2.blur()
  • cv2.GaussianBlur()

图像形态学操作

  • cv2.erode() 腐蚀
  • cv2.dilate() 膨胀
  • cv2.morphologyEx() 开闭运算、形态学梯度、顶帽、黑帽等

Deep Learning

【三年面试五年模拟】算法工程师的求职面试秘籍

分类 Classification

将输入数据划分到预定义的有限标签中,输出为预测的类别标签

  • 常用评价指标

    • 准确率
    • 精确率
    • 召回率
    • F1 分数
  • 应用

    • 花卉图像分类
    • 垃圾邮件拦截

回归 Regression

建立数值型随机自变量的模型并进行连续的因变量预测,输出为数值

  • 常用评价指标
    • 均方误差
    • R2 分数
  • 应用
    • 股票价格预测
    • 房价预测

聚类 Clustering

将无标签的数据分成多个类(簇),确保类内样本相似,类间样本相异,其输出是聚类结果(簇划分,簇标签,簇中心等)

  • 常用评价指标
    • 样本紧密度
    • 样本分隔度
  • 应用
    • 用户分群
    • 异常检测

决策 Decision making

通过神经网络理解给定目标,约束条件和可用信息,预测出最佳或满意的动作决策,其输出是一连串的动作

  • 常用评价指标
    • 最终回报
    • 平均奖励
  • 应用
    • 游戏 AI
    • 自动驾驶

概率密度估计 Probability density estimation

使用深度神经网络来估计一个随机变量或一组随机变量的概率密度函数,其输出是数据的概率分布

  • 常用评价指标衡量分布差异
    • 对数似然损失
    • KL 散度
  • 应用
    • 数据生成
    • 样本采样

hpc

GPU 编程与性能优化

CUDA 与 cuDNN

GPU 编程基本原理

特别是如何使用 CUDA 进行并行计算,以及 cuDNN 库在加速深度学习中的应用

内存管理

核函数设计

性能监控与调优

性能优化

掌握一些基本的性能分析工具和方法,比如使用 nvprof 或 TensorFlow Profiler 分析模型运行瓶颈,并实施相应的优化措施。

Machine Learning

K-Nearest Neighbors(KNN)

KNN 算法是一种基本的监督学习方法,用于分类和回归问题。在分类问题中,KNN 算法通过测量不同特征值之间的距离,找出输入实例与训练数据集中最接近的 k 个样本,然后根据这 k 个邻居的类别来预测新实例的类别。对于回归问题,KNN 则是预测新实例的连续值输出。

基本步骤

  1. 选择 K 值

    K 值是算法中的一个超参数,表示考虑最近的邻居数量。选择 K 值时,较小的 K 值会使决策边界更加复杂,可能过拟合;较大的 K 值会简化决策边界,可能欠拟合。

  2. 计算距离

    对于每一个训练样本,计算其与待分类样本之间的距离。常见的距离度量有欧氏距离、曼哈顿距离等。

  3. 找到 K 个最近邻

    从计算出的距离中选出最小的 k 个,这 k 个样本即为待分类样本的最近邻。

  4. 预测类别或值

    对于分类任务,对这 k 个样本的类别进行投票,票数最多的类别作为预测结果。 对于回归任务,通常采用这 k 个样本的目标值的平均值或加权平均值作为预测结果。

优点

  • 算法简单直观,易于理解和实现。
  • 不需要假设数据分布,适用于非线性分类问题。
  • 可以处理多类问题。

缺点

  • 计算成本高,特别是在大数据集上,因为需要计算测试样本与所有训练样本之间的距离。
  • 需要选择合适的距离度量和 K 值。
  • 对于不平衡的数据集,少数类别的预测可能会受到影响。

支持向量机 Support Vector Machine(SVM)

是一种非常强大的监督学习模型,主要用于分类和回归分析。在分类问题中,SVM 寻找一个最优的超平面(在高维空间中可能是一条线、一个平面或一个超平面),该超平面能够最大化地将不同类别的数据分开。这个超平面被称为最大间隔超平面,而那些离超平面最近的训练样本点则被称为支持向量。

SVM 的核心思想在于找到一个决策边界,使得正负两类样本被尽可能远地分开,同时确保边界两侧的样本被正确分类。在非线性情况下,SVM 通过使用核函数(Kernel Function)将低维空间中的数据映射到高维空间,从而在高维空间中找到一个线性的决策边界。

多类分类问题解决策略(如 K 类)

  • 一对一(One-vs-One, OvO)

    在这种策略中,每一对类别都会进行一次二分类,这意味着总共需要训练 C(K, 2) = K(K-1)/2 个 SVM 模型。最终分类时,每个样本都会被 K(K-1)/2 个模型分类,然后根据多数投票原则决定最终类别。

  • 一对多(One-vs-All, OvA)

    也称为 One-vs-Rest。对于 K 类问题,需要训练 K 个 SVM 模型,每个模型区分一类样本和其他所有类别的样本。当分类新的样本时,每个模型都会给出一个决策,样本会被分配给具有最高置信度分值的那类。

  • 多分类 SVM

    这是一种直接将多类分类问题建模的方法,它试图一次性找到一个超平面矩阵来区分所有的 K 类。

  • 逐步二分类 DAGSVM

    Directed Acyclic Graph SVM 策略,这是一个专门设计用于多类分类的 SVM 变体,可以避免传统的投票机制。在逐步二分类(DAGSVM)策略中,构造了一个有向无环图(DAG),其中每个节点代表一个二分类器。DAG 的构建方式是从所有类别中选择两个类别进行比较,胜者(即被分类器认为更有可能的类别)继续与其他类别进行比较,直到确定最终的类别。这种方式确保了每个测试样本只需要通过一系列的二分类器,而不必经历所有可能的二分类器组合,从而避免了简单的多数投票机制。

svm 为什么要转成对偶问题进行求解,为什么对偶问题的解是原问题的解? svm 如何进行多分类,多分类 hinge loss 什么形式?

朴素贝叶斯分类器

朴素贝叶斯分类器是一种基于概率论的分类方法,尤其在文本分类、情感分析、垃圾邮件过滤等领域有着广泛的应用。它基于贝叶斯定理以及特征条件独立的假设,尽管这个假设在现实世界的数据中往往不成立,但朴素贝叶斯分类器在许多情况下仍然表现出良好的性能,尤其是在数据量较大时。

贝叶斯定理

朴素贝叶斯分类器的基础是贝叶斯定理,它描述了已知某些条件下,事件 A 发生的概率 P(A|B),可以用以下公式表示:

  • 先验概率 (Prior Probability) 先验概率是指在观察到任何数据或证据之前,基于以往知识或经验对某事件发生概率的估计。它是我们的“先验”信念,反映了我们对某个假设在没有任何新信息情况下的初始信心程度。例如,在投掷一枚硬币的情况下,如果我们没有任何关于这枚硬币是否公平的信息,我们可能会设定正反两面出现的概率都是 50%,这就是一种先验概率。

  • 后验概率 (Posterior Probability) 后验概率是指在观察到某些数据或证据之后,对事件发生概率的更新估计。它是根据先验概率以及新的观测数据,通过应用贝叶斯定理计算得出的。后验概率反映了我们对某个假设的新信念,这种信念是在考虑到所有可用信息后形成的。继续用硬币的例子,如果我们连续投掷硬币十次,其中有九次正面朝上,我们可能会调整我们对硬币公平性的信念,认为硬币可能是偏向正面的,此时我们对硬币偏向正面的概率的估计就是后验概率。

特征条件独立假设

朴素贝叶斯分类器假设所有特征在给定类别的情况下是相互独立的。这意味着,对于分类问题中的每个特征,其取值不会受到其它特征取值的影响,即使在实际中这种独立性可能并不存在。这一假设简化了计算,使得分类器的训练变得相对简单,同时也使得朴素贝叶斯分类器能够处理高维数据。

分类过程

朴素贝叶斯分类器的工作流程通常包括以下步骤:

  • 训练阶段:计算每个类别的先验概率以及每个特征在各类别下的条件概率。
  • 预测阶段:对于一个新的输入样本,计算其属于每个类别的后验概率,然后选择具有最大后验概率的类别作为预测结果。

优点

  • 算法简单,易于实现。
  • 训练速度快,所需的计算资源较少。
  • 在特征条件独立假设下,可以处理高维数据。

缺点

  • 条件独立假设在实际应用中往往是不成立的,这可能会影响分类器的准确性。
  • 对于从未在训练数据中出现过的特征值,朴素贝叶斯分类器会给出 0 的概率,这可能导致分类失败。为了避免这种情况,通常会采用平滑技术,如拉普拉斯平滑。

独立成分分析(ICA)

独立成分分析是一种统计和计算技术,用于估计一组随机变量的潜在因素或成分,这些成分被认为是相互独立的。ICA 的目标是找到一组变换,将混合的观测信号分解成独立的源信号。与主成分分析不同,ICA 关注的是信号的统计独立性,而非方差最大化。ICA 在信号分离、盲源分离等领域有广泛应用。

数据降维

奇异值分解(SVD)

异值分解是一种矩阵分解技术,广泛应用于信号处理、数据压缩、模式识别等多个领域。对于任意一个矩阵 A(m×n),SVD 将其分解为三个矩阵的乘积:UΣV^T,其中 U 是 m×m 的正交矩阵,Σ 是 m×n 的对角矩阵,其对角线上的元素是 A 的奇异值(通常是降序排列的非负实数),V 是 n×n 的正交矩阵。SVD 在数据分析中常用于提取矩阵的主要成分,如降维、数据压缩、特征提取等。

主成分分析(PCA)

主成分分析是一种常用的统计方法,用于识别数据中的模式和结构。PCA 通过正交变换将可能相关的变量转换为一组线性不相关的变量,称为主成分。主成分是原变量的线性组合,第一个主成分具有数据的最大方差,第二个主成分具有次大方差,同时与第一个主成分正交,以此类推。PCA 常用于降维、数据可视化和噪声消除。

线性判别分析(Linear Discriminant Analysis, LDA)

是一种常用的数据分析和分类技术,最初由 R.A. Fisher 提出,因此有时也被称作 Fisher 判别分析。LDA 主要用于寻找最佳的低维空间投影,使得不同类别的样本在该空间中的分离度最大化,同时保持同类样本之间的紧凑性。LDA 经常被用于降维和分类任务,特别是在监督学习的场景下。

LDA 的主要目标

LDA 的主要目标是找到一个投影,使得投影后的数据在不同类别间具有最大的可区分性,同时在同一类别内具有最小的差异性。具体而言,LDA 试图最大化类间散度和最小化类内散度,以此来增强分类效果。

LDA 的步骤

计算类内散度矩阵 Sw 和类间散度矩阵 Sb: 类内散度矩阵 Sw 反映了同一类别内部样本之间的变异程度。 类间散度矩阵 Sb 则反映了不同类别之间中心点的变异程度。 求解特征向量和特征值: 通过求解 Sw 和 Sb 的广义特征值问题,找到能最大化类间差异的投影方向。 选择投影方向: 选择前 k 个最大的特征值对应的特征向量作为投影方向,其中 k 是希望得到的降维后的特征数量。 投影数据: 将原始数据投影到找到的投影方向上,得到降维后的数据。 分类: 降维后的数据可以使用各种分类器进行分类,如线性分类器。

LDA 的应用

LDA 在多个领域都有广泛应用,包括但不限于:

人脸识别:LDA 可以用于提取人脸图像的重要特征,从而在低维空间中进行人脸识别。 生物信息学:在基因表达数据的分析中,LDA 可以帮助识别不同疾病状态的基因表达模式。 市场细分:在市场营销中,LDA 可以用来识别消费者群体的不同特征,帮助进行市场细分。 医学诊断:LDA 可用于诊断疾病,通过分析患者数据来区分健康个体和患病个体。

LDA 与主成分分析(PCA)

方法类似,但 PCA 是一种无监督的降维方法,而 LDA 是有监督的,它利用了类标签信息,这使得 LDA 在分类任务中通常能提供更好的性能。然而,LDA 也有其局限性,比如它假设数据服从高斯分布,且不同类别的协方差矩阵相等,这在某些情况下可能不成立。

拉普拉斯特征映射(Laplacian Eigenmaps)

是一种非线性降维技术,由 Belkin 和 Niyogi 在 2003 年提出,主要用于在保持数据局部结构的同时,将高维数据嵌入到低维空间中。Laplacian Eigenmaps 的核心思想是利用数据点之间的相似性来构建一个图,然后在图上找到最优的低维表示,这种表示能够尽可能地保持原数据点间的局部距离不变。

拉普拉斯特征映射的基本步骤:

构建邻接矩阵:首先,为数据集中的每个点 i 找到其最近的 k 个邻居,然后构建邻接矩阵 W,其中 W(i,j) > 0 如果点 j 是点 i 的邻居,否则 W(i,j) = 0。W(i,j)的具体值可以是点 i 和点 j 之间的相似性度量,比如高斯核函数。 构建度矩阵:度矩阵 D 是一个对角矩阵,其中 D(i,i)等于第 i 个点的度,即邻接矩阵 W 中第 i 行元素之和。 构建拉普拉斯矩阵:拉普拉斯矩阵 L 定义为 L = D - W。这是图拉普拉斯算子的一种形式,它捕获了图的连通性和拓扑性质。 求解特征值问题:寻找拉普拉斯矩阵 L 的特征向量和特征值。最小的几个非零特征值对应的特征向量提供了数据点在低维空间中的坐标。 数据点的低维表示:将数据点映射到低维空间中,使用最小的几个非零特征值对应的特征向量作为坐标轴。这些特征向量捕捉了数据集的内在几何结构,使得数据点在低维空间中的相对位置保持了它们在高维空间中的局部关系。 应用场景: 数据可视化:Laplacian Eigenmaps 可以用于将高维数据可视化,通过降维将数据投影到二维或三维空间,以便于人类观察和理解。 聚类分析:通过在低维嵌入空间中应用聚类算法,可以发现数据的潜在结构和簇。 图像处理:在图像分析和识别中,可以利用 Laplacian Eigenmaps 来提取图像的关键特征。

与其它降维技术的对比:

与 PCA(主成分分析)相比,Laplacian Eigenmaps 更关注数据的局部结构,而 PCA 则关注全局的方差最大化。PCA 是一种线性降维技术,而 Laplacian Eigenmaps 能够处理非线性数据集,这对于复杂数据结构特别有用。

总的来说,Laplacian Eigenmaps 是一种强有力的非线性降维工具,特别适用于保持数据的局部连通性和拓扑结构,使其成为分析高维数据集的有效手段。

LLE

KPCA

ISOMAP

决策树(Decision Trees)

决策树是一种用于分类和回归的机器学习算法。它通过构建一棵树形结构,其中内部节点表示特征上的测试,分支表示测试结果,而叶子节点表示类别或数值。决策树通过递归地分割数据集,每次分割都选择最优的特征和分割点,以最大程度地减少不纯度(如基尼不纯度或熵)。决策树易于理解和解释,可以处理数值和分类数据,但容易过拟合,通常需要剪枝技术来控制复杂度。

决策树对连续值和离散值特征是否会重复利用作为分割特征?

ID3 算法的局限性

只处理离散属性:ID3 算法只能处理离散属性,无法直接处理连续属性。 信息增益偏好:ID3 使用信息增益作为分裂标准,这导致它偏好具有更多值的属性,即使这些属性可能并不提供更多的分类信息。 缺失值处理:ID3 算法没有提供处理缺失值的有效机制。 过拟合问题:ID3 算法容易过拟合,因为它总是尽可能深地生长树,直到所有叶子节点都是纯的。

C4.5 的改进

处理连续属性:C4.5 可以处理连续属性,通过寻找最佳的切分点将连续属性转化为二元离散属性。 使用增益率:C4.5 使用增益率(Gain Ratio)代替信息增益作为分裂属性的选择标准。增益率考虑了信息增益与属性的熵的比率,从而避免了信息增益偏好的问题。 处理缺失值:C4.5 提供了一种处理缺失值的方法,允许在不知道完整信息的情况下仍能进行分类。 剪枝策略:C4.5 引入了剪枝技术,以防止过拟合。它使用两种剪枝方法:悲观剪枝(使用一个用户定义的阈值来决定是否剪枝)和错误估计剪枝(基于树的错误率来决定是否剪枝)。 生成规则集:C4.5 不仅生成决策树,还可以从决策树中导出一套规则,这使得模型更容易被理解和解释。 处理多类分类:C4.5 可以很好地处理多类分类问题,而不仅仅是二分类。

CART 算法的特点:

二叉树结构:CART 生成的决策树是二叉树,每个非叶节点都有两个子节点,这使得树的结构更加简单,易于理解和实现。 变量选择:对于分类树,CART 使用基尼不纯度(Gini Impurity)作为特征选择的标准;对于回归树,则使用平方误差(Mean Squared Error)来评估分裂的质量。 可处理连续和离散变量:CART 能够自动处理连续和离散变量,对于连续变量,它会找到最佳的分割点来创建二元分裂。 缺失值处理:CART 提供了处理缺失值的策略,例如使用替代值或者通过预测缺失值的可能性来分配样本到不同的分支。 剪枝策略:CART 采用成本复杂性剪枝(Cost Complexity Pruning)来防止过拟合,这是一种后剪枝方法,通过在树的复杂性和拟合数据的误差之间寻找平衡点来简化决策树。

BP 神经网络(Backpropagation Neural Networks)

BP 神经网络是人工神经网络的一种,通过前向传播计算输出,再通过反向传播调整权重,以最小化网络输出与期望输出之间的误差。BP 算法使用梯度下降法更新权重,使网络能够学习复杂的非线性映射。神经网络可以处理大量输入和输出,具有很强的学习能力,但训练时间可能较长,且可能遇到局部最优解的问题。

随机森林(Random Forests)

随机森林是一种集成学习方法,通过构建多个决策树并将它们的预测结果进行投票来改进预测性能。随机森林在构建每棵树时,不仅随机选择样本,还随机选择特征,这样可以减少过拟合风险并提高模型的泛化能力。随机森林能够处理高维数据,对于异常值和缺失值具有较好的鲁棒性。

随机森林与 GBDT,解释、比较异同、哪种方法单棵决策树的深度更大?

判别式模型 vs 生成式模型

判别式模型(Discriminative Models)

直接学习输入特征和输出标签之间的映射关系,目标是最小化预测错误。例如,BP 神经网络、支持向量机都属于判别式模型的范畴,它们直接学习如何将输入映射到输出。

生成式模型(Generative Models)

试图学习数据和标签的联合分布,通常用于估计类条件概率。例如,朴素贝叶斯分类器就是一种生成式模型,它估计了给定类别的条件下特征的概率分布。

NLP

TF-IDF(Term Frequency-Inverse Document Frequency)

是一种用于信息检索和文本挖掘的统计方法,它评估一个词对一个文档集合或语料库中的某篇文档的重要程度。TF-IDF 由两部分组成:词频(TF)和逆文档频率(IDF)。词频是指一个词在文档中出现的频率,而逆文档频率则反映了一个词在整个文档集合中的罕见程度。

文本分类中,从含有兼类可分为多标签分类和单标签分类

距离算法

1. 欧几里得距离(Euclidean Distance)

欧几里得距离是最直观的距离度量方式,它计算的是两个点在多维空间中的直线距离。在二维空间中,如果点 A 的坐标是((x_1, y_1)),点 B 的坐标是((x_2, y_2)),那么它们之间的欧几里得距离为:

[ d_{AB} = ]

推广到 n 维空间,如果有两个 n 维向量( = (a_1, a_2, ..., a_n))和( = (b_1, b_2, ..., b_n)),它们之间的欧几里得距离为:

[ d*{AB} = ]

2. 曼哈顿距离(Manhattan Distance)

曼哈顿距离,也称为城市街区距离或 L1 距离,它衡量的是两点在坐标轴上的绝对距离之和。在 n 维空间中,两个向量()和()之间的曼哈顿距离为:

[ d*{AB} = ^{n}|a_i - b_i| ]

曼哈顿距离在网格布局或出租车行驶路径计算中很有用,因为它忽略了两点之间的直线距离,只考虑沿坐标轴方向的移动。

3. Canberra 距离

Canberra 距离是一种用于非负向量的度量,它在计算距离时考虑了分母,使得距离受向量元素值的影响更大。两个非负向量()和()之间的 Canberra 距离定义为:

[ d*{AB} = ^{n} ]

Canberra 距离在处理稀疏数据时特别有用,因为它可以更好地处理零值。

4. 切比雪夫距离(Chebyshev Distance)

切比雪夫距离,也称为棋盘距离或 L∞ 距离,它衡量的是两个点在任一坐标轴上的最大绝对差值。在 n 维空间中,两个向量()和()之间的切比雪夫距离为:

[ d*{AB} = (|a_i - b_i|) ]

切比雪夫距离在某些应用场景中特别有用,比如在国际象棋中计算棋子移动的最短步数。

每种距离度量都有其特点和适用场景,选择合适的距离算法对于数据的分析和建模至关重要。例如,欧几里得距离适用于测量连续空间中的相似性,而曼哈顿距离和切比雪夫距离可能在某些特殊的空间布局或数据结构中更有优势。

梯度算子

梯度算子是数字图像处理和计算机视觉领域中用于边缘检测和特征提取的重要工具。梯度算子能够突出图像中的边缘和纹理,通过计算图像像素强度的局部变化来检测边界。以下是几种常用的梯度算子模板:

1. Sobel 算子

Sobel 算子是使用最广泛的边缘检测算子之一,它通过计算图像在水平和垂直方向上的梯度来检测边缘。Sobel 算子由两个 3x3 的卷积核构成:

  • 水平方向梯度算子:

  • 垂直方向梯度算子:

Sobel 算子对图像进行卷积操作后,可以得到水平和垂直方向上的梯度分量,最后通过合并这两个分量来获得边缘强度。

2. Prewitt 算子

Prewitt 算子与 Sobel 算子类似,也使用两个 3x3 的卷积核来检测水平和垂直方向上的梯度,但 Prewitt 算子的权重分布较为均匀:

  • 水平方向梯度算子:

  • 垂直方向梯度算子:

3. Roberts 交叉算子

Roberts 交叉算子使用 2x2 的小型卷积核,可以快速计算图像的梯度:

  • 水平方向梯度算子:

  • 垂直方向梯度算子:

Roberts 算子对噪声敏感,但在计算速度上有优势。

4. Laplacian 算子

Laplacian 算子不是直接检测梯度,而是检测二阶导数,用于检测边缘的拐点。一个常用的 Laplacian 算子模板是:

5. LoG 算子

全称为 Laplacian of Gaussian 算子,是一种在图像处理和计算机视觉中用于边缘检测和特征提取的算法。LoG 算子结合了高斯平滑滤波器(Gaussian filter)和拉普拉斯算子(Laplacian operator),其主要目的是在抑制噪声的同时检测图像中的边缘和其他显著特征。

工作原理:

  1. 高斯平滑
    • 首先,LoG 算子使用高斯滤波器对图像进行平滑处理。高斯滤波器通过应用一个高斯分布的权重矩阵(核)来对每个像素及其邻域进行加权平均,从而减少图像中的高频噪声。
  2. 拉普拉斯算子
    • 接着,经过高斯平滑后的图像会被进一步应用拉普拉斯算子。拉普拉斯算子是一个二阶微分算子,它对图像的亮度变化进行二次导数计算,能够突出图像中的突变区域,如边缘。
  3. LoG 滤波器
    • 将上述两个步骤合在一起,LoG 算子实际上是计算高斯平滑后的图像的拉普拉斯变换。数学上,LoG 算子定义为高斯函数的拉普拉斯变换,表达式为: [ ^2 g(x,y,) = g(x,y,) + g(x,y,) ] 其中 (g(x,y,)) 是二维高斯函数,() 是标准差,决定了高斯核的宽度。

应用:

  • LoG 算子常被用于边缘检测和图像特征点检测,特别是在尺度空间理论中,它可以用来检测图像中的关键点,这些点可能对应于角点、边缘交叉点或其他重要的图像特征。

  • 由于 LoG 算子的输出可能包含大量的零过零点(zero-crossings),这些点被认为是潜在的边缘或特征位置。因此,在实际应用中,通常会对 LoG 响应进行阈值处理,只保留那些超过一定阈值的零过零点作为有效的特征点。

实现:

  • 在实践中,LoG 算子可以通过卷积操作实现,即将图像与预定义的 LoG 核进行卷积。LoG 核是高斯核和拉普拉斯算子的离散近似,其形状取决于选择的()值。

  • 为了简化计算,有时会先应用高斯核,再单独应用拉普拉斯算子,尽管这在数学上不完全等同于 LoG 算子,但可以达到类似的效果,这种方法被称为 DoG(Difference of Gaussians)算子,是 LoG 的一个近似版本,常用于尺度不变特征变换(SIFT)等算法中。

LoG 算子因其在抑制噪声和定位边缘及特征点方面的有效性,在图像处理领域有着广泛的应用。

色彩模型

是用来描述颜色的一种数学表示方法,它们按照不同的用途和目的对颜色进行分类和编码。你提到的色彩模型可以大致分为两大类:面向硬件设备的色彩模型和面向视觉感知的色彩模型。

面向硬件设备的彩色模型

这类模型主要用于设备的颜色表示,它们的设计是为了与特定类型的硬件或色彩再现过程兼容。

RGB 模型(Red, Green, Blue):

RGB 模型是基于加色法原理的色彩模型,通常用于显示设备如电视、电脑显示器和手机屏幕。在 RGB 模型中,红、绿、蓝三种颜色的光以不同的强度混合,可以产生广泛的色彩范围。

CMYK 模型(Cyan, Magenta, Yellow, Key/Black):

CMYK 模型是基于减色法原理的色彩模型,主要用于印刷行业。在印刷过程中,青色、洋红色、黄色和黑色油墨以不同比例混合,可以复制出各种色彩。

YCrCb 模型(Luminance/Chrominance):

YCrCb 模型是一种用于视频系统的色彩模型,其中 Y 代表亮度(Luminance),Cr 和 Cb 分别代表红色和蓝色的色差(Chrominance)。这种模型被用于数字电视和图像压缩中,如 JPEG 2000 和 H.26x 系列视频编码标准。

面向视觉感知的彩色模型

这类模型的设计更贴近人类视觉系统对颜色的感知方式,通常用于色彩管理和色彩选择界面。

HSI 模型(Hue, Saturation, Intensity):

HSI 模型将颜色分为色调(Hue)、饱和度(Saturation)和强度(Intensity)三个组成部分。色调描述了颜色的基本类型,饱和度表示颜色的纯度,强度则是颜色的亮度。

HSV 模型(Hue, Saturation, Value):

HSV 模型与 HSI 模型类似,但将强度(Intensity)替换为价值(Value)。价值表示颜色的明暗程度,而色调和饱和度的定义与 HSI 模型相同。

HSB 模型(Hue, Saturation, Brightness):

HSB 模型实际上与 HSV 模型是相同的,只是将“Value”称为“Brightness”。在某些软件中,如 Adobe Photoshop,使用 HSB 来表示 HSV 模型。

p