using Gadfly
using DataFrames
# サンプルデータ(訓練データ)生成
function makelabels{T<:AbstractFloat}(data::AbstractMatrix{T})
res = vec(sign(reducedim(*, data, 2)))
# 0.0 -> 1.0
res[res .== 0] = one(T)
res
end
makelabels (generic function with 1 method)
# サンプルデータ(訓練データ)生成
function makedata(N::Int=1000)
data = rand(N, 2) .* 2.0 .- 1.0
labels = makelabels(data)
DataFrame(x=vec(data[:,1]), y=vec(data[:,2]), c=vec(labels))
end
makedata (generic function with 2 methods)
data = makedata(1000)
x | y | c | |
---|---|---|---|
1 | 0.273513462321628 | 0.20104360356492323 | 1.0 |
2 | 0.5484945499325278 | 0.5465460629730443 | 1.0 |
3 | -0.5964863005661138 | -0.684373465689887 | 1.0 |
4 | 0.882959263385525 | 0.4364522345450439 | 1.0 |
5 | -0.9537778727559454 | 0.952388982140056 | -1.0 |
6 | -0.22940671627334108 | 0.5219859934932125 | -1.0 |
7 | -0.25191256571047926 | 0.9208285362478583 | -1.0 |
8 | -0.643077865113916 | -0.17859750592496138 | 1.0 |
9 | 0.19862718805980695 | 0.050406468153182615 | 1.0 |
10 | 0.05337617479954737 | 0.5454664946386498 | 1.0 |
11 | 0.29508840141755144 | -0.9649258478471143 | -1.0 |
12 | -0.1524493208845561 | 0.6822192178874045 | -1.0 |
13 | -0.9184519056970673 | -0.6392168896917347 | 1.0 |
14 | -0.897645656699634 | -0.5759041271111238 | 1.0 |
15 | 0.32168494129371084 | -0.5120327903751392 | -1.0 |
16 | 0.027076689450539426 | -0.975295234185598 | -1.0 |
17 | 0.4762306519118744 | 0.7874465373917561 | 1.0 |
18 | -0.30534846549320926 | -0.7259784464052816 | 1.0 |
19 | 0.6860516006942219 | -0.6066715625797374 | -1.0 |
20 | -0.9238863166196265 | -0.35140144352315916 | 1.0 |
21 | -0.10443562942939932 | -0.048711768444173575 | 1.0 |
22 | -0.829469480176245 | 0.3147678736994748 | -1.0 |
23 | 0.5870763598612463 | 0.054938478606486374 | 1.0 |
24 | 0.6519255863771098 | 0.989730950322754 | 1.0 |
25 | 0.0891832578252778 | 0.9524512182024738 | 1.0 |
26 | -0.4663462622833232 | -0.8160675550886936 | 1.0 |
27 | -0.82607009647898 | 0.013475590850961616 | -1.0 |
28 | -0.2036494554088364 | -0.7144779003651456 | 1.0 |
29 | -0.15786673423821496 | 0.9252661101183852 | -1.0 |
30 | 0.0203046727532894 | 0.6180572277678622 | 1.0 |
⋮ | ⋮ | ⋮ | ⋮ |
function dispresult(data)
colscale = if data[1, :c] < 1
Scale.color_discrete_manual(colorant"red",colorant"blue")
else
Scale.color_discrete_manual(colorant"blue",colorant"red")
end
plot(
data, x=:x, y=:y, color=:c, Geom.point,
colscale,
Coord.cartesian(xmin=-1.0, xmax=1.0, ymin=-1.0, ymax=1.0)
)
end
dispresult (generic function with 1 method)
dispresult(data)
X = convert(Array, data[:,1:2]); Y = collect(data[:, 3]);
X
1000×2 Array{Float64,2}: 0.273513 0.201044 0.548495 0.546546 -0.596486 -0.684373 0.882959 0.436452 -0.953778 0.952389 -0.229407 0.521986 -0.251913 0.920829 -0.643078 -0.178598 0.198627 0.0504065 0.0533762 0.545466 0.295088 -0.964926 -0.152449 0.682219 -0.918452 -0.639217 ⋮ -0.0838651 0.0386299 0.80772 -0.0298114 0.569302 -0.744343 0.580038 -0.996435 0.0545968 -0.966687 -0.228019 0.11116 -0.956606 -0.46124 -0.673119 0.855353 -0.870704 0.806342 0.244998 -0.173468 -0.625237 -0.733193 -0.40105 0.537766
Y
1000-element Array{Float64,1}: 1.0 1.0 1.0 1.0 -1.0 -1.0 -1.0 1.0 1.0 1.0 -1.0 -1.0 1.0 ⋮ -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 1.0 -1.0 -1.0 -1.0 1.0 -1.0
include("adaboost.jl")
# H = adaboost(X, Y)
H = adaboost(X, Y; t=1000)
AdaBoost{Float64,DecisionStumpWeakClassifier{Float64}}([0.0580652,0.053209,0.0464753,0.0576038,0.0384998,0.0392328,0.048094,0.039766,0.0407914,0.0389311 … 0.0112703,0.0114115,0.0115211,0.0111341,0.0109112,0.0115122,0.0111061,0.0111414,0.0110186,0.0108985],DecisionStumpWeakClassifier{Float64}[DecisionStumpWeakClassifier{Float64}(2,1.0,0.587867),DecisionStumpWeakClassifier{Float64}(1,1.0,0.237088),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.968172),DecisionStumpWeakClassifier{Float64}(2,-1.0,-0.672471),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.968172),DecisionStumpWeakClassifier{Float64}(1,-1.0,-0.793447),DecisionStumpWeakClassifier{Float64}(2,1.0,-0.381317),DecisionStumpWeakClassifier{Float64}(2,-1.0,-0.630665),DecisionStumpWeakClassifier{Float64}(2,1.0,-0.935358),DecisionStumpWeakClassifier{Float64}(1,1.0,0.643367) … DecisionStumpWeakClassifier{Float64}(2,1.0,-0.250868),DecisionStumpWeakClassifier{Float64}(2,-1.0,-0.187747),DecisionStumpWeakClassifier{Float64}(2,1.0,-0.141248),DecisionStumpWeakClassifier{Float64}(2,-1.0,-0.0977131),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.138321),DecisionStumpWeakClassifier{Float64}(1,1.0,0.159336),DecisionStumpWeakClassifier{Float64}(2,1.0,-0.0589414),DecisionStumpWeakClassifier{Float64}(2,-1.0,-0.0742434),DecisionStumpWeakClassifier{Float64}(2,1.0,-0.0589414),DecisionStumpWeakClassifier{Float64}(2,-1.0,-0.0742434)])
length(H.alpha)
1000
Yd = H(X)
1000×1 Array{Float64,2}: 1.0 1.0 1.0 1.0 1.0 -1.0 -1.0 1.0 -1.0 1.0 1.0 -1.0 1.0 ⋮ -1.0 -1.0 1.0 -1.0 -1.0 -1.0 1.0 -1.0 -1.0 1.0 1.0 1.0
dispresult(DataFrame(x=X[:,1], y=X[:,2], c=vec(Yd)))
function calc_confusionmatrix(Y, Yd)
tp = sum(1+Y[Yd.==1])/2
fp = sum(1-Y[Yd.==1])/2
tn = sum(1-Y[Yd.==-1])/2
fn = sum(1+Y[Yd.==-1])/2
[tp fp; fn tn]
end
calc_confusionmatrix (generic function with 1 method)
function calc_mlmetrics(Y, Yd)
cm = calc_confusionmatrix(Y, Yd)
(tp, fn, fp, tn) = vec(cm)
accuracy = (tp + tn) / (tp + fp + fn + tn)
precision_score = tp / (tp + fp)
recall_score = tp / (tp + fn)
f_measure = 2 * precision_score * recall_score / (precision_score + recall_score)
(accuracy, precision_score, recall_score, f_measure)
end
calc_mlmetrics (generic function with 1 method)
calc_confusionmatrix(Y, Yd)
2×2 Array{Float64,2}: 349.0 146.0 147.0 358.0
(a, p, r, f) = calc_mlmetrics(Y, Yd)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.707000 precision: 0.705051 recall: 0.703629 f_measure: 0.704339
x_test = rand(100, 2) .* 2.0 .- 1.0
y_test = H(x_test)
dispresult(DataFrame(x=x_test[:,1], y=x_test[:,2], c=vec(y_test)))
(a, p, r, f) = calc_mlmetrics(makelabels(x_test), y_test)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.490000 precision: 0.518519 recall: 0.528302 f_measure: 0.523364
# H = adaboost(X, Y; t=1000)
H2k = adaboost(X, Y; t=2000)
AdaBoost{Float64,DecisionStumpWeakClassifier{Float64}}([0.0580652,0.0324606,0.0545698,0.0635477,0.0412096,0.0336945,0.0314204,0.0322464,0.0294566,0.0269317 … 0.0103843,0.00998243,0.0102604,0.0114228,0.00857491,0.0105725,0.0100277,0.00963009,0.00819174,0.0105998],DecisionStumpWeakClassifier{Float64}[DecisionStumpWeakClassifier{Float64}(2,1.0,0.587867),DecisionStumpWeakClassifier{Float64}(2,-1.0,-0.672471),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.968172),DecisionStumpWeakClassifier{Float64}(1,1.0,0.237088),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.0538974),DecisionStumpWeakClassifier{Float64}(2,1.0,0.0542291),DecisionStumpWeakClassifier{Float64}(1,1.0,0.213701),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.141362),DecisionStumpWeakClassifier{Float64}(1,1.0,0.213701),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.141362) … DecisionStumpWeakClassifier{Float64}(2,-1.0,-0.910988),DecisionStumpWeakClassifier{Float64}(2,1.0,-0.879516),DecisionStumpWeakClassifier{Float64}(2,-1.0,-0.830451),DecisionStumpWeakClassifier{Float64}(1,1.0,-0.545849),DecisionStumpWeakClassifier{Float64}(2,1.0,0.682388),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.726957),DecisionStumpWeakClassifier{Float64}(1,-1.0,-0.624116),DecisionStumpWeakClassifier{Float64}(1,1.0,-0.645942),DecisionStumpWeakClassifier{Float64}(2,1.0,0.955124),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.677456)])
length(H2k.alpha)
2000
Yd2k = H2k(X)
1000×1 Array{Float64,2}: 1.0 1.0 1.0 1.0 1.0 -1.0 -1.0 1.0 -1.0 1.0 1.0 -1.0 1.0 ⋮ -1.0 -1.0 1.0 -1.0 -1.0 -1.0 1.0 -1.0 -1.0 -1.0 1.0 1.0
dispresult(DataFrame(x=X[:,1], y=X[:,2], c=vec(Yd2k)))
calc_confusionmatrix(Y, Yd2k)
2×2 Array{Float64,2}: 365.0 130.0 131.0 374.0
(a, p, r, f) = calc_mlmetrics(Y, Yd2k)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.739000 precision: 0.737374 recall: 0.735887 f_measure: 0.736630
x_test = rand(100, 2) .* 2.0 .- 1.0
y_test = H2k(x_test)
dispresult(DataFrame(x=x_test[:,1], y=x_test[:,2], c=vec(y_test)))
(a, p, r, f) = calc_mlmetrics(makelabels(x_test), y_test)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.520000 precision: 0.527273 recall: 0.568627 f_measure: 0.547170
include("beveleddecisionstumpweakclassifier.jl")
# H = adaboost(X, Y; t=1000)
Hb = adaboost(X, Y; t=100, wc=BeveledDecisionStumpWeakClassifier)
AdaBoost{Float64,BeveledDecisionStumpWeakClassifier{Float64}}([0.390742,0.464201,0.215764,0.179527,0.442829,0.241261,0.640819,0.319107,0.348926,0.287909 … 0.342169,0.142009,0.129609,0.241475,0.158898,0.194405,0.149926,0.172537,0.170954,0.134491],BeveledDecisionStumpWeakClassifier{Float64}[BeveledDecisionStumpWeakClassifier{Float64}([0.30277,0.258966],-0.165111),BeveledDecisionStumpWeakClassifier{Float64}([0.253853,-0.409085],0.232205),BeveledDecisionStumpWeakClassifier{Float64}([-0.143027,0.641565],0.0601128),BeveledDecisionStumpWeakClassifier{Float64}([0.00331212,-0.763304],-0.48172),BeveledDecisionStumpWeakClassifier{Float64}([-0.719062,-0.911545],-0.502199),BeveledDecisionStumpWeakClassifier{Float64}([0.457083,0.397586],-0.190286),BeveledDecisionStumpWeakClassifier{Float64}([-0.503133,0.230165],0.208291),BeveledDecisionStumpWeakClassifier{Float64}([0.382115,0.344769],-0.282724),BeveledDecisionStumpWeakClassifier{Float64}([0.078961,-0.0273842],0.0638316),BeveledDecisionStumpWeakClassifier{Float64}([-0.449102,-0.873304],-0.359404) … BeveledDecisionStumpWeakClassifier{Float64}([0.320907,-0.816412],0.266821),BeveledDecisionStumpWeakClassifier{Float64}([-0.183788,0.142463],0.0559334),BeveledDecisionStumpWeakClassifier{Float64}([0.11225,-0.678792],0.0152862),BeveledDecisionStumpWeakClassifier{Float64}([0.468711,0.668413],-0.20779),BeveledDecisionStumpWeakClassifier{Float64}([-0.983478,-0.829123],-0.211064),BeveledDecisionStumpWeakClassifier{Float64}([0.418475,-0.275625],0.235513),BeveledDecisionStumpWeakClassifier{Float64}([-0.383323,0.00265784],-0.269409),BeveledDecisionStumpWeakClassifier{Float64}([-0.0289031,0.44254],0.0190679),BeveledDecisionStumpWeakClassifier{Float64}([0.846329,-0.556386],0.227361),BeveledDecisionStumpWeakClassifier{Float64}([-0.583789,0.706333],0.104621)])
length(Hb.alpha)
100
Ydb = Hb(X)
1000×1 Array{Float64,2}: 1.0 1.0 1.0 1.0 -1.0 -1.0 -1.0 1.0 1.0 1.0 -1.0 -1.0 1.0 ⋮ -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 1.0 -1.0 -1.0 -1.0 1.0 -1.0
dispresult(DataFrame(x=X[:,1], y=X[:,2], c=vec(Ydb)))
(a, p, r, f) = calc_mlmetrics(Y, Ydb)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 1.000000 precision: 1.000000 recall: 1.000000 f_measure: 1.000000
x_test = rand(100, 2) .* 2.0 .- 1.0
y_test = Hb(x_test)
dispresult(DataFrame(x=x_test[:,1], y=x_test[:,2], c=vec(y_test)))
(a, p, r, f) = calc_mlmetrics(makelabels(x_test), y_test)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 1.000000 precision: 1.000000 recall: 1.000000 f_measure: 1.000000
# Hb = adaboost(X, Y; t=100, wc=BeveledDecisionStumpWeakClassifier)
Hb2h = adaboost(X, Y; t=200, wc=BeveledDecisionStumpWeakClassifier)
AdaBoost{Float64,BeveledDecisionStumpWeakClassifier{Float64}}([0.0640876,0.364649,0.266536,0.0485091,0.301976,0.276273,0.718366,0.335451,0.432562,0.120108 … 0.109026,0.149198,0.144308,0.219418,0.123673,0.174697,0.148144,0.137387,0.208076,0.121645],BeveledDecisionStumpWeakClassifier{Float64}[BeveledDecisionStumpWeakClassifier{Float64}([-0.0357416,0.489426],0.0709168),BeveledDecisionStumpWeakClassifier{Float64}([0.810919,0.595907],-0.366214),BeveledDecisionStumpWeakClassifier{Float64}([0.106273,-0.792402],0.395468),BeveledDecisionStumpWeakClassifier{Float64}([0.0128754,-0.197599],-0.122638),BeveledDecisionStumpWeakClassifier{Float64}([-0.313471,-0.685984],-0.295129),BeveledDecisionStumpWeakClassifier{Float64}([0.64,0.860236],-0.434555),BeveledDecisionStumpWeakClassifier{Float64}([-0.602826,0.444909],0.372132),BeveledDecisionStumpWeakClassifier{Float64}([0.937046,-0.783668],0.446571),BeveledDecisionStumpWeakClassifier{Float64}([-0.301439,-0.818225],-0.615801),BeveledDecisionStumpWeakClassifier{Float64}([-0.647721,0.0411165],0.0430963) … BeveledDecisionStumpWeakClassifier{Float64}([0.339057,0.292615],0.0908953),BeveledDecisionStumpWeakClassifier{Float64}([0.161146,-0.256801],0.0794195),BeveledDecisionStumpWeakClassifier{Float64}([-0.537913,-0.499498],-0.493435),BeveledDecisionStumpWeakClassifier{Float64}([-0.815787,-0.0010163],0.0202918),BeveledDecisionStumpWeakClassifier{Float64}([-0.519539,0.744781],0.462936),BeveledDecisionStumpWeakClassifier{Float64}([0.525258,0.538986],-0.0620274),BeveledDecisionStumpWeakClassifier{Float64}([-0.000286535,-0.962962],-0.00769745),BeveledDecisionStumpWeakClassifier{Float64}([-0.670115,-0.74038],-0.610909),BeveledDecisionStumpWeakClassifier{Float64}([-0.908854,0.778947],0.705212),BeveledDecisionStumpWeakClassifier{Float64}([-0.595651,0.696808],0.0522089)])
length(Hb2h.alpha)
200
Ydb2h = Hb2h(X)
1000×1 Array{Float64,2}: 1.0 1.0 1.0 1.0 -1.0 -1.0 -1.0 1.0 1.0 1.0 -1.0 -1.0 1.0 ⋮ -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 1.0 -1.0 -1.0 -1.0 1.0 -1.0
dispresult(DataFrame(x=X[:,1], y=X[:,2], c=vec(Ydb2h)))
(a, p, r, f) = calc_mlmetrics(Y, Ydb2h)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 1.000000 precision: 1.000000 recall: 1.000000 f_measure: 1.000000
x_test = rand(100, 2) .* 2.0 .- 1.0
y_test = Hb2h(x_test)
dispresult(DataFrame(x=x_test[:,1], y=x_test[:,2], c=vec(y_test)))
(a, p, r, f) = calc_mlmetrics(makelabels(x_test), y_test)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.990000 precision: 0.980392 recall: 1.000000 f_measure: 0.990099
include("decisiontreeweakclassifier.jl")
# H = adaboost(X, Y; t=1000)
Ht = adaboost(X, Y; t=100, wc=DecisionTreeWeakClassifier)
AdaBoost{Float64,DecisionTreeWeakClassifier{Float64}}(Float64[],DecisionTreeWeakClassifier{Float64}[])
length(Ht.alpha)
0
Ydt = Ht(X)
1000×1 Array{Float64,2}: 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ⋮ 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
dispresult(DataFrame(x=X[:,1], y=X[:,2], c=vec(Ydt)))
(a, p, r, f) = calc_mlmetrics(Y, Ydt)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.496000 precision: 0.496000 recall: 1.000000 f_measure: 0.663102
x_test = rand(100, 2) .* 2.0 .- 1.0
y_test = Ht(x_test)
dispresult(DataFrame(x=x_test[:,1], y=x_test[:,2], c=vec(y_test)))
(a, p, r, f) = calc_mlmetrics(makelabels(x_test), y_test)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.550000 precision: 0.550000 recall: 1.000000 f_measure: 0.709677
# Ht = adaboost(X, Y; t=100, wc=DecisionTreeWeakClassifier)
Ht2d = adaboost(X, Y; t=100, wc=DecisionTreeWeakClassifier, maxdepth=2)
AdaBoost{Float64,DecisionTreeWeakClassifier{Float64}}([0.225759,0.481584,0.113681,0.386756,0.409856,0.177114,0.135801,0.0924157,0.178989,0.174349 … 1.01431,1.07727,0.774954,1.76533,0.792049,0.596223,1.62213,0.715428,1.03788,2.51375],DecisionTreeWeakClassifier{Float64}[DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.587867,DTreeNode{Float64}(-1.0,1,0.00346749,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.998158,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,-0.672471,DTreeNode{Float64}(1.0,1,0.0112013,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(-1.0,1,-0.0142602,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,-0.672471,DTreeNode{Float64}(1.0,2,-0.99579,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,2,0.955124,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,-0.381317,DTreeNode{Float64}(-1.0,1,0.0112013,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.56567,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.557168,DTreeNode{Float64}(-1.0,2,-0.630665,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,1,-0.00346146,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.0538974,DTreeLeaf{Float64}(1.0),DTreeNode{Float64}(-1.0,1,0.636992,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,-0.616348,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,2,0.999421,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,-0.862311,DTreeNode{Float64}(1.0,1,-0.985904,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,-0.616348,DTreeNode{Float64}(-1.0,1,0.0112013,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,1,0.011518,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,-0.0571165,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))) … DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,-0.00661153,DTreeNode{Float64}(-1.0,2,0.00280382,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.00144661,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,-0.00661153,DTreeNode{Float64}(-1.0,2,0.00280382,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,-0.908002,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,-0.905908,DTreeNode{Float64}(1.0,1,0.0112013,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(-1.0,1,-0.624116,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.00144661,DTreeNode{Float64}(-1.0,1,0.000525871,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.876537,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,-0.905908,DTreeNode{Float64}(1.0,1,0.0112013,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(-1.0,1,0.0937438,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,-0.905908,DTreeNode{Float64}(1.0,1,0.0112013,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(-1.0,1,-0.985134,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,-0.0142602,DTreeNode{Float64}(-1.0,2,0.00280382,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.00144661,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.173235,DTreeNode{Float64}(1.0,1,0.137893,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(-1.0,2,0.241569,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,-0.0142602,DTreeNode{Float64}(-1.0,2,0.00280382,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,1,0.621187,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.00367594,DTreeNode{Float64}(1.0,2,0.00280382,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(-1.0,2,0.00144661,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0))))])
length(Ht2d.alpha)
97
Ydt2d = Ht2d(X)
1000×1 Array{Float64,2}: 1.0 1.0 1.0 1.0 -1.0 -1.0 -1.0 1.0 1.0 1.0 -1.0 -1.0 1.0 ⋮ -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 1.0 -1.0 -1.0 -1.0 1.0 -1.0
dispresult(DataFrame(x=X[:,1], y=X[:,2], c=vec(Ydt2d)))
(a, p, r, f) = calc_mlmetrics(Y, Ydt2d)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 1.000000 precision: 1.000000 recall: 1.000000 f_measure: 1.000000
x_test = rand(100, 2) .* 2.0 .- 1.0
y_test = Ht2d(x_test)
dispresult(DataFrame(x=x_test[:,1], y=x_test[:,2], c=vec(y_test)))
(a, p, r, f) = calc_mlmetrics(makelabels(x_test), y_test)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 1.000000 precision: 1.000000 recall: 1.000000 f_measure: 1.000000
X2 = [X X.^2 reducedim(*, X, 2);]
1000×5 Array{Float64,2}: 0.273513 0.201044 0.0748096 0.0404185 0.0549881 0.548495 0.546546 0.300846 0.298713 0.299778 -0.596486 -0.684373 0.355796 0.468367 0.408219 0.882959 0.436452 0.779617 0.190491 0.38537 -0.953778 0.952389 0.909692 0.907045 -0.908368 -0.229407 0.521986 0.0526274 0.272469 -0.119747 -0.251913 0.920829 0.0634599 0.847925 -0.231968 -0.643078 -0.178598 0.413549 0.0318971 0.114852 0.198627 0.0504065 0.0394528 0.00254081 0.0100121 0.0533762 0.545466 0.00284902 0.297534 0.0291149 0.295088 -0.964926 0.0870772 0.931082 -0.284738 -0.152449 0.682219 0.0232408 0.465423 -0.104004 -0.918452 -0.639217 0.843554 0.408598 0.58709 ⋮ -0.0838651 0.0386299 0.00703335 0.00149227 -0.0032397 0.80772 -0.0298114 0.652411 0.000888718 -0.0240792 0.569302 -0.744343 0.324105 0.554047 -0.423756 0.580038 -0.996435 0.336444 0.992883 -0.57797 0.0545968 -0.966687 0.00298081 0.934484 -0.052778 -0.228019 0.11116 0.0519925 0.0123566 -0.0253466 -0.956606 -0.46124 0.915095 0.212742 0.441225 -0.673119 0.855353 0.45309 0.731629 -0.575755 -0.870704 0.806342 0.758126 0.650188 -0.702086 0.244998 -0.173468 0.0600241 0.0300913 -0.0424994 -0.625237 -0.733193 0.390921 0.537572 0.458419 -0.40105 0.537766 0.160841 0.289193 -0.215671
H2 = adaboost(X2, Y; t=1000)
AdaBoost{Float64,DecisionStumpWeakClassifier{Float64}}([0.0640876,0.0523419,0.0730121,0.0783668,0.0563524],DecisionStumpWeakClassifier{Float64}[DecisionStumpWeakClassifier{Float64}(3,1.0,0.661592),DecisionStumpWeakClassifier{Float64}(2,1.0,0.0542291),DecisionStumpWeakClassifier{Float64}(4,1.0,0.422136),DecisionStumpWeakClassifier{Float64}(4,1.0,0.00560248),DecisionStumpWeakClassifier{Float64}(4,-1.0,0.15974)])
length(H2.alpha)
5
Yd2 = H2(X2)
1000×1 Array{Float64,2}: 1.0 -1.0 -1.0 1.0 1.0 -1.0 1.0 -1.0 -1.0 -1.0 -1.0 1.0 -1.0 ⋮ -1.0 -1.0 -1.0 -1.0 -1.0 1.0 -1.0 1.0 1.0 -1.0 -1.0 -1.0
dispresult(DataFrame(x=X[:,1], y=X[:,2], c=vec(Yd2)))
(a, p, r, f) = calc_mlmetrics(Y, Yd2)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.557000 precision: 0.564477 recall: 0.467742 f_measure: 0.511577
x_test = rand(100, 2) .* 2.0 .- 1.0
x_test2 = [x_test x_test.^2 reducedim(*, x_test, 2);]
y_test = H2(x_test2)
dispresult(DataFrame(x=x_test[:,1], y=x_test[:,2], c=vec(y_test)))
(a, p, r, f) = calc_mlmetrics(makelabels(x_test), y_test)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.440000 precision: 0.457143 recall: 0.301887 f_measure: 0.363636
H2b = adaboost(X2, Y; t=100, wc=BeveledDecisionStumpWeakClassifier)
AdaBoost{Float64,BeveledDecisionStumpWeakClassifier{Float64}}([0.42127,0.266762,0.364579,0.400817,0.774506,0.390647,0.200814,0.31066,0.650693,0.258744 … 0.141726,0.112869,0.188389,0.221786,0.28534,0.188619,0.238433,0.149216,0.259642,0.242142],BeveledDecisionStumpWeakClassifier{Float64}[BeveledDecisionStumpWeakClassifier{Float64}([0.735133,-0.382133,0.545479,0.75314,0.878288],0.0996145),BeveledDecisionStumpWeakClassifier{Float64}([-0.952655,0.956109,0.0101454,-0.732297,-0.436182],-1.58436),BeveledDecisionStumpWeakClassifier{Float64}([0.634232,-0.097834,0.144772,0.570356,0.895949],-0.525943),BeveledDecisionStumpWeakClassifier{Float64}([0.290282,-0.276592,0.210042,-0.7153,0.637811],0.253749),BeveledDecisionStumpWeakClassifier{Float64}([-0.567198,0.107881,0.64673,-0.168472,0.513816],0.0762159),BeveledDecisionStumpWeakClassifier{Float64}([0.383315,0.465235,0.163006,-0.619165,0.286949],-0.0766442),BeveledDecisionStumpWeakClassifier{Float64}([0.3603,-0.0511096,0.841811,0.195494,0.604985],-0.10514),BeveledDecisionStumpWeakClassifier{Float64}([-0.263907,-0.0768251,-0.741945,-0.806488,0.306773],0.501245),BeveledDecisionStumpWeakClassifier{Float64}([-0.140643,0.00940239,-0.341055,0.617238,0.483662],-0.215141),BeveledDecisionStumpWeakClassifier{Float64}([-0.153656,0.564071,-0.336174,-0.0205847,0.0255132],0.338205) … BeveledDecisionStumpWeakClassifier{Float64}([0.249501,-0.121047,0.571726,-0.0323802,-0.123136],0.0151454),BeveledDecisionStumpWeakClassifier{Float64}([-0.606517,0.737305,-0.768803,-0.100056,-0.0533212],0.778517),BeveledDecisionStumpWeakClassifier{Float64}([0.652543,0.211364,-0.28572,-0.810809,0.692523],0.0175231),BeveledDecisionStumpWeakClassifier{Float64}([-0.242924,-0.126948,-0.873393,-0.162602,0.342748],-0.0108852),BeveledDecisionStumpWeakClassifier{Float64}([-0.52741,0.673114,0.654616,-0.217795,-0.11932],0.0965131),BeveledDecisionStumpWeakClassifier{Float64}([0.220801,0.688661,-0.94019,-0.239582,0.282483],-0.00929481),BeveledDecisionStumpWeakClassifier{Float64}([-0.416843,0.16899,0.254168,0.689977,0.510196],0.1328),BeveledDecisionStumpWeakClassifier{Float64}([0.543663,-0.223959,0.745619,-0.342945,-0.161663],-0.368185),BeveledDecisionStumpWeakClassifier{Float64}([0.632429,-0.962783,0.83345,-0.595019,0.461976],0.0366335),BeveledDecisionStumpWeakClassifier{Float64}([-0.417358,0.356084,-0.483637,0.474424,0.676986],-0.0851595)])
length(H2b.alpha)
100
Yd2b = H2b(X2)
1000×1 Array{Float64,2}: 1.0 1.0 1.0 1.0 -1.0 -1.0 -1.0 1.0 1.0 1.0 -1.0 -1.0 1.0 ⋮ -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 1.0 -1.0 -1.0 -1.0 1.0 -1.0
dispresult(DataFrame(x=X[:,1], y=X[:,2], c=vec(Yd2b)))
(a, p, r, f) = calc_mlmetrics(Y, Yd2b)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 1.000000 precision: 1.000000 recall: 1.000000 f_measure: 1.000000
x_test = rand(100, 2) .* 2.0 .- 1.0
x_test2 = [x_test x_test.^2 reducedim(*, x_test, 2);]
y_test = H2b(x_test2)
dispresult(DataFrame(x=x_test[:,1], y=x_test[:,2], c=vec(y_test)))
(a, p, r, f) = calc_mlmetrics(makelabels(x_test), y_test)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.990000 precision: 0.978723 recall: 1.000000 f_measure: 0.989247
H2t = adaboost(X2, Y; t=100, wc=DecisionTreeWeakClassifier, maxdepth=2)
AdaBoost{Float64,DecisionTreeWeakClassifier{Float64}}(Float64[],DecisionTreeWeakClassifier{Float64}[])
length(H2t.alpha)
0
Yd2t = H2t(X2)
1000×1 Array{Float64,2}: 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ⋮ 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
dispresult(DataFrame(x=X[:,1], y=X[:,2], c=vec(Yd2t)))
(a, p, r, f) = calc_mlmetrics(Y, Yd2t)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.496000 precision: 0.496000 recall: 1.000000 f_measure: 0.663102
x_test = rand(100, 2) .* 2.0 .- 1.0
x_test2 = [x_test x_test.^2 reducedim(*, x_test, 2);]
y_test = H2t(x_test2)
dispresult(DataFrame(x=x_test[:,1], y=x_test[:,2], c=vec(y_test)))
(a, p, r, f) = calc_mlmetrics(makelabels(x_test), y_test)
@printf("accuracy: %.06f\n", a)
@printf("precision: %.06f\n", p)
@printf("recall: %.06f\n", r)
@printf("f_measure: %.06f\n", f)
accuracy: 0.460000 precision: 0.460000 recall: 1.000000 f_measure: 0.630137
Base.gc(true);
@time adaboost(X, Y; t=1000);
0.164527 seconds (59.16 k allocations: 179.057 MB, 18.53% gc time)
Base.gc(true);
@time adaboost(X, Y; t=2000);
0.278538 seconds (118.03 k allocations: 358.083 MB, 17.43% gc time)
Base.gc(true);
@time adaboost(X, Y; t=100, wc=BeveledDecisionStumpWeakClassifier);
0.013001 seconds (6.42 k allocations: 17.183 MB)
Base.gc(true);
@time adaboost(X, Y; t=200, wc=BeveledDecisionStumpWeakClassifier);
0.029818 seconds (12.82 k allocations: 34.350 MB, 11.45% gc time)
Base.gc(true);
@time adaboost(X, Y; t=100, wc=DecisionTreeWeakClassifier);
0.037481 seconds (35.14 k allocations: 35.761 MB, 10.71% gc time)
Base.gc(true);
@time adaboost(X, Y; t=100, wc=DecisionTreeWeakClassifier, maxdepth=2);
0.038498 seconds (28.77 k allocations: 38.359 MB, 9.68% gc time)
Base.gc(true);
@time H(X);
0.022333 seconds (14.54 k allocations: 8.029 MB)
Base.gc(true);
@time H2k(X);
0.031139 seconds (14.54 k allocations: 15.659 MB)
Base.gc(true);
@time Hb(X);
0.026756 seconds (415.54 k allocations: 7.251 MB)
Base.gc(true);
@time Hb2h(X);
0.036352 seconds (815.54 k allocations: 14.224 MB)
Base.gc(true);
@time Ht(X);
0.013271 seconds (14.54 k allocations: 362.688 KB)
Base.gc(true);
@time Ht2d(X);
0.028926 seconds (298.42 k allocations: 5.464 MB)
Base.gc(true);
@time adaboost(X2, Y; t=1000);
0.000174 seconds (57 allocations: 159.828 KB)
Base.gc(true);
@time adaboost(X2, Y; t=100, wc=BeveledDecisionStumpWeakClassifier);
0.011603 seconds (6.42 k allocations: 17.196 MB)
Base.gc(true);
@time adaboost(X2, Y; t=100, wc=DecisionTreeWeakClassifier);
0.004350 seconds (1.41 k allocations: 1.579 MB)
Base.gc(true);
@time H2(X2);
0.024107 seconds (14.54 k allocations: 409.594 KB)
Base.gc(true);
@time H2b(X2);
0.033814 seconds (415.54 k allocations: 7.251 MB)
Base.gc(true);
@time H2t(X2);
0.015251 seconds (14.54 k allocations: 362.719 KB)