fix calculation logic, fix api endpoint

This commit is contained in:
zaiun xu
2026-04-15 09:01:45 +08:00
parent 670e6308a5
commit 45de318461
10 changed files with 158 additions and 94 deletions

View File

@@ -691,13 +691,12 @@ def _predict_folder_impl(
effective_top_by_length = False
selected_topk = selected_topk_by_weight
preds_g_topk = [float(it["predicted_weight_g"]) for it in selected_topk]
use_max_instead_of_mean = len(candidates_for_avg) < 5
# Always arithmetic mean over selected top-K (matches _topk_mean_prediction_g_for_display
# and the printed top{k}_avg= line). Do not use max when N<5 — that made pred_weight_g
# disagree with "top{k}_avg by length" in logs.
use_max_instead_of_mean = False
if preds_g_topk:
avg_g_topk = (
float(np.max(preds_g_topk))
if use_max_instead_of_mean
else float(np.mean(preds_g_topk))
)
avg_g_topk = float(np.mean(preds_g_topk))
else:
avg_g_topk = float(avg_g_all)
num_used_for_avg = len(selected_topk)
@@ -1483,7 +1482,6 @@ def main() -> None:
)
if args.remove_outliers and summary.get("num_outliers_removed", 0) > 0:
print(f"Outliers removed: {summary['num_outliers_removed']} (method={args.outlier_method}, field={args.outlier_field})")
top_label = _summary_top_label(summary, args.top_k, args.top_by_length)
tk = int(summary.get("top_k") or args.top_k)
topk_g = summary.get("avg_topk_mean_pred_g")
topk_sel = summary.get("avg_topk_mean_pred_selection") or "pred"
@@ -1492,8 +1490,9 @@ def main() -> None:
by = "length" if topk_sel == "by_length" else "pred"
topk_extra = f" | top{tk}_avg={float(topk_g):.2f} g by {by}"
mcol = _mean_column_g_for_log(summary)
# First column is mean over ALL post-filter candidates (not top-K); do not label as top-K.
print(
f"Average predicted weight {top_label}: "
f"Mean all candidates (after filters): "
f"{mcol:.2f} g, {mcol / 1000.0:.4f} kg{topk_extra}"
)
_print_max_weight_after_filter(summary)