2013-05-27 3 views
0

입니다. 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 

디, j는 j 번째 클래스에 대한 i 번째 분류의 지원이다. 목표는 관찰의 진리입니다.

답변

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]