12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- function ret = validation_function(dec, labels);
- labels = (labels >= 0) - (labels < 0);
- valid_function = @(dec, labels) auc(dec, labels);
- ret = valid_function(dec, labels);
- %precision(dec, labels);
- %recall(dec, labels);
- %fscore(dec, labels);
- %bac(dec, labels);
- %auc(dec, labels);
- %accuracy(dec, labels);
- function ret = precision(dec, label)
- tp = sum(label == 1 & dec >= 0);
- tp_fp = sum(dec >= 0);
- if tp_fp == 0;
- disp(sprintf('warning: No positive predict label.'));
- ret = 0;
- else
- ret = tp / tp_fp;
- end
- disp(sprintf('Precision = %g%% (%d/%d)', 100.0 * ret, tp, tp_fp));
- function ret = recall(dec, label)
- tp = sum(label == 1 & dec >= 0);
- tp_fn = sum(label == 1);
- if tp_fn == 0;
- disp(sprintf('warning: No postive true label.'));
- ret = 0;
- else
- ret = tp / tp_fn;
- end
- disp(sprintf('Recall = %g%% (%d/%d)', 100.0 * ret, tp, tp_fn));
- function ret = fscore(dec, label)
- tp = sum(label == 1 & dec >= 0);
- tp_fp = sum(dec >= 0);
- tp_fn = sum(label == 1);
- if tp_fp == 0;
- disp(sprintf('warning: No positive predict label.'));
- precision = 0;
- else
- precision = tp / tp_fp;
- end
- if tp_fn == 0;
- disp(sprintf('warning: No postive true label.'));
- recall = 0;
- else
- recall = tp / tp_fn;
- end
- if precision + recall == 0;
- disp(sprintf('warning: precision + recall = 0.'));
- ret = 0;
- else
- ret = 2 * precision * recall / (precision + recall);
- end
- disp(sprintf('F-score = %g', ret));
- function ret = bac(dec, label)
- tp = sum(label == 1 & dec >= 0);
- tn = sum(label == -1 & dec < 0);
- tp_fn = sum(label == 1);
- tn_fp = sum(label == -1);
- if tp_fn == 0;
- disp(sprintf('warning: No positive true label.'));
- sensitivity = 0;
- else
- sensitivity = tp / tp_fn;
- end
- if tn_fp == 0;
- disp(sprintf('warning: No negative true label.'));
- specificity = 0;
- else
- specificity = tn / tn_fp;
- end
- ret = (sensitivity + specificity) / 2;
- disp(sprintf('BAC = %g', ret));
- function ret = auc(dec, label)
- [dec idx] = sort(dec, 'descend');
- label = label(idx);
- tp = cumsum(label == 1);
- fp = sum(label == -1);
- ret = sum(tp(label == -1));
- if tp == 0 | fp == 0;
- disp(sprintf('warning: Too few postive true labels or negative true labels'));
- ret = 0;
- else
- ret = ret / tp(end) / fp;
- end
- %disp(sprintf('AUC = %g', ret));
- function ret = accuracy(dec, label)
- correct = sum(dec .* label >= 0);
- total = length(dec);
- ret = correct / total;
- disp(sprintf('Accuracy = %g%% (%d/%d)', 100.0 * ret, correct, total));
|