Skip to content

Commit

Permalink
Support aggregated metrics, coverage, and novelty in CV
Browse files Browse the repository at this point in the history
Same set of supported metrics as `evaluate()`
  • Loading branch information
takuti committed Nov 25, 2022
1 parent 2eaefd8 commit 47fcaed
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions src/evaluation/cross_validation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,28 @@ export cross_validation, leave_one_out
"""
cross_validation(
n_folds::Integer,
metric::RankingMetric,
metric::Union{RankingMetric, AggregatedMetric, Coverage, Novelty},
topk::Integer,
recommender_type::Type{<:Recommender},
data::DataAccessor,
recommender_args...
recommender_args...;
allow_repeat::Bool=false
)
Conduct `n_folds` cross validation for a combination of recommender `recommender_type` and ranking metric `metric`. A recommender is initialized with `recommender_args` and runs top-`k` recommendation.
"""
function cross_validation(n_folds::Integer, metric::RankingMetric, topk::Integer, recommender_type::Type{<:Recommender}, data::DataAccessor, recommender_args...)
function cross_validation(n_folds::Integer, metric::Metric, topk::Integer, recommender_type::Type{<:Recommender}, data::DataAccessor, recommender_args...; allow_repeat=false)
cross_validation(n_folds, [metric], topk, recommender_type, data, recommender_args...)[1]
end

function cross_validation(n_folds::Integer, metrics::AbstractVector{T}, topk::Integer,
recommender_type::Type{<:Recommender}, data::DataAccessor, recommender_args...
) where T<:RankingMetric
recommender_type::Type{<:Recommender}, data::DataAccessor, recommender_args...; allow_repeat::Bool=false
) where T<:Metric
accum_accuracy = zeros(length(metrics))
for (train_data, truth_data) in split_data(data, n_folds)
recommender = recommender_type(train_data, recommender_args...)
fit!(recommender)
accum_accuracy += evaluate(recommender, truth_data, metrics, topk)
accum_accuracy += evaluate(recommender, truth_data, metrics, topk; allow_repeat=allow_repeat)
end
accum_accuracy / n_folds
end
Expand Down

0 comments on commit 47fcaed

Please sign in to comment.