11abstract type AbstractBinningAlgorithm end
22
3- mutable struct Bin{T<: Real }
3+ mutable struct Bin{T}
44 """ Number of samples."""
55 nsamples:: Int
66 """ Mean of predictions."""
7- mean_predictions:: Vector{T}
7+ mean_predictions:: T
88 """ Proportions of targets."""
9- proportions_targets:: Vector{T}
9+ proportions_targets:: T
1010
1111 function Bin {T} (
12- nsamples:: Int , mean_predictions:: Vector{T} , proportions_targets:: Vector{T}
13- ) where {T}
12+ nsamples:: Int , mean_predictions:: T , proportions_targets:: T
13+ ) where {T<: Real }
14+ nsamples ≥ 0 || throw (ArgumentError (" the number of samples must be non-negative" ))
15+ return new {T} (nsamples, mean_predictions, proportions_targets)
16+ end
17+
18+ function Bin {T} (
19+ nsamples:: Int , mean_predictions:: T , proportions_targets:: T
20+ ) where {T<: AbstractVector{<:Real} }
1421 nsamples ≥ 0 || throw (ArgumentError (" the number of samples must be non-negative" ))
1522 nclasses = length (mean_predictions)
1623 nclasses > 1 || throw (ArgumentError (" the number of classes must be greater than 1" ))
@@ -24,9 +31,7 @@ mutable struct Bin{T<:Real}
2431 end
2532end
2633
27- function Bin (
28- nsamples:: Int , mean_predictions:: Vector{T} , proportions_targets:: Vector{T}
29- ) where {T<: Real }
34+ function Bin (nsamples:: Int , mean_predictions:: T , proportions_targets:: T ) where {T}
3035 return Bin {T} (nsamples, mean_predictions, proportions_targets)
3136end
3237
3540
3641Create bin of `predictions` and corresponding `targets`.
3742"""
43+ function Bin (predictions:: AbstractVector{<:Real} , targets:: AbstractVector{Bool} )
44+ # compute mean of predictions
45+ mean_predictions = mean (predictions)
46+
47+ # compute proportion of targets
48+ proportions_targets = mean (targets)
49+
50+ return Bin (length (predictions), mean_predictions, proportions_targets)
51+ end
3852function Bin (
3953 predictions:: AbstractVector{<:AbstractVector{<:Real}} ,
4054 targets:: AbstractVector{<:Integer} ,
@@ -44,16 +58,26 @@ function Bin(
4458
4559 # compute proportion of targets
4660 nclasses = length (predictions[1 ])
47- proportions_targets = proportions (targets, nclasses)
61+ proportions_targets = StatsBase . proportions (targets, nclasses)
4862
4963 return Bin (length (predictions), mean_predictions, proportions_targets)
5064end
5165
5266"""
5367 Bin(prediction, target)
5468
55- Create bin of a signle `prediction` and corresponding `target`.
69+ Create bin of a single `prediction` and corresponding `target`.
5670"""
71+ function Bin (prediction:: Real , target:: Bool )
72+ # compute mean of predictions
73+ mean_predictions = prediction / 1
74+
75+ # compute proportion of targets
76+ proportions_targets = target / 1
77+
78+ return Bin (1 , mean_predictions, proportions_targets)
79+ end
80+
5781function Bin (prediction:: AbstractVector{<:Real} , target:: Integer )
5882 # compute mean of predictions
5983 mean_predictions = prediction ./ 1
7397Update running statistics of the `bin` by integrating one additional pair of `prediction`s
7498and `target`.
7599"""
100+ function adddata! (bin:: Bin , prediction:: Real , target:: Bool )
101+ @unpack mean_predictions, proportions_targets = bin
102+
103+ # update number of samples
104+ nsamples = (bin. nsamples += 1 )
105+
106+ # update mean of predictions
107+ mean_predictions += (prediction - mean_predictions) / nsamples
108+ bin. mean_predictions = mean_predictions
109+
110+ # update proportions of targets
111+ proportions_targets += (target - proportions_targets) / nsamples
112+ bin. proportions_targets = proportions_targets
113+
114+ return nothing
115+ end
76116function adddata! (bin:: Bin , prediction:: AbstractVector{<:Real} , target:: Integer )
77117 @unpack mean_predictions, proportions_targets = bin
78118
0 commit comments