我有3级分类问题,我有4个分类器。每个分类器返回对每个类的支持。现在我想使用加权平均值和c * L权重(c = 3,L = 4)来组合这些输出,但我不知道如何计算权重?
例如,我有这样的数据集:
D1,1 | 0.85 0.01 0.34 0.44 0.08 0.89 0.01 0.35 0.97 0.04
D1,2 | 0.67 0.03 0.13 0.58 0.06 0.48 0.60 0.59 0.03 0.28
D1,3 | 0.52 0.08 0.50 0.87 0.88 0.01 0.95 0.58 0.83 0.65
D2,1 | 0.29 0.26 0.85 0.46 0.23 0.62 0.09 0.66 0.83 0.48
D2,2 | 0.70 0.02 0.38 0.43 0.86 0.23 0.03 0.64 0.04 0.97
D2,3 | 0.38 0.42 0.69 0.74 0.71 0.52 0.88 0.43 0.54 0.74
D3,1 | 0.56 0.34 0.62 0.46 0.87 0.72 0.24 0.13 0.94 0.56
D3,2 | 0.88 0.54 0.45 0.86 0.93 0.60 0.00 0.75 0.32 0.29
D3,3 | 0.84 0.92 0.47 0.46 0.13 0.58 0.81 0.24 0.80 0.25
D4,1 | 0.89 0.29 0.94 0.49 0.39 0.43 0.14 0.65 0.60 0.88
D4,2 | 0.93 0.33 0.08 0.48 0.98 0.24 0.87 0.85 0.78 0.44
D4,3 | 0.81 0.85 0.27 0.22 0.64 0.42 0.09 0.08 0.79 0.81
TARGET 1 3 1 3 3 1 2 2 2 3
Di,j是对第j类的第i个分类器的支持。 TARGET是真实的观察类。
答案 0 :(得分:0)
我是这样做的,但我不知道这很好。在我看来它会带来好的结果,因此我认为这很好。有人可以检查一下吗?
%% Prepare environment
clearvars;
close all;
format compact;
clc;
%% Code here
nObservations = 10;
nClasses = 3; % c
nClassifiers = 4; % L
data = [0.85 0.01 0.34 0.44 0.08 0.89 0.01 0.35 0.97 0.04;
0.67 0.03 0.13 0.58 0.06 0.48 0.60 0.59 0.03 0.28;
0.52 0.08 0.50 0.87 0.88 0.01 0.95 0.58 0.83 0.65;
0.29 0.26 0.85 0.46 0.23 0.62 0.09 0.66 0.83 0.48;
0.70 0.02 0.38 0.43 0.86 0.23 0.03 0.64 0.04 0.97;
0.38 0.42 0.69 0.74 0.71 0.52 0.88 0.43 0.54 0.74;
0.56 0.34 0.62 0.46 0.87 0.72 0.24 0.13 0.94 0.56;
0.88 0.54 0.45 0.86 0.93 0.60 0.00 0.75 0.32 0.29;
0.84 0.92 0.47 0.46 0.13 0.58 0.81 0.24 0.80 0.25;
0.89 0.29 0.94 0.49 0.39 0.43 0.14 0.65 0.60 0.88;
0.93 0.33 0.08 0.48 0.98 0.24 0.87 0.85 0.78 0.44;
0.81 0.85 0.27 0.22 0.64 0.42 0.09 0.08 0.79 0.81];
data = data';
targets = [1 3 1 3 3 1 2 2 2 3]';
w = zeros(nClassifiers, nClasses);
for iClass = 1:nClasses
isMemberOfIthClass = zeros(nObservations, 1);
isMemberOfIthClass(targets == iClass) = 1;
c = cov(bsxfun(@minus, isMemberOfIthClass, data(:, ((1:nClassifiers)-1)*nClasses+iClass)));
w(:, iClass) = c \ ones(nClassifiers, 1) / (ones(1, nClassifiers) / c * ones(nClassifiers, 1));
end
mi = zeros(nObservations, nClasses);
for iClass = 1:nClasses
mi(:, iClass) = data(:, ((1:nClassifiers)-1)*nClasses+iClass)*w(:, iClass);
end
[~, ind] = max(mi, [], 2);
[mi ind targets]