www.gusucode.com > classification_matlab_toolbox分类方法工具箱源码程序 > code/Classification_toolbox/Marginalization.m
function D = Marginalization(train_features, train_targets, missing, region) % Classify data with missing features using the marginal distribution % This file is strongly made for only two features % % Inputs: % features - Train features % targets - Train targets % missing - The number of the missing feature % region - Decision region vector: [-x x -y y number_of_points] % % Outputs % D - Decision sufrace warning off; [d, L] = size(train_features); N = region(5); if (missing > d), error(['The number of the missing feature must be between 1 and ' num2str(d)]) end %Calculate the marginal distribution using histograms Nbins = max(3,floor(size(train_features,2).^(1/3))); p = high_histogram(train_features,Nbins,region(1:end-1)); classes = unique(train_targets); for i = 1:length(classes), indices = find(train_targets == classes(i)); g_i = high_histogram(train_features(:,indices),Nbins,region(1:end-1)); if (missing == 1), P(i,:) = sum(g_i.*p,missing)./sum(p,missing); else P(i,:) = (sum(g_i.*p,missing)./sum(p,missing))'; end bad = find(~isfinite(P(i,:))); P(i,bad) = 0; end %Build a decision region based on the marginal decision = P(2,:) > P(1,:); if (missing == 1), y = linspace(region(3),region(4),region(5)); yy = linspace(region(3),region(4),size(p,1)); Decision = interp1(yy, decision, y)>.5; D = ones(region(5),1)*Decision; else y = linspace(region(1),region(2),region(5)); yy = linspace(region(1),region(2),size(p,1)); Decision = interp1(yy, decision, y)>.5; D = Decision'*ones(1,region(5)); end D = D';