import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0Awith%20app.setup%3A%0A%20%20%20%20import%20importlib%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20LightGBM%20%E3%81%A7%E5%9B%9E%E5%B8%B0%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E5%AD%A6%E3%81%B6%0A%0A%20%20%20%20%E5%85%83%20notebook%20%E3%81%A8%E5%90%8C%E3%81%98%E3%81%8F%E3%80%81%E8%A1%A8%E5%BD%A2%E5%BC%8F%E5%9B%9E%E5%B8%B0%E3%83%BB%E7%89%B9%E5%BE%B4%E9%87%8F%E9%87%8D%E8%A6%81%E5%BA%A6%E3%83%BB%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E6%8E%A2%E7%B4%A2%E3%82%92%E6%89%B1%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20Boston%20housing%20%E3%81%AF%E7%8F%BE%E5%9C%A8%E3%81%AE%20scikit-learn%20%E3%81%A7%E5%89%8A%E9%99%A4%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%AE%20diabetes%20%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%B8%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20sk_datasets%20%3D%20importlib.import_module(%22sklearn.datasets%22)%0A%20%20%20%20dataset%20%3D%20sk_datasets.load_diabetes(as_frame%3DTrue)%0A%20%20%20%20frame%20%3D%20dataset.frame.rename(columns%3D%7B%22target%22%3A%20%22target%22%7D)%0A%20%20%20%20feature_columns%20%3D%20%5Bcolumn%20for%20column%20in%20frame.columns%20if%20column%20!%3D%20%22target%22%5D%0A%20%20%20%20frame.head()%0A%20%20%20%20return%20feature_columns%2C%20frame%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20lgb%20%3D%20importlib.import_module(%22lightgbm%22)%0A%20%20%20%20sk_metrics%20%3D%20importlib.import_module(%22sklearn.metrics%22)%0A%20%20%20%20sk_model_selection%20%3D%20importlib.import_module(%22sklearn.model_selection%22)%0A%20%20%20%20return%20lgb%2C%20sk_metrics%2C%20sk_model_selection%0A%0A%0A%40app.cell%0Adef%20_(frame%2C%20lgb%2C%20sk_model_selection)%3A%0A%20%20%20%20train_frame%2C%20valid_frame%20%3D%20sk_model_selection.train_test_split(frame%2C%20test_size%3D0.25%2C%20random_state%3D71)%0A%0A%20%20%20%20def%20fit_booster(train_x%2C%20train_y%2C%20valid_x%2C%20valid_y%2C%20params%3DNone)%3A%0A%20%20%20%20%20%20%20%20booster_params%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22objective%22%3A%20%22regression%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22metric%22%3A%20%22l1%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22learning_rate%22%3A%200.05%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22num_leaves%22%3A%2031%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22feature_fraction%22%3A%200.9%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22bagging_fraction%22%3A%200.9%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22bagging_freq%22%3A%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22seed%22%3A%2071%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22verbosity%22%3A%20-1%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20params%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20booster_params.update(params)%0A%20%20%20%20%20%20%20%20train_set%20%3D%20lgb.Dataset(train_x%2C%20label%3Dtrain_y)%0A%20%20%20%20%20%20%20%20valid_set%20%3D%20lgb.Dataset(valid_x%2C%20label%3Dvalid_y)%0A%20%20%20%20%20%20%20%20booster%20%3D%20lgb.train(%0A%20%20%20%20%20%20%20%20%20%20%20%20booster_params%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20train_set%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20valid_sets%3D%5Btrain_set%2C%20valid_set%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20valid_names%3D%5B%22train%22%2C%20%22valid%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20num_boost_round%3D400%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20callbacks%3D%5Blgb.early_stopping(25%2C%20verbose%3DFalse)%2C%20lgb.log_evaluation(0)%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20return%20booster%0A%0A%20%20%20%20return%20fit_booster%2C%20train_frame%2C%20valid_frame%0A%0A%0A%40app.cell%0Adef%20_(feature_columns%2C%20fit_booster%2C%20train_frame%2C%20valid_frame)%3A%0A%20%20%20%20baseline_model%20%3D%20fit_booster(train_frame%5Bfeature_columns%5D%2C%20train_frame%5B%22target%22%5D%2C%20valid_frame%5Bfeature_columns%5D%2C%20valid_frame%5B%22target%22%5D)%0A%20%20%20%20importance_frame%20%3D%20pd.DataFrame(%7B%22feature%22%3A%20feature_columns%2C%20%22importance%22%3A%20baseline_model.feature_importance(importance_type%3D%22gain%22)%7D).sort_values(%22importance%22%2C%20ascending%3DFalse)%0A%20%20%20%20return%20baseline_model%2C%20importance_frame%0A%0A%0A%40app.cell%0Adef%20_(importance_frame)%3A%0A%20%20%20%20importance_frame%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(baseline_model%2C%20feature_columns%2C%20sk_metrics%2C%20valid_frame)%3A%0A%20%20%20%20baseline_predictions%20%3D%20baseline_model.predict(valid_frame%5Bfeature_columns%5D)%0A%20%20%20%20baseline_metrics%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22metric%22%3A%20%5B%22MAE%22%2C%20%22RMSE%22%2C%20%22R2%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22baseline%22%3A%20%5Bsk_metrics.mean_absolute_error(valid_frame%5B%22target%22%5D%2C%20baseline_predictions)%2C%20np.sqrt(sk_metrics.mean_squared_error(valid_frame%5B%22target%22%5D%2C%20baseline_predictions))%2C%20sk_metrics.r2_score(valid_frame%5B%22target%22%5D%2C%20baseline_predictions)%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%0A%20%20%20%20return%20baseline_metrics%2C%20baseline_predictions%0A%0A%0A%40app.cell%0Adef%20_(baseline_metrics)%3A%0A%20%20%20%20baseline_metrics%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(baseline_predictions%2C%20valid_frame)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(5%2C%205))%0A%20%20%20%20_ax.scatter(valid_frame%5B%22target%22%5D%2C%20baseline_predictions%2C%20alpha%3D0.7)%0A%20%20%20%20diagonal_min%20%3D%20min(valid_frame%5B%22target%22%5D.min()%2C%20baseline_predictions.min())%0A%20%20%20%20diagonal_max%20%3D%20max(valid_frame%5B%22target%22%5D.max()%2C%20baseline_predictions.max())%0A%20%20%20%20_ax.plot(%5Bdiagonal_min%2C%20diagonal_max%5D%2C%20%5Bdiagonal_min%2C%20diagonal_max%5D%2C%20linestyle%3D%22--%22%2C%20color%3D%22black%22)%0A%20%20%20%20_ax.set_xlabel(%22actual%20target%22)%0A%20%20%20%20_ax.set_ylabel(%22predicted%20target%22)%0A%20%20%20%20_ax.set_title(%22Baseline%20LightGBM%20predictions%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20hyperopt%20%3D%20importlib.import_module(%22hyperopt%22)%0A%20%20%20%20history%20%3D%20%5B%5D%0A%20%20%20%20search_space%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22num_leaves%22%3A%20hyperopt.hp.choice(%22num_leaves%22%2C%20list(range(15%2C%2064%2C%208)))%2C%0A%20%20%20%20%20%20%20%20%22feature_fraction%22%3A%20hyperopt.hp.uniform(%22feature_fraction%22%2C%200.7%2C%201.0)%2C%0A%20%20%20%20%20%20%20%20%22bagging_fraction%22%3A%20hyperopt.hp.uniform(%22bagging_fraction%22%2C%200.7%2C%201.0)%2C%0A%20%20%20%20%20%20%20%20%22min_data_in_leaf%22%3A%20hyperopt.hp.choice(%22min_data_in_leaf%22%2C%20%5B10%2C%2020%2C%2030%2C%2040%5D)%2C%0A%20%20%20%20%20%20%20%20%22lambda_l2%22%3A%20hyperopt.hp.loguniform(%22lambda_l2%22%2C%20-4.0%2C%201.0)%2C%0A%20%20%20%20%7D%0A%20%20%20%20return%20history%2C%20hyperopt%2C%20search_space%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20feature_columns%2C%0A%20%20%20%20fit_booster%2C%0A%20%20%20%20history%2C%0A%20%20%20%20hyperopt%2C%0A%20%20%20%20sk_metrics%2C%0A%20%20%20%20sk_model_selection%2C%0A%20%20%20%20train_frame%2C%0A)%3A%0A%20%20%20%20def%20objective(params)%3A%0A%20%20%20%20%20%20%20%20cv%20%3D%20sk_model_selection.KFold(n_splits%3D4%2C%20shuffle%3DTrue%2C%20random_state%3D71)%0A%20%20%20%20%20%20%20%20scores%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20for%20train_index%2C%20valid_index%20in%20cv.split(train_frame)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20cv_train%20%3D%20train_frame.iloc%5Btrain_index%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20cv_valid%20%3D%20train_frame.iloc%5Bvalid_index%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20model%20%3D%20fit_booster(cv_train%5Bfeature_columns%5D%2C%20cv_train%5B%22target%22%5D%2C%20cv_valid%5Bfeature_columns%5D%2C%20cv_valid%5B%22target%22%5D%2C%20params%3Dparams)%0A%20%20%20%20%20%20%20%20%20%20%20%20predictions%20%3D%20model.predict(cv_valid%5Bfeature_columns%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20scores.append(sk_metrics.mean_absolute_error(cv_valid%5B%22target%22%5D%2C%20predictions))%0A%20%20%20%20%20%20%20%20mean_score%20%3D%20float(np.mean(scores))%0A%20%20%20%20%20%20%20%20history.append(%7B%22params%22%3A%20dict(params)%2C%20%22mae%22%3A%20mean_score%7D)%0A%20%20%20%20%20%20%20%20return%20%7B%22loss%22%3A%20mean_score%2C%20%22status%22%3A%20hyperopt.STATUS_OK%7D%0A%0A%20%20%20%20return%20(objective%2C)%0A%0A%0A%40app.cell%0Adef%20_(history%2C%20hyperopt%2C%20objective%2C%20search_space)%3A%0A%20%20%20%20trials%20%3D%20hyperopt.Trials()%0A%20%20%20%20hyperopt.fmin(fn%3Dobjective%2C%20space%3Dsearch_space%2C%20algo%3Dhyperopt.tpe.suggest%2C%20max_evals%3D12%2C%20trials%3Dtrials%2C%20rstate%3Dnp.random.default_rng(71))%0A%20%20%20%20history_frame%20%3D%20pd.DataFrame(history).sort_values(%22mae%22).reset_index(drop%3DTrue)%0A%20%20%20%20return%20(history_frame%2C)%0A%0A%0A%40app.cell%0Adef%20_(history_frame)%3A%0A%20%20%20%20history_frame%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(feature_columns%2C%20fit_booster%2C%20history_frame%2C%20train_frame%2C%20valid_frame)%3A%0A%20%20%20%20best_params%20%3D%20dict(history_frame.iloc%5B0%5D%5B%22params%22%5D)%0A%20%20%20%20tuned_model%20%3D%20fit_booster(train_frame%5Bfeature_columns%5D%2C%20train_frame%5B%22target%22%5D%2C%20valid_frame%5Bfeature_columns%5D%2C%20valid_frame%5B%22target%22%5D%2C%20params%3Dbest_params)%0A%20%20%20%20tuned_predictions%20%3D%20tuned_model.predict(valid_frame%5Bfeature_columns%5D)%0A%20%20%20%20return%20best_params%2C%20tuned_predictions%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20baseline_metrics%2C%0A%20%20%20%20best_params%2C%0A%20%20%20%20sk_metrics%2C%0A%20%20%20%20tuned_predictions%2C%0A%20%20%20%20valid_frame%2C%0A)%3A%0A%20%20%20%20comparison%20%3D%20baseline_metrics.copy()%0A%20%20%20%20comparison%5B%22tuned%22%5D%20%3D%20%5Bsk_metrics.mean_absolute_error(valid_frame%5B%22target%22%5D%2C%20tuned_predictions)%2C%20np.sqrt(sk_metrics.mean_squared_error(valid_frame%5B%22target%22%5D%2C%20tuned_predictions))%2C%20sk_metrics.r2_score(valid_frame%5B%22target%22%5D%2C%20tuned_predictions)%5D%0A%20%20%20%20mo.vstack(%5Bcomparison%2C%20pd.DataFrame(%7B%22best_params%22%3A%20%5Bbest_params%5D%7D)%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
a46a320b71700f4aba4408016057af2a