首页 > 编程语言 >lloyd-max 最优标量量化算法分析

lloyd-max 最优标量量化算法分析

时间:2024-04-12 15:55:06浏览次数:19  
标签:partial int max 2f lloyd dx qquad 标量 hat

变限积分求导公式

假设有函数定义为:

\[K(x)=\int_{\phi(x)}^{\Psi(x)}f(t)dt \\ \frac{dK(x)}{dx} = f[\Psi(x)]\Psi(x)^{\prime} - f[\phi(x)]\phi(x)^{\prime} \]

量化失真与最优标量量化

对于N个量化区间的失真定义为:

\[ D=\sum_{i=1}^{N}(\int_{t_i}^{t_{i+1}}(x-\hat{x_i})^2f(x)dx) \]

当D能取得最小值时,即:

\[\frac{\partial(D)}{\partial{t_i}} = 0 \\ 令 M(x)= \int_{t_{i-1}}^{t_{i}}(x-\hat{x_{i-1}})^2f(x)dx + \int_{t_i}^{t_{i+1}}(x-\hat{x_i})^2f(x)dx \\ 则 \frac{\partial(D)}{\partial{t_i}} = \frac{\partial(M(x))}{\partial{t_i}} = 0 \\ (t_{i} - \hat{x_{i-1}})^2f(t_i)(t_i)^\prime - (t_{i-1} - \hat{x_{i-1}})^2f(t_{i-1})(t_{i-1})^{\prime} + (t_{i+1} - \hat{x_{i}})^2f(t_{i+1})(t_{i+1})^\prime - (t_{i} - \hat{x_{i}})^2f(t_{i})(t_{i})^\prime \\ = (t_{i} - \hat{x_{i-1}})^2f(t_i) - (t_{i} - \hat{x_{i}})^2f(t_{i}) = 0 \]

\(\because \qquad t_i < \hat{x_i} \\ \therefore\)

\[ t_i = \frac{\hat{x_{i-1}} + \hat{x_i}}{2} \qquad i = {1,2 ... N} \qquad (1) \]

令\(\frac{\partial{D}}{\partial{\hat{x_i}}} = 0\), 对该式展开求导,可得

\[令 \qquad M(x) = \int_{t_i}^{t_{i+1}}(x-\hat{x_i})^2f(x)dx \\ 则 \qquad M(X) =\int_{t_i}^{t_{i+1}}(x^2f(x))dx -\int_{t_i}^{t_{i+1}}(2x\hat{x_i})f(x)dx + \int_{t_i}^{t_{i+1}}(\hat{x_i}^2f(x))dx \\ \frac{\partial{M(x)}}{\partial{\hat{x_i}}} = \\ \int_{t_i}^{t_{i+1}}(2\hat{x_i})f(x)dx - \int_{t_i}^{t_{i+1}}(2xf(x))dx = \\ \int_{t_i}^{t_{i+1}}[2(\hat{x_i} - x)]f(x)dx = 0 \]

$\therefore $

\[\qquad\qquad \hat{x_i} = \frac{\int_{t_i}^{t_{i+1}}{xf(x)}dx}{\int_{t_i}^{t_{i+1}}{f(x)}dx} \qquad i = 1,2, ... N-1 \qquad (2) \]

式(1) 和 式(2)构成最优标量量化器的必要条件,即影响量化是真的所有变量的偏导数都为0,这变量为: 边界 量化估计值

其中式(2)和物理学中的质心公式形式相同,因此也可以理解成区间的质心

一般来说,直接求解这两个公式比较麻烦,现实中的算法步骤是:

代码实现
def interval_MSE(x,t1,t2):
    return integrate.quad(lambda t: ((t - x)**2) * f(t), t1, t2)[0]

该函数用于计算积分:

\[\int_{t1}^{t2}[(t-x)^2f(t)]dt \]

def MSE(t,x):
    s = interval_MSE(x[0], -float('Inf'), t[0]) + interval_MSE(x[-1], t[-1], float('Inf'))
    for i in range(1,len(x)-1):
        s = s + interval_MSE(x[i], t[i-1], t[i])
    return s

该函数用于计算积分:

\[MSE = \int_{-\infty}^{t_0}[(t-x_0)^2f(t)]dt + \int_{t_n}^{\infty}[(t-x_n)^2f(t)]dt \qquad 首尾特殊处理 \\ MSE += \sum_{i=1}^{N-1}[\int_{t_{i-1}^{t_i}}(t-x_i)^2f(t)dt] \]

其中n表示序列中的最后一个元素

def centroid(t1,t2):
    if integrate.quad(f, t1, t2)[0] == 0 or t1 == t2:
        return 0
    else:
        return integrate.quad(lambda t:t*f(t), t1, t2)[0] / integrate.quad(f, t1, t2)[0]

该函数用于计算区间质心:

\[\frac{\int_{t_1}^{t_2}(t*f(t))dt}{\int_{t_1}^{t_2}(f(t))dt} \]

# error_threshold 误差阈值
# 不过问题是,这个东西如何保证算法一定收敛
def maxlloyd(t,x,error_threshold):
    # 计算当前的MSE
    e = MSE(t,x)
    error = [e]
    c = 0
    # 控制300次以内,以及误差小于阈值
    while e > error_threshold and c < 300:
        c = c+1
        # 奇数
        if c%2 == 1:
            # adjust thresholds
            # 更新边界
            for i in range(len(t)):
                t[i] = 0.5 * ( x[i] + x[i+1] )
        else:
            # adjust levels
            # 更新量化估计值
            # 负∞和t_0 的质心
            x[0] = centroid(-float('Inf'), t[0])
            # t_n 和∞的质心
            x[-1] = centroid(t[-1], float('Inf'))
            # 其余每个区间的质心
            for i in range(1,len(x)-1):
                x[i] = centroid(t[i-1], t[i])
        # 计算误差
        e = MSE(t,x)
        # 增加误差记录
        error.append(e)
        print(e)
    return x,t,error

标签:partial,int,max,2f,lloyd,dx,qquad,标量,hat
From: https://www.cnblogs.com/fyyy94/p/18131497

相关文章

  • D2. Set To Max (Hard Version)
    原题链接题解具体想\(a\)是如何一步一步变成\(b\)是很复杂的,所以我们换个角度思考(比如贡献)遍历每一个\(a[i]\)看看他们能帮助哪些\(a[j]\)变成\(b[j]\)而且不妨碍\((i,j)\)中\(a\)的元素,用数学语言表达就是\(use[j]=1;a[i]=b[j]>a[j];a[l]<a[i],l\in(i,j)or(j,i......
  • 用于显著提高检索速度和降低成本的二进制和标量嵌入量化
    我们引入了嵌入量化的概念,并展示了它们对检索速度、内存使用、磁盘空间和成本的影响。我们将讨论理论上和实践中如何对嵌入进行量化,然后介绍一个演示,展示了4100万维基百科文本的真实检索场景。目录为什么使用嵌入?嵌入可能难以扩展提高可扩展性二进制量化SentenceT......
  • 3dmax2024渲染大图高清参数,3dmax效果图渲染设置
    ​2024版的3dsMax带来了更为强大的渲染工具和优化的参数设置,使得设计师能够创造出令人惊叹的视觉作品,何利用3dsMax2024的先进功能,精心调整渲染参数,以实现高分辨率、高质量的效果图输出,满足专业设计和视觉表现的需求。下面一起来看看。3dmax2024渲染高清图的参数设置1、打开......
  • MAX868EUB 开关稳压器芯片 MSOP-10
    MAX868EUB是一款开关稳压器集成电路(IC),由MaximIntegrated公司生产。它是一种固定充电泵开关稳压器,具有正或负输出配置,拓扑结构为充电泵。该器件适用于需要稳定电源输出的应用,例如可穿戴设备和其他电子产品。 MAX868EUB开关稳压器集成电路适用于需要稳定电源输出的各种应用......
  • ABC348G Max(Sum-Max)
    将\(b\)升序排序考虑问题,那么最大值就是下标最大的\(b_i\)。下文的\(a_i,b_i\)都是排序过后的。考虑\(k\)固定怎么做:枚举\(b_i\)作为最大值,那么最大值为\(b_i\)时的答案最大值为此时\(a\)的前\(i\)项的前\(k\)大值的和减去\(b_i\)。将每次计算的结果取max即......
  • 基于PSO的NARMAX模型参数辨识算法matlab仿真
    目录1.算法仿真效果2.MATLAB源码3.算法概述4.部分参考文献1.算法仿真效果matlab2022a仿真结果如下:......
  • STM32F4 CubeMax 主从定时器同步 设定脉冲输出控制步进电机
    实验准备开发板:STM32F411E-DISCO或其它开发板(FirmwarePackage根据开发板下载)软件:KeiluVision5、STM32CubeMX(FirmwarePackage:STM32CubeFW_F4V1.23.0)实验原理利用CubeMX根据芯片手册配置定时器同步来实现自定义脉冲数PWM输出对电机进行控制。主定时器产生PWM波,从定时......
  • 【机器学习】Logistic与Softmax回归详解
    在深入探讨机器学习的核心概念之前,我们首先需要理解机器学习在当今世界的作用。机器学习,作为人工智能的一个重要分支,已经渗透到我们生活的方方面面,从智能推荐系统到自动驾驶汽车,再到医学影像的分析。它能够从大量数据中学习模式和规律,然后使用这些学习到的信息来做出预测或决......
  • 3dmax渲染十几个小时怎么办?3dmax怎么多机渲染
    当使用3dsMax进行渲染作业时,如果发现单张图像的渲染时间长达十数小时,这可能是由于计算机硬件配置较低或渲染场景过于复杂所致。为了缩短渲染时间并提高效率,我们可以考虑采用多台计算机进行协同渲染。下面,让我们一起探讨如何通过这种方式优化渲染流程。3dmax渲染十几个小时正常......
  • 一文搞懂航测成果和3dsmax、sketchup设计软件的交互
    0序BIM+GIS+CAD融合是当下比较热的一个概念。在设计环节,自然是希望能够基于真实的航测成果去做设计(在现状地形的基础上做设计),设计完的成果能够直接导入到GIS平台叠加红线、水系、路网等各种业务数据,做设计方案的校验。同豪、Revit、Microstation、OpenRoads等bim设计软件......