f1
Builtin index · Statistics & ML
result = f1(actual, predicted)
Input: actual, predicted · Output: result
What it is
Classification metrics on a length-N vector of true labels actual and a length-N vector of predicted labels predicted, each returning a single number macro-averaged over every class present (the per-class score averaged with equal weight, regardless of how many examples that class has), so the same call works on binary and multi-class labels alike.
Overloads
One call shape — this function is not overloaded.
| Code | Input | Output | Description |
result = f1(actual, predicted) | actual vector or numbernot documented yetpredicted vector or numbernot documented yet | result scalar or Num | Returns a scalar Num in [0, 1]. |
Examples
From the documentation, and run by the build -- the output and the figure below are what the engine actually produced. Simplest first.
print("corrcoef matrix:\n{round(corrcoef(X), 3)}")
m = ols_model(X, y)
yhat = m.predict(X)
print("mae: {round(mae(y, yhat), 4)}, mse: {round(mse(y, yhat), 4)}")
cm = knn_model(Xc, yc, 5, kind = "classification")
predc = cm.predict(Xc)
print("precision: {round(precision(yc, predc), 3)}")
print("recall: {round(recall(yc, predc), 3)}")
print("f1: {round(f1(yc, predc), 3)}")
folds = k_fold(X, y, 4)
print("k_fold: {len(folds)} folds, first fold trains on {rows(folds[0].X_train)} rows")
stab = cv_stability(Xc, yc, n_repeats = 5, cv_folds = 3)
print("cv_stability: {round(mean(stab), 3)} +/- {round(std(stab), 3)}")
ab = ablation_study(Xc, yc, cv_folds = 3)
print("ablation_study scores: {round(ab, 4)}")
print("rfe keeps: {rfe(Xc, yc, 1)}")
print("mutual_info_classif: {round(mutual_info_classif(Xc, yc, k = 3), 4)}")
print("astar_mrmr keeps: {astar_mrmr(Xc, yc, 1)}")
print("permutation_importance: {round(permutation_importance(m, X, y, n_repeats = 5), 4)}")
corrcoef matrix: [1, -0.119, 0.007; -0.119, 1, -0.036; 0.007, -0.036, 1] mae: 0.0847, mse: 0.011 precision: 0.995 recall: 0.995 f1: 0.995 k_fold: 4 folds, first fold trains on 90 rows cv_stability: 0.908 +/- 0.012 ablation_study scores: [0.2401, 0.1301] rfe keeps: [0] mutual_info_classif: [0.2398, 0.1939] astar_mrmr keeps: [0] permutation_importance: [1.5394, 0.3327, 0.0947]
from statistics-ml
How it works
precision(actual, predicted) / recall(actual, predicted) / f1(actual, predicted) — macro-averaged (sklearn's own average="macro": compute each metric per class, then take the plain mean across classes) rather than requiring a pos_label=/binary-only convention, so the same three builtins work unchanged whether actual/predicted are a binary 0/1 classification or tree_model/random_forest_ model/knn_model's multi-class kind="classification" output. confusion_matrix (above) renders a heatmap, not a reusable count structure — these three share their own per-class tp/fp/fn tally (classification_prf_macro) instead of depending on it.
From the note above this builtin in the interpreter, where the reasoning was written down as it was built.