互信息的建立与求解

function [mi] = calculateMutualInformation(x, y, numBins)
% calculateMutualInformation 计算两个随机变量之间的互信息。
% 输入:
% x: 第一个随机变量的观测值向量。
% y: 第二个随机变量的观测值向量。
% numBins: 用于直方图的箱的数量。
% 输出:
% mi: 互信息值。

% 创建直方图以估计概率分布
edgesX = linspace(min(x), max(x), numBins + 1);
edgesY = linspace(min(y), max(y), numBins + 1);

% 计算联合直方图
jointHist = histcounts2(x, y, edgesX, edgesY);

% 计算边缘直方图
marginalHistX = sum(jointHist, 2);
marginalHistY = sum(jointHist, 1);

% 转换为概率分布
jointProb = jointHist / sum(jointHist(:));
marginalProbX = marginalHistX / sum(marginalHistX);
marginalProbY = marginalHistY / sum(marginalHistY);

% 避免除以零的情况
jointProb(jointProb == 0) = eps; % 添加一个小的正数,例如 eps
marginalProbX(marginalProbX == 0) = eps;
marginalProbY(marginalProbY == 0) = eps;

% 计算互信息
mi = sum(sum(jointProb .* log(jointProb ./ (marginalProbX' .* marginalProbY'))));

end
% 示例使用
sequenceA = [92.63, 95.02, 96.77, 94.29, 92.35, 92.72];
sequenceB = [1.98, 1.32, 0.81, 1.46, 3.5, 2.51];

numBins = 10; % 直方图的箱的数量

mi = calculateMutualInformation(sequenceA, sequenceB, numBins);

% 显示结果
disp(['互信息值: ', num2str(mi)]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值