最近要应用多元高斯分布进行异常检测,使用matlab实现。
1.使用matlab自带函数mvnpdf
mvnpdf(data,miu,COV)
在这里,data是需要计算多元高斯分布概率密度的m*n维数组。m是数据的条数,n是每条数据的特征数。miu是属性的平均值组成的向量(是行向量),COV为协方差矩阵。
2.用原始公式
多元高斯分布的概率密度公式如下。使用矩阵计算实现
i=17;%特征个数
m=1;
while m<=30687
x=data(m,:)';%带入的数据
p(m)=(1/((2*3.1415926)^(i/2)*det(COV)^(1/2)))*(exp(-((x-miu)'*inv(COV)*(x-miu))/2));
m=m+1;
end
其中i为特征个数,COV为协方差矩阵,miu为每个属性的平均值组成的向量(是列向量)。此处每一条数据也要变成列向量的形式(x=data(m,:)';)。
inv()用于矩阵求逆,det()用于求方阵的行列式,cov()函数用于求协方差(小写)。
最终两种方式的结果近似相同。
此处要注意的就是平均值向量是行向量还是列向量。如果报错就试试转置一下