-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathrun_iForest.m
48 lines (34 loc) · 1.27 KB
/
run_iForest.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
clear
%% load data
data=load('breastw_683.csv');
ADLabels=data(:,end);
Data=data(:,1:end-1);
%% Run iForest
% general parameters
rounds = 10; % rounds of repeat
% parameters for iForest
NumTree = 100; % number of isolation trees
NumSub = 256; % subsample size
NumDim = size(Data, 2); % do not perform dimension sampling
auc = zeros(rounds, 1);
mtime = zeros(rounds, 2);
rseed = zeros(rounds, 1);
for r = 1:rounds
disp(['rounds ', num2str(r), ':']);
rseed(r) = sum(100 * clock);
Forest = IsolationForest(Data, NumTree, NumSub, NumDim, rseed(r));
mtime(r, 1) = Forest.ElapseTime;
% [Mass, mtime(r, 2)] = IsolationEstimation(Data, Forest);
[Mass, ~] = IsolationEstimation(Data, Forest);
Score = - mean(Mass, 2);
auc(r) = Measure_AUC(Score, ADLabels);
disp(['auc = ', num2str(auc(r)), '.']);
% [~,~,~,AUClog(r)] = perfcurve(logical(ADLabels),Score,'true');
end
% myresults = [mean(auc), var(auc), mean(mtime(:, 1)), mean(mtime(:, 2))]
AUC_results = [mean(auc), std(auc)] % average AUC over 10 trials
%% Plot AUC based on last trial
[Xlog,Ylog,Tlog,AUClog] = perfcurve(logical(ADLabels),Score,'true');
plot(Xlog,Ylog)
xlabel('False positive rate'); ylabel('True positive rate');
title('AUC')