forked from gabgoh/svmc.jl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
experiment.jl
93 lines (60 loc) · 3.66 KB
/
experiment.jl
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
include("svm.jl")
include("loaddata.jl")
# ───────────────────────────────────────────────────────────────────
# Setup Precision/Recall constraints
# ───────────────────────────────────────────────────────────────────
e = ones(length(y))
y₊ = y .> 0
y₋ = y .< 0
ytest₊ = ytest .> 0
ytest₋ = ytest .< 0
# ───────────────────────────────────────────────────────────────────
# Setup SVM Parameters
# ───────────────────────────────────────────────────────────────────
ConstraintRange = linspace(1,size(A,1)*1.5,32)
params = Dict{Any,Any}( :kernel => Int32(1) ,
:degree => 2,
:γ => 1. )
# params = Dict{Any,Any}( :kernel => Int32(2) ,
# :degree => 2,
# :γ => 2/n )
# ───────────────────────────────────────────────────────────────────
# Bias Shift
# ───────────────────────────────────────────────────────────────────
# (pred, v) = svm(y, A, e; params...)
# z = pred(Atest)[:]
# P = sortperm(z)
# biasshift = DataFrame(fp = Float64[], fn = Float64[])
# for i = 1:100:size(P,1)
# prd = zeros(size(P,1))
# prd[P[i+1:end]] = 1
# prd[P[1:i]] = -1
# err = abs(prd - ytest)/2
# fp = sum(err[ytest₋])
# fn = sum(err[ytest₊])
# push!(biasshift, [fp fn])
# end
# ───────────────────────────────────────────────────────────────────
# Hinge
# ───────────────────────────────────────────────────────────────────
function hinge_experiment(η)
tic()
(pred, v, λ) = svmcbisect( y[y₊], A[y₊,:], e[y₊],
y[y₋], A[y₋,:], e[y₋]/η ; verbose = false,
params ... )
(err, fp, fn, tp, tn) = calc_error(Atest, ytest, pred)
println( η, "\t", err, "\t", fp, "\t", fn, "\t", λ)
return Dict{Symbol, Any}(:fp => fp, :fn => fn, :v => v, :runtime => toc())
end
# ───────────────────────────────────────────────────────────────────
# Ramp
# ───────────────────────────────────────────────────────────────────
function ramp_experiment(η)
tic()
(pred, v) = svmramp( y[y₊], A[y₊,:], e[y₊],
y[y₋], A[y₋,:], e[y₋]/η ; verbose = true,
params...)
(err, fp, fn, tp, tn) = calc_error(Atest, ytest, pred)
println( η, "\t", err, "\t", fp, "\t", fn)
return Dict{Symbol, Any}(:fp => fp, :fn => fn, :v => v, :runtime => toc())
end