MatLab由数据点拟合高斯分布参数

进行数据点的高斯分布参数拟合之前,有以下几点需要注意:

(1) 数据点要近似是高斯分布的形态,即近似符合正太分布的规律;

(2)数据集在使用时要进行归一化处理;

(3)数据集索引,即数据点的个数要为奇数;若实际应用中为偶数个数据点,可以对数据点进行插值拉伸为奇数个数据点再进行使用。

 

我们使用1280个点组成的数据集,其分布形状如下图所示

可以观察到数据点近似为正态分布的形状,可以采用高斯拟合求取其分布参数。

注意到数据点的分布区间为(120, 130)之间,因此数据需要进行归一化后再进行高斯拟合。

同时数据点个数为偶数,需要进行插值拉伸,此处我们使用的方案是添加一个数据点,即将1280个数据点插值拉伸为1281个数据点,该方法在matlab中可以由imresize函数方便的得到。

 

下面上程序,首先进行的是数据点的插值拉伸,若数据点本身为奇数,则可以忽略此步骤。

%% 数据点拉伸
img = load('data.mat'); % 下载数据
res= double(img); % 将数据转换为double类型
[cols, rows] = size(res); % 丈量数据矩阵尺寸,此处数据集为1行1280列
resImg = imresize(res, [1, cols+1], 'bilinear'); % 将数据集插值拉伸为1行1281列,差值方式为线性插值

再进行高斯拟合之前,首先将数据集的正坐标平移至关于原点对称的区间。上面一步拉伸为奇数个数据点的 目的,就是为了令待拟合数据关于中心点左右对称,方便原点定位。注意,在本步骤中,将数据点的值作为Y坐标, 数据点索引值作为X坐标,发生坐标平移的是X轴。

%% X轴平移至关于原点对称的区间
bias = round(size(resImg, 2), 2); % 平移量
Xdata = 1:size(resImg,2); % X轴平以前的坐标区间
Xdata = Xdata - bias; % X轴平移后的坐标区间,原1281个坐标点以平移至[-640,640]的对称区间
Ydata = resImg; % Y轴为数据点的值

平移后数据如下图所示:

将Y轴对应的数据点数值归一化

%% Y轴数据归一化
y1 = ydata/max(ydata); % Y轴数据归一化
x1 = xdata; % X轴数据保持不变

进行高斯拟合并绘图显示

%% 高斯拟合
fun = fittype('a*exp(-((x-b)/c)^2)+d'); % 确定高斯函数的表达形式
% 其中a是振幅,b是期望,c是标准差,d是直流分量
sP_idx = [round(0.2*numel(x1)), round(0.4*numel(x1)), ...
          round(0.6*numel(x1)), round(0.8*numel(x1))]; % 选取X轴上等间距的四个点
startPoints = x1(sP_idx); % 将上述4个点设置为'Start'参数
[cf,gof] = fit(x1(:),y1(:),fun,'Start',startPoints); % 高斯拟合
yy = cf.a*exp( -((x1-cf.b)/cf.c).^2 )+cf.d; %得到拟合后的高斯曲线

%% 绘图
figure; plot(x1, y1, 'b.');  % 绘制数据点
hold on; plot(x1 ,yy, 'r');  % 绘制拟合的高斯曲线
legend('原始数据', '拟合数据')
hold off;

得到如下图形

得到的拟合参数中,均值和方差都是拉伸后的数据(假设有过数据拉伸的操作),但由于仅使用插值拉伸的方法添加了 一个数据样本,因此得到的结果与原始数据得到的结果非常接近,可以直接使用。输出方案如下

%% 输出高斯拟合得到的参数
A = cf.a * max(Ydata); % 幅值
mu = cf.b + bias; % 期望
sigma = cf.c; % 标准差

如果希望得到精确的期望值,则需要根据差值比例逆算回去即可,如下所示

muReal = mu*(cols/(cols+1)); % 即根据 muReal:mu = 1281:1280 进行计算

 

  • 19
    点赞
  • 143
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值