📄 mil_run.m
字号:
% msg = sprintf(' Coding: ECOC63_31 ');
% preprocess.Message = [preprocess.Message msg];
% elseif (preprocess.MultiClass.CodeType == 4)
% msg = sprintf(' Coding: Random ');
% preprocess.Message = [preprocess.Message msg];
% end;
% if (preprocess.MultiClass.LossFuncType == 0)
% msg = sprintf(' Loss: L1 ');
% preprocess.Message = [preprocess.Message msg];
% elseif (preprocess.MultiClass.LossFuncType == 1)
% msg = sprintf(' Loss: Exp ');
% preprocess.Message = [preprocess.Message msg];
% elseif (preprocess.MultiClass.LossFuncType == 2)
% msg = sprintf(' Loss: (1-Y)+ ');
% preprocess.Message = [preprocess.Message msg];
% end;
%
% if (preprocess.MultiClass.UncertaintyFuncType == 0)
% msg = sprintf(' Uncertainty: L1 ');
% preprocess.Message = [preprocess.Message msg];
% elseif (preprocess.MultiClass.UncertaintyFuncType == 1)
% msg = sprintf(' Uncertainty: Exp ');
% preprocess.Message = [preprocess.Message msg];
% elseif (preprocess.MultiClass.UncertaintyFuncType == 2)
% msg = sprintf(' Uncertainty: (1-Y)+ ');
% preprocess.Message = [preprocess.Message msg];
% elseif (preprocess.MultiClass.UncertaintyFuncType == 3)
% msg = sprintf(' Uncertainty: Min Margin ');
% preprocess.Message = [preprocess.Message msg];
% elseif (preprocess.MultiClass.UncertaintyFuncType == 4)
% msg = sprintf(' Uncertainty: -ln(1+x) ');
% preprocess.Message = [preprocess.Message msg];
% elseif (preprocess.MultiClass.UncertaintyFuncType == 5)
% msg = sprintf(' Uncertainty: Random ');
% preprocess.Message = [preprocess.Message msg];
% end;
%
% if (preprocess.MultiClass.ProbEstimation == 0)
% msg = sprintf(' Best Worse ');
% preprocess.Message = [preprocess.Message msg];
% elseif (preprocess.MultiClass.ProbEstimation == 1)
% msg = sprintf(' Uniform Guess ');
% preprocess.Message = [preprocess.Message msg];
% elseif (preprocess.MultiClass.ProbEstimation == 2)
% msg = sprintf(' Binary Class ');
% preprocess.Message = [preprocess.Message msg];
% end;
% if (preprocess.DataSampling == 1)
% msg = sprintf(' Sampling Rate: %d', preprocess.DataSamplingRate);
% preprocess.Message = [preprocess.Message msg];
% end;
% num_folder = preprocess.NumFolder;
% num_cross_folder = preprocess.NumCrossFolder;;
% load in the data
if ((~isfield(preprocess, 'input_file')) | (isempty(preprocess.input_file))),
error('The input file is not provided!');
end;
input_file = preprocess.input_file;
output_file = preprocess.output_file;
pred_file = preprocess.pred_file;
fid = fopen(output_file, preprocess.OutputFlag);
if (fid < 0),
if ((~isfield(preprocess, 'test_file')) | (isempty(preprocess.test_file))),
output_file = sprintf('%s.result', input_file);
else
output_file = sprintf('%s.result', preprocess.test_file);
end;
preprocess.output_file = output_file;
fid = fopen(output_file, preprocess.OutputFlag);
end;
if (preprocess.OutputFormat == 0),
fprintf(fid, '\nProcessing Filename: %s\n', preprocess.input_file);
fprintf(fid, 'Classifier:%s\nMessage:%s\n',classifier, preprocess.Message);
end;
fclose(fid);
fid = fopen(pred_file, preprocess.OutputFlag);
if (fid < 0),
if ((~isfield(preprocess, 'test_file')) | (isempty(preprocess.test_file))),
pred_file = sprintf('%s.pred', input_file);
else
pred_file = sprintf('%s.pred', preprocess.test_file);
end;
preprocess.pred_file = pred_file;
fid = fopen(pred_file, preprocess.OutputFlag);
end;
if (preprocess.PredFormat == 0),
fprintf(fid, '\nProcessing Filename: %s\n', preprocess.input_file);
fprintf(fid, 'Classifier:%s\nMessage:%s\n',classifier, preprocess.Message);
end;
fclose(fid);
% in MIL, we use a function to read the input data and convert into bag
% formats; sparse format is not currently supported
% if (preprocess.InputFormat == 1),
% strcmd = sprintf('!perl %s/ConvertFileInput.pl %s %s.stdout', root, input_file, input_file);
% fprintf('!perl %s/ConvertFileInput.pl %s %s.stdout\n', root, input_file, input_file);
% eval(strcmd);
% D = dlmread(sprintf('%s.stdout', input_file));
% else
% D = dlmread(input_file);
% end;
%
% if (preprocess.Sparse == 1),
% D = spconvert(D);
% end;
% Automatically judge whether the shot information is available
% if (preprocess.ShotAvailable < 0),
% if (length(unique(D(:, size(D, 2)))) > 10),
% preprocess.ShotAvailable = 1;
% else
% preprocess.ShotAvailable = 0;
% end;
% fprintf('Automatically detect preprocess.ShotAvailable to be %d \n', preprocess.ShotAvailable );
% end;
fprintf('Finished loading %s.............\n', input_file);
fprintf('Output Results to %s.............\n', output_file);
fprintf('Output Predictions to %s.............\n', pred_file);
switch (preprocess.Evaluation)
case 0
% Train Test
EvaluationHandle = @MIL_Train_Test_Validate;
case 1
% Cross Validate
EvaluationHandle = @MIL_Cross_Validate;
case 2
% Test File Validate
if ((~isfield(preprocess, 'test_file')) | (isempty(preprocess.test_file))),
error('The test file is not provided!');
end;
%D_test = dlmread(preprocess.test_file, ',');
%fprintf('Finished loading the test file %s.............\n', preprocess.test_file);
%preprocess.TrainTestSplitBoundary = size(D, 1);
preprocess.Shuffled = 0;
%D = [D; D_test];
EvaluationHandle = @MIL_Train_Test_Validate;
case 3
% Training Only
EvaluationHandle = @MIL_Train_Validate;
case 4
% Testing Only
EvaluationHandle = @MIL_Test_Validate;
case 5
EvaluationHandle = @MIL_Leave_One_Out;
preprocess.Shuffled = 0;
end;
fhandle = @MIL_Train_Test_Simple; %currently only address the binary MIL classification probleem
% switch (preprocess.MultiClassType)
% case 0
% fhandle = @Train_Test_Simple;
% case 1
% fhandle = @Train_Test_Multiple_Class;
% case 2
% fhandle = @Train_Test_Multiple_Label;
% case 3
% fhandle = @Train_Test_Multiple_Class_AL;
% end;
fprintf('Classifier:%s\nMessage:%s\n',classifier, preprocess.Message);
if ((preprocess.Evaluation >= 3) & (preprocess.Evaluation <= 4))
run = feval(EvaluationHandle, input_file, classifier);
else
run = feval(EvaluationHandle, input_file, fhandle, classifier);
end;
OutputResult = [];
if (isfield(run, 'BagAccu')), OutputResult = [OutputResult sprintf('Bag label accuracy = %f, ', run.BagAccu)]; end;
if (isfield(run, 'InstAccu')), OutputResult = [OutputResult sprintf('Instance label accuracy = %f, ', run.InstAccu)]; end;
%if (isfield(run, 'Err')), OutputResult = [OutputResult sprintf('Error = %f, ', run.Err)]; end;
%if (isfield(run, 'Prec')), OutputResult = [OutputResult sprintf('Precision = %f, ', run.Prec)]; end;
%if (isfield(run, 'Rec')), OutputResult = [OutputResult sprintf('Recall = %f, ', run.Rec)]; end;
%if (isfield(run, 'F1')), OutputResult = [OutputResult sprintf('F1 = %f, ', run.F1)]; end;
%if (isfield(run, 'Micro_Prec')), OutputResult = [OutputResult sprintf('Micro_Precision = %f, ', run.Micro_Prec)]; end;
%if (isfield(run, 'Micro_Rec')), OutputResult = [OutputResult sprintf('Micro_Recall = %f, ', run.Micro_Rec)]; end;
%if (isfield(run, 'Micro_F1')), OutputResult = [OutputResult sprintf('Micro_F1 = %f, ', run.Micro_F1)]; end;
%if (isfield(run, 'Macro_Prec')), OutputResult = [OutputResult sprintf('Macro_Precision = %f, ', run.Macro_Prec)]; end;
%if (isfield(run, 'Macro_Rec')), OutputResult = [OutputResult sprintf('Macro_Recall = %f, ', run.Macro_Rec)]; end;
%if (isfield(run, 'Macro_F1')), OutputResult = [OutputResult sprintf('Macro_F1 = %f, ', run.Macro_F1)]; end;
%if (isfield(run, 'AvgPrec')), OutputResult = [OutputResult sprintf('MAP = %f, ', run.AvgPrec)]; end;
%if (isfield(run, 'BaseAvgPrec')), OutputResult = [OutputResult sprintf('MBAP = %f, ', run.BaseAvgPrec)]; end;
fprintf('%s\n', OutputResult);
if (~isempty(output_file))
if ((preprocess.OutputFormat == 0) | (preprocess.OutputFormat == 1)),
fid = fopen(output_file, 'a');
fprintf(fid, '%s\n', OutputResult);
fclose(fid);
end;
end;
if (~isempty(pred_file))
fid = fopen(pred_file, 'w');
fprintf(fid, 'Testing Bag Label Evaluation:\n');
fprintf(fid, 'Index\tProbability\tPredict\tTruth\n');
fprintf(fid, '%d\t%g\t%d\t%d\n', run.bag_pred');
% if (preprocess.OutputFormat == 0),
% if (size(run.Y_pred, 2) == 4),
% fprintf(fid, 'Index\tProb\t\tPred\tTruth\n');
% fprintf(fid, '%d\t%f\t%d\t%d\n', run.Y_pred');
% else
% fprintf(fid, 'Index\tProb\t\tPred\tTruth\tShotID\n');
% fprintf(fid, '%d\t%f\t%d\t%d\t%d\n', run.Y_pred');
% end;
% elseif (preprocess.OutputFormat == 1), % Only work when number of classes is 2
% fprintf(fid, 'Label: '); fprintf(fid, '%d ', preprocess.OrgClassSet); fprintf(fid, '\n');
% ProbClass1 = run.Y_pred(:, 2) .* (run.Y_pred(:, 3) == 1) + (1 - run.Y_pred(:, 2)) .* (run.Y_pred(:, 3) ~= 1);
% fprintf(fid, '%d\t%f\t%f\n', [preprocess.OrgClassSet(run.Y_pred(:, 3)) ProbClass1 (1 - ProbClass1)]');
% end;
fclose(fid);
end;
function Report_Error()
fprintf(' Example: Suppose you are in root directory\n');
fprintf(' Example: test_classify.exe \"classify -t demo/DataExample1.train.txt -sh 1 -- train_only -m demo/DataExample1.libSVM.model -- LibSVM -Kernel 0 -CostFactor 3\" \n');
fprintf(' Example: test_classify.exe \"classify -t demo/DataExample1.test.txt -sh 1 -- test_only -m demo/DataExample1.libSVM.model -- LibSVM -Kernel 0 -CostFactor 3\" \n');
fprintf(' Please refer to http://finalfantasyxi.inf.cs.cmu.edu/tmp/MATLABArsenal.htm for more examples \n');
error(' The command must begin with Classify ');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -