%22%22%22How%20to%20Score%20Multiple%20Metrics.%0A%0AEvaluate%20hyperparameter%20configurations%20against%20multiple%20scoring%20metrics%20at%20once.%0A%22%22%22%0A%0A%23%20%2F%2F%2F%20script%0A%23%20requires-python%20%3D%20%22%3E%3D3.11%22%0A%23%20dependencies%20%3D%20%5B%0A%23%20%20%20%20%20%22optuna%22%2C%0A%23%20%20%20%20%20%22scikit-learn%22%2C%0A%23%20%20%20%20%20%22sklearn-optuna%22%2C%0A%23%20%5D%0A%23%20%2F%2F%2F%0A%0Aimport%20marimo%0A%0A__generated_with%20%3D%20%220.19.9%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20from%20optuna.distributions%20import%20FloatDistribution%0A%20%20%20%20from%20sklearn.datasets%20import%20make_classification%0A%20%20%20%20from%20sklearn.linear_model%20import%20LogisticRegression%0A%0A%20%20%20%20from%20sklearn_optuna%20import%20OptunaSearchCV%0A%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20FloatDistribution%2C%0A%20%20%20%20%20%20%20%20LogisticRegression%2C%0A%20%20%20%20%20%20%20%20OptunaSearchCV%2C%0A%20%20%20%20%20%20%20%20make_classification%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%23%20How%20to%20Score%20Multiple%20Metrics%0A%0A%20%20%20%20This%20notebook%20shows%20how%20to%20evaluate%20hyperparameter%20configurations%0A%20%20%20%20against%20multiple%20scoring%20metrics%20and%20access%20per-metric%20results.%0A%0A%20%20%20%20**Prerequisites%3A**%20Familiarity%20with%20the%0A%20%20%20%20OptunaSearchCV%20quickstart%0A%20%20%20%20(%5BView%5D(%2Fexamples%2Fquickstart%2F)%20%C2%B7%20%5BOpen%20in%20marimo%5D(%2Fexamples%2Fquickstart%2Fedit%2F)).%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(make_classification)%3A%0A%20%20%20%20X%2C%20y%20%3D%20make_classification(%0A%20%20%20%20%20%20%20%20n_samples%3D200%2C%20n_features%3D5%2C%20n_informative%3D3%2C%20random_state%3D0%0A%20%20%20%20)%0A%20%20%20%20return%20X%2C%20y%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%23%23%201.%20Pass%20Multiple%20Scorer%20Names%0A%0A%20%20%20%20Provide%20a%20list%20of%20scorer%20names%20to%20%60scoring%60%20and%20set%20%60refit%60%20to%0A%20%20%20%20the%20metric%20used%20for%20selecting%20the%20best%20model.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(FloatDistribution%2C%20LogisticRegression%2C%20OptunaSearchCV%2C%20X%2C%20y)%3A%0A%20%20%20%20search%20%3D%20OptunaSearchCV(%0A%20%20%20%20%20%20%20%20LogisticRegression(max_iter%3D200)%2C%0A%20%20%20%20%20%20%20%20%7B%22C%22%3A%20FloatDistribution(1e-2%2C%2010.0%2C%20log%3DTrue)%7D%2C%0A%20%20%20%20%20%20%20%20scoring%3D%5B%22accuracy%22%2C%20%22f1%22%5D%2C%0A%20%20%20%20%20%20%20%20refit%3D%22accuracy%22%2C%0A%20%20%20%20%20%20%20%20n_trials%3D10%2C%0A%20%20%20%20%20%20%20%20cv%3D3%2C%0A%20%20%20%20)%0A%20%20%20%20search.fit(X%2C%20y)%0A%20%20%20%20return%20(search%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo%2C%20search)%3A%0A%20%20%20%20_cols%20%3D%20%5Bc%20for%20c%20in%20search.cv_results_%20if%20c.startswith(%22mean_test_%22)%5D%0A%20%20%20%20mo.md(f%22%22%22%0A%20%20%20%20**Available%20metric%20columns%3A**%20%60%7B_cols%7D%60%0A%20%20%20%20**Best%20accuracy%3A**%20%60%7Bsearch.best_score_%3A.3f%7D%60%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%23%23%202.%20Access%20Per-Metric%20Results%0A%0A%20%20%20%20Each%20metric%20has%20its%20own%20columns%20in%20%60cv_results_%60.%20Use%20pandas%20to%0A%20%20%20%20compare%20metrics%20side%20by%20side.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20search)%3A%0A%20%20%20%20_results%20%3D%20search.cv_results_%0A%20%20%20%20_rows%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22params%22%3A%20_results%5B%22params%22%5D%5Bi%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22mean_test_accuracy%22%3A%20round(_results%5B%22mean_test_accuracy%22%5D%5Bi%5D%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22mean_test_f1%22%3A%20round(_results%5B%22mean_test_f1%22%5D%5Bi%5D%2C%204)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(len(_results%5B%22params%22%5D))%0A%20%20%20%20%5D%0A%20%20%20%20_rows.sort(key%3Dlambda%20r%3A%20r%5B%22mean_test_accuracy%22%5D%2C%20reverse%3DTrue)%0A%20%20%20%20mo.ui.table(_rows%5B%3A5%5D)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
bc6cce702c0833a67f0040b3dd0ffd8b