Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[Lane 2 · kotlin-core] Precision/Recall/F1 — Averaging enum + internal ConfusionMatrixAccumulator

Aperta
#1,226 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
Mezza giornata
Idoneità per principianti
48/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
kotlin

Direzione di ricerca

First read Accuracy.kt, the helpers from #1225, and the contract decisions in #1224; this issue is blocked on both. Implement the public Averaging enum and the internal accumulator and reducer in sk.ainet.lang.nn.metrics, then test the reducer’s modes and zero-division case. Run ./gradlew :skainet-lang:skainet-lang-core:apiDump; done means the API dump adds Averaging only and the fixture produces the specified counts.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

coding size:s skill:kotlin-core sub-issue training

Sub-issue of #1222 (Precision, Recall and F1Score metrics).

Lane: 2 · Kotlin core
Skill needed: Kotlin; read Accuracy.kt and the helpers from #1225 first.
Size: s (~3–4 h)
Blocked by: #1225 (helpers) and the contract decisions from #1224 (zero-division, macro class set, binary mode).

What to do

  1. Add public enum class Averaging { BINARY, MACRO, MICRO } in
    sk.ainet.lang.nn.metrics (own file, KDoc on each value — this is public API).
    Semantics per #1224; the working definitions are:
    • BINARY — report class 1 (the positive class) only; requires ≤ 2 classes;
    • MACRO — unweighted mean of the per-class value over the class set decided in #1224;
    • MICRO — pool TP / FP / FN over all classes, then apply the formula once.
  2. Add internal class ConfusionMatrixAccumulator(dim: Int = -1, threshold: Float? = null)
    with
    • fun <T : DType, V> update(predictions: Tensor<T, V>, targets: Tensor<out DType, *>)
      — walks every sample via the #1225 helper and increments per-class tp / fp / fn
      (Long counters keyed by class index; a wrong prediction is one FP for the predicted
      class and one FN for the target class);
    • fun counts(): Map<Int, ClassCounts> (a small internal data class ClassCounts(tp, fp, fn));
    • fun reset().
  3. Add internal fun reduce(counts, averaging, perClass: (tp: Long, fp: Long, fn: Long) -> Double): Double
    implementing the three averaging modes and the zero-division convention from #1224
    in one place, so Precision, Recall and F1Score each contribute only a formula.
  4. Tests: the accumulator is internal to skainet-lang-core, and the metric tests live
    in skainet-backend-cpu (they need DirectCpuExecutionContext to build tensors). Two
    options — pick one and say which in the PR:
    • test it through Precision / Recall in #1227 / #1228 (then this PR ships
      with a reduce() unit test only, which needs no tensors), or
    • put an accumulator test in skainet-lang-core's commonTest, building tensors with
      DenseTensorDataFactory().fromFloatArray(...) + SimpleTensor(...) the way
      OperationExecutor.createTensor does.
  5. ./gradlew :skainet-lang:skainet-lang-core:apiDump — the dump gains Averaging and
    nothing else.

Acceptance

  • Averaging public, documented, in the API dump
  • ConfusionMatrixAccumulator + reduce() internal, no public surface
  • reduce() tested for macro / micro / binary and the zero-division case
  • Reference fixture from #1224 (pred [2,0,1,2], target [2,1,1,0]) yields counts
    {0: (0,1,1), 1: (1,0,1), 2: (1,1,0)} as (tp, fp, fn)

Notes

Don't build Precision / Recall / F1Score here even though it's tempting — they are
separate good first issues (#1227, #1228, #1229) precisely so three people can each
ship one small PR against this accumulator.

Lingua principale
Kotlin
Stelle
52
Fork
15
Merge medio
1g 4h
PR unite (30g)
37

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di SKaiNET-developers/SKaiNET

Tutte le issue di SKaiNET-developers/SKaiNET

Issue simili

Altre issue su Kotlin

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.