MixtureComponent API

<span style="font-size:24px;">对密度函数的计算是分开来进行的,即分成指数部分的和非值数部分。X即为我们输入的特征矢量。长度即密度函数的维度。
密度函数的计算需要转换的均值和方差。转换函数为
M = A * m + B 其中M为转换后的均值或方差矢量(数组)。m为转换前的均值或方差矢量(数组)。A为转换矩阵,B为转换矢量(数组)。
在数学上代表的就是一个高斯函数。多个高斯函数可以组成一个混合高斯。
定义了一个高斯混合的共享元素的集合,因为这些元素都是被许多的高斯混合对象所共享的。这些元素不应该被重写。高斯混合定义了一个概率密度函数和一个自适应参数的集合。注意所有的得分和权重都是在log域的。
待办事项:
因为一个混合高斯的许多组成此混合高斯的高斯被共享,存在着许多潜在方法通过为那些共享高斯共享中间结果来减少在计算得分时计算量?
本类的属性:
private float[] mean;此混合高斯的均值数组,用来存储均值。需要进行转换后才能用于密度函数的计算。此是从训练中获得的。
private float[] meanTransformed;转换后的均值数组,
private float[][] meanTransformationMatrix;用于均值转换的矩阵。
private float[] meanTransformationVector;用于均值转换的矢量。
private float[] variance;转换前的方差矢量(数组),为输入的数组,需转换后才能用于密度计算。
private float[] precisionTransformed;转换后的方差矢量(数组),此表示的是表示的是协方差矩阵中的主对角线上的所有元素,注意此协方差矩阵的其它元素都是0.
private float[][] varianceTransformationMatrix;转换用的方差矩阵。
private float[] varianceTransformationVector;转换用的方差矢量(数组)。
private float distFloor;最小的多维高斯得分即最小(最低的)密度函数的(输出)值。
private float varianceFloor;最低的方差值(即最小方差值),用于转换方差中。
public static final float DEFAULT_VAR_FLOOR = 0.0001f;  默认的方差的最小值。
public static final float DEFAULT_DIST_FLOOR = 0.0f;默认高斯得分的最小值
private float logPreComputedGaussianFactor;在密度函数中的非指数部分的log域的计算结果。
private LogMath logMath;为此混合高斯使用的logmath
本类的构造方法:
public MixtureComponent(LogMath logMath,float[] mean,float[][] meanTransformationMatrix,float[] meanTransformationVector,float[] variance,float[][] varianceTransformationMatrix,float[] varianceTransformationVector);给定参数创建对象:
本类的方法:
public float[] getMean();获得均值数组,即存储均值的数组。
public float[] getVariance();获得方差数组,存储方差的数组。此组成部分的方差。
public float getScore(FloatData feature);根据给定的特征来计算此混合高斯的得分。注意支持的doubledata特征应该被换换成一个float数组,因为getScore方法也许会被频繁的调用,因此特征被限制为floatdata。 返回的是log域的得分,feature为将会被用来打分的特征。
public float getScore(float[] feature);根据给定的特征来计算混合高斯的得分。我们模拟了一个混合高斯的输出分布,即混合高斯分布。因此当前的是一个多维高斯的简单实现。
Normal(x) = exp{-0.5 * (x-m)' *inv(Var) * (x-m)} / {sqrt((2 * PI) ^ N) * det(Var))} 
其中x为输入的倒谱即输入参数也为特征矢量,m为均值矢量,Var是方差矩阵,det()为一个矩阵的行列式,inv()为矩阵的逆,exp为指数运算,x'为x的转置, N为矢量x和m的维度即长度。输入参数feature即为密度函数中的x,其长度即为x维度。返回的是特定x下的密度函数值,即得分。注意首先我们计算的是高斯密度函数中的指数部分,然后把它转换到合适的log域中。如log域的基为e,则转换操作不是必须的。
public void transformStats();对均值和方差进行转换。。转换函数为
M = A * m + B 其中M为转换后的均值或方差矢量(数组)。m为转换前的均值或方差矢量(数组)。A为转换矩阵,B为转换矢量(数组)。
public float precomputeDistance();预先计算的距离即高斯密度函数的非指数部分。预先计算的公式为:sqrt((2 * PI) ^ N) * det(Var)。马氏距离的预先计算因子。一些马氏距离的计算能够事先被执行,尤其是其仅仅包括高斯函数的方差的因子能够被事先计算,记住协方差矩阵的行列式for the degenerate case of a mixture with independent components仅仅只有对角元素是非零的。计算协方差矩阵的主对角线元素的结果(产物)。协方差矩阵被假定为对角的,维独立的independent dimensions。在log域中的,其结果成为了求和。我们需要负号,因为logPreComputedGaussianFactor是基于precision方差的,此是方差的转置。因此在log域中,两标量有这相反的符号。协方差矩阵的维度在log域中成为了一个乘法因子。
public MixtureComponent clone();拷贝此高斯函数对象,即复制此类的对象。即它的拷贝。
</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值