using Gadfly
using DataFrames
# サンプルデータ(訓練データ)生成
function makelabels{T<:AbstractFloat}(data::AbstractMatrix{T})
# 円1:中心 (0.35, 0.35), 半径 0.3 の円
x1 = 0.35; y1 = 0.35; r1 = 0.3
# 円2:中心 (0.65, 0.65), 半径 0.3 の円
x2 = 0.65; y2 = 0.65; r2 = 0.3
# 円1 と 円2 どちらかに(のみ)入っているならば 1、そうでなければ 0
chk1 = mapslices(norm, data .- [x1 y1;], 2) .<= r1
chk2 = mapslices(norm, data .- [x2 y2;], 2) .<= r2
vec(collect(T, chk1 $ chk2)) .* 2 .- 1
end
makelabels (generic function with 1 method)
# サンプルデータ(訓練データ)生成
function makedata(N::Int=1000)
data = rand(N, 2)
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.13802908031496575 | 0.4353295609752057 | 1.0 |
2 | 0.6848376769644271 | 0.6999390814116135 | 1.0 |
3 | 0.30088687872013686 | 0.2605507463869021 | 1.0 |
4 | 0.25519033610587694 | 0.3218773010054523 | 1.0 |
5 | 0.01176799737180434 | 0.596642149722441 | -1.0 |
6 | 0.7865331820073116 | 0.5976508111720376 | 1.0 |
7 | 0.2430908208418987 | 0.2928098121940439 | 1.0 |
8 | 0.4772907597206435 | 0.5489995585271881 | -1.0 |
9 | 0.28166489518800764 | 0.2423680057548503 | 1.0 |
10 | 0.7654916860864527 | 0.5190085805192981 | 1.0 |
11 | 0.42674472564916033 | 0.004565761124122547 | -1.0 |
12 | 0.9387189928494963 | 0.7353187776414656 | -1.0 |
13 | 0.5877390814945809 | 0.8301169460905176 | 1.0 |
14 | 0.6375637652722761 | 0.7324017167481105 | 1.0 |
15 | 0.6860084143377068 | 0.8098998941095785 | 1.0 |
16 | 0.9446814487088795 | 0.5894182364749894 | -1.0 |
17 | 0.6724831461059018 | 0.8592276689835598 | 1.0 |
18 | 0.26294836992247617 | 0.3011724661480162 | 1.0 |
19 | 0.7259015952798582 | 0.4279932547754397 | 1.0 |
20 | 0.6309908866707372 | 0.40264135297185777 | -1.0 |
21 | 0.004084901539616936 | 0.1358013259678461 | -1.0 |
22 | 0.07564550540277559 | 0.53674062533615 | -1.0 |
23 | 0.762364714334919 | 0.8136609651844511 | 1.0 |
24 | 0.05457053631489872 | 0.5390668253665398 | -1.0 |
25 | 0.05076720112494737 | 0.4711747557038135 | -1.0 |
26 | 0.36329234813443967 | 0.7788782003620567 | -1.0 |
27 | 0.021249596968610618 | 0.9816065201497577 | -1.0 |
28 | 0.2460240285930151 | 0.3497247976448654 | 1.0 |
29 | 0.5596867814773288 | 0.9591635799088474 | -1.0 |
30 | 0.7585659033147849 | 0.5509312057238092 | 1.0 |
⋮ | ⋮ | ⋮ | ⋮ |
function circlelayer(x::Float64, y::Float64, r::Float64)
r0to2pi = linspace(0, 2pi, 400)
layer(x=x.+r.*cos(r0to2pi), y=y.+r.*sin(r0to2pi), Geom.path, Theme(default_color=colorant"black"))
end
circlelayer (generic function with 1 method)
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(
layer(data, x=:x, y=:y, color=:c, Geom.point),
circlelayer(0.35, 0.35, 0.3),
circlelayer(0.65, 0.65, 0.3),
colscale
)
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.138029 0.43533 0.684838 0.699939 0.300887 0.260551 0.25519 0.321877 0.011768 0.596642 0.786533 0.597651 0.243091 0.29281 0.477291 0.549 0.281665 0.242368 0.765492 0.519009 0.426745 0.00456576 0.938719 0.735319 0.587739 0.830117 ⋮ 0.519501 0.65611 0.3323 0.585928 0.640555 0.18884 0.384108 0.069849 0.750183 0.609426 0.420063 0.832302 0.555256 0.904872 0.367445 0.0138979 0.347281 0.106296 0.240702 0.569877 0.692887 0.000169444 0.271485 0.37261
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.126673,0.183884,0.198751,0.146128,0.200682,0.120774,0.202779,0.150375,0.171024,0.113108 … 0.0138823,0.0159883,0.0152787,0.0158334,0.0154644,0.0158228,0.0157422,0.0153517,0.0151196,0.0172785],DecisionStumpWeakClassifier{Float64}[DecisionStumpWeakClassifier{Float64}(1,-1.0,0.762468),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.000990108),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.848222),DecisionStumpWeakClassifier{Float64}(2,1.0,0.999405),DecisionStumpWeakClassifier{Float64}(1,1.0,0.227507),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.00364913),DecisionStumpWeakClassifier{Float64}(2,1.0,0.136911),DecisionStumpWeakClassifier{Float64}(2,1.0,0.999405),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.846083),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.000990108) … DecisionStumpWeakClassifier{Float64}(2,-1.0,0.519751),DecisionStumpWeakClassifier{Float64}(2,1.0,0.482658),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.519751),DecisionStumpWeakClassifier{Float64}(2,1.0,0.523201),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.497557),DecisionStumpWeakClassifier{Float64}(1,1.0,0.504838),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.519751),DecisionStumpWeakClassifier{Float64}(2,1.0,0.523201),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.519751),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.500018)])
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}: 360.0 105.0 78.0 457.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.817000 precision: 0.774194 recall: 0.821918 f_measure: 0.797342
x_test = rand(100, 2)
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.720000 precision: 0.638298 recall: 0.731707 f_measure: 0.681818
# H = adaboost(X, Y; t=1000)
H2k = adaboost(X, Y; t=2000)
AdaBoost{Float64,DecisionStumpWeakClassifier{Float64}}([0.126673,0.184413,0.199258,0.145876,0.201264,0.120437,0.201331,0.15098,0.172706,0.113973 … 0.0157336,0.0138101,0.0143519,0.0120524,0.0145454,0.0134934,0.0136063,0.0136723,0.0134157,0.0133893],DecisionStumpWeakClassifier{Float64}[DecisionStumpWeakClassifier{Float64}(1,-1.0,0.762468),DecisionStumpWeakClassifier{Float64}(1,1.0,0.999198),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.848222),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.00364913),DecisionStumpWeakClassifier{Float64}(1,1.0,0.227507),DecisionStumpWeakClassifier{Float64}(2,1.0,0.999405),DecisionStumpWeakClassifier{Float64}(2,1.0,0.136911),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.00364913),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.846083),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.000990108) … DecisionStumpWeakClassifier{Float64}(2,1.0,0.121428),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.108093),DecisionStumpWeakClassifier{Float64}(2,1.0,0.344154),DecisionStumpWeakClassifier{Float64}(1,1.0,0.559916),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.660917),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.379686),DecisionStumpWeakClassifier{Float64}(1,1.0,0.376669),DecisionStumpWeakClassifier{Float64}(2,1.0,0.679683),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.752793),DecisionStumpWeakClassifier{Float64}(1,1.0,0.757935)])
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}: 376.0 87.0 62.0 475.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.851000 precision: 0.812095 recall: 0.858447 f_measure: 0.834628
x_test = rand(100, 2)
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.750000 precision: 0.711111 recall: 0.727273 f_measure: 0.719101
include("beveleddecisionstumpweakclassifier.jl")
# H = adaboost(X, Y; t=1000)
Hb = adaboost(X, Y; t=100, wc=BeveledDecisionStumpWeakClassifier)
AdaBoost{Float64,BeveledDecisionStumpWeakClassifier{Float64}}([0.227863,0.269189,0.380107,0.262007,0.144673,0.184599,0.18989,0.224274,0.264035,0.126219 … 0.132065,0.151602,0.150435,0.116225,0.143321,0.112473,0.134401,0.101216,0.141792,0.196825],BeveledDecisionStumpWeakClassifier{Float64}[BeveledDecisionStumpWeakClassifier{Float64}([0.450035,-0.315833],0.0762724),BeveledDecisionStumpWeakClassifier{Float64}([-0.756471,-0.140787],0.0220263),BeveledDecisionStumpWeakClassifier{Float64}([-0.630259,0.599081],0.256339),BeveledDecisionStumpWeakClassifier{Float64}([0.791457,-0.0606314],-0.777175),BeveledDecisionStumpWeakClassifier{Float64}([-0.611369,-0.484396],0.908208),BeveledDecisionStumpWeakClassifier{Float64}([-0.800393,-0.77496],0.680599),BeveledDecisionStumpWeakClassifier{Float64}([-0.236325,0.855115],-0.124469),BeveledDecisionStumpWeakClassifier{Float64}([0.641901,-0.359334],-0.0149322),BeveledDecisionStumpWeakClassifier{Float64}([0.659198,-0.693769],-0.615891),BeveledDecisionStumpWeakClassifier{Float64}([0.344335,0.590051],-0.530025) … BeveledDecisionStumpWeakClassifier{Float64}([-0.659335,0.844097],0.195213),BeveledDecisionStumpWeakClassifier{Float64}([0.877589,-0.849664],-0.820801),BeveledDecisionStumpWeakClassifier{Float64}([0.772709,0.815055],-0.300709),BeveledDecisionStumpWeakClassifier{Float64}([0.895039,-0.0372343],-0.885449),BeveledDecisionStumpWeakClassifier{Float64}([-0.606539,-0.392208],0.818688),BeveledDecisionStumpWeakClassifier{Float64}([0.731096,0.991786],-1.68639),BeveledDecisionStumpWeakClassifier{Float64}([-0.765389,0.4487],0.417863),BeveledDecisionStumpWeakClassifier{Float64}([0.623601,-0.995912],-0.57866),BeveledDecisionStumpWeakClassifier{Float64}([0.375398,0.245481],-0.350293),BeveledDecisionStumpWeakClassifier{Float64}([-0.923576,0.14257],0.756923)])
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: 0.982000 precision: 0.970852 recall: 0.988584 f_measure: 0.979638
x_test = rand(100, 2)
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: 0.900000 precision: 0.865385 recall: 0.937500 f_measure: 0.900000
# Hb = adaboost(X, Y; t=100, wc=BeveledDecisionStumpWeakClassifier)
Hb2h = adaboost(X, Y; t=200, wc=BeveledDecisionStumpWeakClassifier)
AdaBoost{Float64,BeveledDecisionStumpWeakClassifier{Float64}}([0.124641,0.154802,0.167023,0.253209,0.148339,0.227978,0.162521,0.169714,0.402105,0.226744 … 0.15466,0.145125,0.127252,0.109168,0.0648289,0.0819626,0.108194,0.10652,0.110817,0.116678],BeveledDecisionStumpWeakClassifier{Float64}[BeveledDecisionStumpWeakClassifier{Float64}([-0.478372,-0.278113],0.257007),BeveledDecisionStumpWeakClassifier{Float64}([0.783174,0.553283],-0.757174),BeveledDecisionStumpWeakClassifier{Float64}([-0.720918,-0.572919],0.581256),BeveledDecisionStumpWeakClassifier{Float64}([-0.343299,0.977297],-0.0782955),BeveledDecisionStumpWeakClassifier{Float64}([-0.865098,-0.764268],0.0599685),BeveledDecisionStumpWeakClassifier{Float64}([0.00688204,-0.621215],0.523158),BeveledDecisionStumpWeakClassifier{Float64}([0.0724295,0.343116],-0.407869),BeveledDecisionStumpWeakClassifier{Float64}([0.507313,0.653406],-0.671847),BeveledDecisionStumpWeakClassifier{Float64}([0.354311,-0.280665],0.0862375),BeveledDecisionStumpWeakClassifier{Float64}([-0.43019,0.399087],-0.389196) … BeveledDecisionStumpWeakClassifier{Float64}([0.683941,-0.750248],0.311314),BeveledDecisionStumpWeakClassifier{Float64}([-0.351261,-0.163785],0.0175526),BeveledDecisionStumpWeakClassifier{Float64}([-0.942368,0.823504],0.400437),BeveledDecisionStumpWeakClassifier{Float64}([-0.147152,-0.957108],0.448141),BeveledDecisionStumpWeakClassifier{Float64}([-0.818323,0.641102],-0.0599383),BeveledDecisionStumpWeakClassifier{Float64}([0.122263,-0.46985],0.351242),BeveledDecisionStumpWeakClassifier{Float64}([0.466598,0.922725],-0.792732),BeveledDecisionStumpWeakClassifier{Float64}([-0.482058,-0.741391],0.549455),BeveledDecisionStumpWeakClassifier{Float64}([0.748427,0.749005],-0.825066),BeveledDecisionStumpWeakClassifier{Float64}([0.741634,-0.719807],0.294412)])
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: 0.998000 precision: 0.997717 recall: 0.997717 f_measure: 0.997717
x_test = rand(100, 2)
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: 1.000000 recall: 0.975610 f_measure: 0.987654
include("decisiontreeweakclassifier.jl")
# H = adaboost(X, Y; t=1000)
Ht = adaboost(X, Y; t=100, wc=DecisionTreeWeakClassifier)
AdaBoost{Float64,DecisionTreeWeakClassifier{Float64}}([0.546643,0.464922,0.305862,0.4624,0.481635,0.334716,0.40094,0.244785,0.504973,0.46557 … 0.182152,0.1352,0.294301,0.169851,0.138665,0.155957,0.158534,0.208696,0.206729,0.166062],DecisionTreeWeakClassifier{Float64}[DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.762468,DTreeNode{Float64}(1.0,2,0.536624,DTreeNode{Float64}(1.0,1,0.0680811,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,1,0.435899,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0))),DTreeNode{Float64}(-1.0,1,0.788773,DTreeNode{Float64}(1.0,1,0.772182,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.234827,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,1,0.227507,DTreeNode{Float64}(-1.0,2,0.529012,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,1,0.921114,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.862774,DTreeNode{Float64}(1.0,1,0.135566,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,2,0.0859017,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0))),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.395195,DTreeNode{Float64}(1.0,1,0.0616509,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,2,0.606575,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.578721,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,1,0.380567,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,1,0.942777,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.942777,DTreeNode{Float64}(1.0,2,0.904878,DTreeNode{Float64}(1.0,1,0.0616509,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.609045,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,2,0.83427,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.559916,DTreeNode{Float64}(-1.0,1,0.361893,DTreeNode{Float64}(1.0,2,0.613853,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(-1.0,2,0.380581,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))),DTreeNode{Float64}(1.0,1,0.897104,DTreeLeaf{Float64}(1.0),DTreeNode{Float64}(-1.0,2,0.558259,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.474638,DTreeNode{Float64}(-1.0,1,0.468203,DTreeNode{Float64}(1.0,2,0.120843,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.930223,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))) … DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.358673,DTreeNode{Float64}(1.0,2,0.613853,DTreeNode{Float64}(1.0,2,0.122543,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(-1.0,1,0.882852,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,2,0.799286,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.934334,DTreeNode{Float64}(1.0,2,0.0646134,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,1,0.876703,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.504838,DTreeNode{Float64}(-1.0,2,0.710763,DTreeNode{Float64}(-1.0,2,0.417557,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.847135,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))),DTreeNode{Float64}(1.0,2,0.472396,DTreeNode{Float64}(-1.0,1,0.530211,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.935935,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.363421,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,2,0.465356,DTreeNode{Float64}(1.0,2,0.106851,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,1,0.371273,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.185766,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,2,0.253374,DTreeNode{Float64}(-1.0,2,0.171452,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.934334,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.784149,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,2,0.904878,DTreeNode{Float64}(1.0,1,0.419584,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,2,0.920725,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.124493,DTreeNode{Float64}(-1.0,2,0.0518638,DTreeNode{Float64}(1.0,2,0.0516601,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.904878,DTreeLeaf{Float64}(1.0),DTreeNode{Float64}(-1.0,2,0.920725,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.519751,DTreeNode{Float64}(1.0,1,0.429619,DTreeNode{Float64}(1.0,1,0.0563214,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,1,0.558911,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0))),DTreeNode{Float64}(-1.0,2,0.784149,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,1,0.752905,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.407747,DTreeNode{Float64}(1.0,1,0.182278,DTreeNode{Float64}(-1.0,1,0.103775,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,2,0.622384,DTreeNode{Float64}(-1.0,2,0.171452,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,2,0.85134,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0))))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.349122,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,2,0.602707,DTreeNode{Float64}(1.0,1,0.631547,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,2,0.861069,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))))])
length(Ht.alpha)
100
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: 1.000000 precision: 1.000000 recall: 1.000000 f_measure: 1.000000
x_test = rand(100, 2)
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.940000 precision: 0.923077 recall: 0.923077 f_measure: 0.923077
# H = adaboost(X, Y; t=1000)
Ht2d = adaboost(X, Y; t=100, wc=DecisionTreeWeakClassifier, maxdepth=2)
AdaBoost{Float64,DecisionTreeWeakClassifier{Float64}}([0.296384,0.406579,0.170466,0.338521,0.169196,0.248967,0.166573,0.173025,0.12862,0.229637 … 0.181523,0.163949,0.115139,0.111071,0.0563302,0.236632,0.203825,0.158653,0.211486,0.210477],DecisionTreeWeakClassifier{Float64}[DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.762468,DTreeNode{Float64}(1.0,2,0.536624,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.234827,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,1,0.227507,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.846083,DTreeNode{Float64}(1.0,2,0.894745,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.136911,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,1,0.919764,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.135566,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,1,0.932049,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.848222,DTreeNode{Float64}(1.0,2,0.0859017,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))) … DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.710692,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,1,0.356543,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.756482,DTreeNode{Float64}(1.0,1,0.0614244,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,1,0.383296,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.0861836,DTreeNode{Float64}(1.0,2,0.261262,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.871277,DTreeNode{Float64}(1.0,2,0.120843,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.391274,DTreeNode{Float64}(1.0,2,0.632685,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(-1.0,2,0.622384,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.801524,DTreeNode{Float64}(1.0,1,0.2014,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.720382,DTreeNode{Float64}(-1.0,2,0.380581,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,1,0.899682,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.306231,DTreeNode{Float64}(1.0,2,0.223085,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,2,0.609045,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.602707,DTreeNode{Float64}(1.0,2,0.121428,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0)))])
length(Ht2d.alpha)
100
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: 0.966000 precision: 0.957014 recall: 0.965753 f_measure: 0.961364
x_test = rand(100, 2)
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: 0.960000 precision: 0.980392 recall: 0.943396 f_measure: 0.961538
X2 = [X X.^2 reducedim(*, X, 2);]
1000×5 Array{Float64,2}: 0.138029 0.43533 0.019052 0.189512 0.0600881 0.684838 0.699939 0.469003 0.489915 0.479345 0.300887 0.260551 0.0905329 0.0678867 0.0783963 0.25519 0.321877 0.0651221 0.103605 0.08214 0.011768 0.596642 0.000138486 0.355982 0.00702128 0.786533 0.597651 0.618634 0.357186 0.470072 0.243091 0.29281 0.0590931 0.0857376 0.0711794 0.477291 0.549 0.227806 0.301401 0.262032 0.281665 0.242368 0.0793351 0.0587423 0.0682666 0.765492 0.519009 0.585978 0.26937 0.397297 0.426745 0.00456576 0.182111 2.08462e-5 0.00194841 0.938719 0.735319 0.881193 0.540694 0.690258 0.587739 0.830117 0.345437 0.689094 0.487892 ⋮ 0.519501 0.65611 0.269881 0.43048 0.34085 0.3323 0.585928 0.110423 0.343311 0.194704 0.640555 0.18884 0.410311 0.0356605 0.120962 0.384108 0.069849 0.147539 0.00487889 0.0268295 0.750183 0.609426 0.562774 0.3714 0.457181 0.420063 0.832302 0.176453 0.692726 0.349619 0.555256 0.904872 0.308309 0.818793 0.502435 0.367445 0.0138979 0.135016 0.00019315 0.0051067 0.347281 0.106296 0.120604 0.0112987 0.0369144 0.240702 0.569877 0.0579376 0.324759 0.137171 0.692887 0.000169444 0.480093 2.87114e-8 0.000117406 0.271485 0.37261 0.0737041 0.138839 0.101158
H2 = adaboost(X2, Y; t=1000)
AdaBoost{Float64,DecisionStumpWeakClassifier{Float64}}([0.122611,0.194419,0.305289,0.273634,0.207374,0.162089,0.164801,0.228659,0.171924,0.186466 … 0.054828,0.0389183,0.031532,0.0317646,0.0396393,0.0696399,0.0485607,0.0298008,0.0504553,0.0454634],DecisionStumpWeakClassifier{Float64}[DecisionStumpWeakClassifier{Float64}(2,1.0,0.999405),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.80149),DecisionStumpWeakClassifier{Float64}(5,1.0,0.302718),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.83427),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.000990108),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.894741),DecisionStumpWeakClassifier{Float64}(5,1.0,0.36853),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.762468),DecisionStumpWeakClassifier{Float64}(2,1.0,0.999405),DecisionStumpWeakClassifier{Float64}(5,1.0,0.021582) … DecisionStumpWeakClassifier{Float64}(1,-1.0,0.893436),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.468341),DecisionStumpWeakClassifier{Float64}(2,1.0,0.470159),DecisionStumpWeakClassifier{Float64}(4,-1.0,0.363256),DecisionStumpWeakClassifier{Float64}(3,-1.0,0.218991),DecisionStumpWeakClassifier{Float64}(5,1.0,0.376437),DecisionStumpWeakClassifier{Float64}(1,-1.0,0.875015),DecisionStumpWeakClassifier{Float64}(1,1.0,0.720382),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.809094),DecisionStumpWeakClassifier{Float64}(2,-1.0,0.000990108)])
length(H2.alpha)
1000
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.993000 precision: 0.993135 recall: 0.990868 f_measure: 0.992000
x_test = rand(100, 2)
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.960000 precision: 0.975610 recall: 0.930233 f_measure: 0.952381
H2b = adaboost(X2, Y; t=100, wc=BeveledDecisionStumpWeakClassifier)
AdaBoost{Float64,BeveledDecisionStumpWeakClassifier{Float64}}([0.159335,0.23638,0.360957,0.247396,0.241499,0.190428,0.195355,0.129226,0.26804,0.242218 … 0.0865404,0.13893,0.115108,0.100041,0.122671,0.143411,0.105315,0.144524,0.152164,0.148596],BeveledDecisionStumpWeakClassifier{Float64}[BeveledDecisionStumpWeakClassifier{Float64}([-0.0898363,-0.0984613,0.298155,-0.164811,0.546666],0.0490554),BeveledDecisionStumpWeakClassifier{Float64}([-0.774439,0.798653,-0.373458,-0.673074,0.322265],-0.231379),BeveledDecisionStumpWeakClassifier{Float64}([-0.786308,0.973275,-0.668441,-0.00373121,0.857337],0.382217),BeveledDecisionStumpWeakClassifier{Float64}([-0.661863,0.885422,-0.849273,-0.959572,-0.20202],-0.196516),BeveledDecisionStumpWeakClassifier{Float64}([0.33886,0.414713,0.916069,-0.568051,0.353994],-0.112764),BeveledDecisionStumpWeakClassifier{Float64}([-0.236202,0.260232,0.342911,-0.853748,-0.307163],-0.0857382),BeveledDecisionStumpWeakClassifier{Float64}([0.0324052,-0.160583,-0.361125,-0.921858,-0.215307],1.00474),BeveledDecisionStumpWeakClassifier{Float64}([0.524818,-0.577985,-0.758085,0.786391,0.848499],-0.826476),BeveledDecisionStumpWeakClassifier{Float64}([0.220682,0.585777,-0.594339,0.837317,-0.416003],-0.0248653),BeveledDecisionStumpWeakClassifier{Float64}([-0.217856,0.076565,-0.0911752,-0.7451,-0.886577],0.394442) … BeveledDecisionStumpWeakClassifier{Float64}([-0.258583,0.226185,-0.821051,-0.689908,0.570478],0.762697),BeveledDecisionStumpWeakClassifier{Float64}([-0.860546,0.817614,0.581686,0.460937,0.196398],-1.25043),BeveledDecisionStumpWeakClassifier{Float64}([0.485176,0.199162,-0.0244034,-0.777111,-0.832733],0.676071),BeveledDecisionStumpWeakClassifier{Float64}([-0.515492,0.155565,-0.37453,-0.0515174,-0.853974],-0.0884028),BeveledDecisionStumpWeakClassifier{Float64}([-0.223427,-0.318815,-0.845311,-0.0157098,0.89561],0.587579),BeveledDecisionStumpWeakClassifier{Float64}([-0.318455,-0.827344,0.837137,0.25157,0.957694],-0.0322898),BeveledDecisionStumpWeakClassifier{Float64}([-0.505096,0.59816,0.0677059,-0.90089,-0.50726],0.227409),BeveledDecisionStumpWeakClassifier{Float64}([0.91344,0.850214,0.0845097,0.0831163,0.613408],-0.411828),BeveledDecisionStumpWeakClassifier{Float64}([0.617818,-0.231108,-0.989376,0.226134,0.258536],-0.0955463),BeveledDecisionStumpWeakClassifier{Float64}([-0.444407,0.749049,-0.227155,-0.765687,0.949894],-0.188975)])
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: 0.992000 precision: 0.997685 recall: 0.984018 f_measure: 0.990805
x_test = rand(100, 2)
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.930000 precision: 0.891892 recall: 0.916667 f_measure: 0.904110
H2t = adaboost(X2, Y; t=100, wc=DecisionTreeWeakClassifier, maxdepth=2)
AdaBoost{Float64,DecisionTreeWeakClassifier{Float64}}([0.124641,0.374171,0.324139,0.47206,0.33933,0.243661,0.197258,0.473691,0.194491,0.233596 … 0.184602,0.241184,0.099958,0.144403,0.0954129,0.191675,0.117428,0.152962,0.10933,0.172379],DecisionTreeWeakClassifier{Float64}[DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,3,0.642388,DTreeNode{Float64}(1.0,3,0.0517605,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,5,0.302718,DTreeLeaf{Float64}(-1.0),DTreeNode{Float64}(1.0,5,0.732383,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.83427,DTreeNode{Float64}(1.0,5,0.0179964,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.311103,DTreeNode{Float64}(1.0,3,0.00590383,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.897104,DTreeNode{Float64}(1.0,4,0.0166478,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,5,0.36853,DTreeNode{Float64}(-1.0,2,0.517918,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(1.0,4,0.87298,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,3,0.566701,DTreeNode{Float64}(1.0,3,0.0183782,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))) … DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,4,0.154,DTreeNode{Float64}(1.0,3,0.401509,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.848222,DTreeNode{Float64}(1.0,5,0.0179964,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,5,0.378548,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.875015,DTreeNode{Float64}(1.0,5,0.254079,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,2,0.496095,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,1,0.844019,DTreeNode{Float64}(1.0,3,0.00380088,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,5,0.204523,DTreeNode{Float64}(1.0,4,0.391415,DTreeLeaf{Float64}(1.0),DTreeLeaf{Float64}(-1.0)),DTreeNode{Float64}(-1.0,1,0.622979,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeLeaf{Float64}(-1.0)),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,3,0.386533,DTreeNode{Float64}(1.0,1,0.173241,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,3,0.180544,DTreeNode{Float64}(1.0,3,0.049349,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeNode{Float64}(-1.0,4,0.230972,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)))),DecisionTreeWeakClassifier{Float64}(DTreeNode{Float64}(1.0,2,0.764569,DTreeNode{Float64}(1.0,2,0.121428,DTreeLeaf{Float64}(-1.0),DTreeLeaf{Float64}(1.0)),DTreeLeaf{Float64}(-1.0)))])
length(H2t.alpha)
100
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.997000 precision: 0.997712 recall: 0.995434 f_measure: 0.996571
x_test = rand(100, 2)
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.960000 precision: 0.975000 recall: 0.928571 f_measure: 0.951220
Base.gc(true);
@time adaboost(X, Y; t=1000);
0.173937 seconds (59.16 k allocations: 179.057 MB, 22.12% gc time)
Base.gc(true);
@time adaboost(X, Y; t=2000);
0.324151 seconds (118.03 k allocations: 358.083 MB, 16.43% gc time)
Base.gc(true);
@time adaboost(X, Y; t=100, wc=BeveledDecisionStumpWeakClassifier);
0.013637 seconds (6.42 k allocations: 17.183 MB)
Base.gc(true);
@time adaboost(X, Y; t=200, wc=BeveledDecisionStumpWeakClassifier);
0.030205 seconds (12.82 k allocations: 34.350 MB, 11.57% gc time)
Base.gc(true);
@time adaboost(X, Y; t=100, wc=DecisionTreeWeakClassifier);
0.050829 seconds (42.65 k allocations: 46.169 MB, 15.03% gc time)
Base.gc(true);
@time adaboost(X, Y; t=100, wc=DecisionTreeWeakClassifier, maxdepth=2);
0.059504 seconds (20.55 k allocations: 31.923 MB, 13.18% gc time)
Base.gc(true);
@time H(X);
0.025561 seconds (14.54 k allocations: 8.029 MB)
Base.gc(true);
@time H2k(X);
0.029515 seconds (14.54 k allocations: 15.659 MB)
Base.gc(true);
@time Hb(X);
0.028651 seconds (415.54 k allocations: 7.251 MB)
Base.gc(true);
@time Hb2h(X);
0.038001 seconds (815.54 k allocations: 14.224 MB)
Base.gc(true);
@time Ht(X);
0.032033 seconds (341.59 k allocations: 6.123 MB)
Base.gc(true);
@time Ht2d(X);
0.037214 seconds (255.19 k allocations: 4.804 MB)
Base.gc(true);
@time adaboost(X2, Y; t=1000);
0.140243 seconds (59.03 k allocations: 179.050 MB, 16.74% gc time)
Base.gc(true);
@time adaboost(X2, Y; t=100, wc=BeveledDecisionStumpWeakClassifier);
0.013862 seconds (6.42 k allocations: 17.196 MB)
Base.gc(true);
@time adaboost(X2, Y; t=100, wc=DecisionTreeWeakClassifier, maxdepth=2);
0.031695 seconds (22.11 k allocations: 36.466 MB, 11.89% gc time)
Base.gc(true);
@time H2(X2);
0.023476 seconds (14.54 k allocations: 8.029 MB)
Base.gc(true);
@time H2b(X2);
0.028635 seconds (415.54 k allocations: 7.251 MB)
Base.gc(true);
@time H2t(X2);
0.028823 seconds (257.78 k allocations: 4.844 MB)