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)]);
互信息的建立与求解
最新推荐文章于 2024-10-06 15:48:05 发布