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%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20tensorflow%20as%20tf%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%20PyCaret%20%E3%81%AB%E3%82%88%E3%82%8B%E5%9B%9E%E5%B8%B0%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%0A%0A%20%20%20%20%E5%85%AC%E9%96%8B%E3%83%87%E3%83%BC%E3%82%BF%20%60load_diabetes%60%20%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81UI%20%E4%BE%9D%E5%AD%98%E3%81%AE%20plot%20%E3%82%92%E9%81%BF%E3%81%91%E3%81%A6%20headless%20%E3%81%A7%E3%82%82%E8%AA%AD%E3%82%81%E3%82%8B%E8%A1%A8%E4%B8%AD%E5%BF%83%E3%81%AE%20notebook%20%E3%81%AB%E6%95%B4%E7%90%86%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%E5%AE%9F%E8%A1%8C%E3%81%AB%E3%81%AF%20%60uv%20sync%20--group%20specialized%20--group%20gpu%60%20%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%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%20from%20sklearn.datasets%20import%20load_diabetes%0A%0A%20%20%20%20diabetes%20%3D%20load_diabetes(as_frame%3DTrue)%0A%20%20%20%20frame%20%3D%20diabetes.frame.rename(columns%3D%7B%22target%22%3A%20%22Progression%22%7D)%0A%20%20%20%20model_frame%20%3D%20frame.sample(frac%3D0.85%2C%20random_state%3D786).reset_index(drop%3DTrue)%0A%20%20%20%20unseen_frame%20%3D%20frame.drop(model_frame.index).reset_index(drop%3DTrue)%0A%20%20%20%20return%20model_frame%2C%20unseen_frame%0A%0A%0A%40app.cell%0Adef%20_(model_frame)%3A%0A%20%20%20%20import%20os%0A%0A%20%20%20%20pycaret_log%20%3D%20Path(__file__).resolve().parents%5B2%5D%20%2F%20%22build%22%20%2F%20%22pycaret%22%20%2F%20%22regression.log%22%0A%20%20%20%20pycaret_log.parent.mkdir(parents%3DTrue%2C%20exist_ok%3DTrue)%0A%20%20%20%20os.environ%5B%22PYCARET_CUSTOM_LOGGING_PATH%22%5D%20%3D%20str(pycaret_log)%0A%0A%20%20%20%20from%20pycaret.regression%20import%20RegressionExperiment%0A%0A%20%20%20%20experiment%20%3D%20RegressionExperiment()%0A%20%20%20%20experiment.setup(%0A%20%20%20%20%20%20%20%20data%3Dmodel_frame%2C%0A%20%20%20%20%20%20%20%20target%3D%22Progression%22%2C%0A%20%20%20%20%20%20%20%20session_id%3D123%2C%0A%20%20%20%20%20%20%20%20fold%3D3%2C%0A%20%20%20%20%20%20%20%20n_jobs%3D1%2C%0A%20%20%20%20%20%20%20%20normalize%3DTrue%2C%0A%20%20%20%20%20%20%20%20transform_target%3DTrue%2C%0A%20%20%20%20%20%20%20%20system_log%3DFalse%2C%0A%20%20%20%20%20%20%20%20verbose%3DFalse%2C%0A%20%20%20%20)%0A%20%20%20%20available_models%20%3D%20experiment.models().head(10)%0A%20%20%20%20return%20available_models%2C%20experiment%0A%0A%0A%40app.cell%0Adef%20_(available_models)%3A%0A%20%20%20%20available_models%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(experiment)%3A%0A%20%20%20%20experiment.compare_models(sort%3D%22MAE%22%2C%20n_select%3D3%2C%20verbose%3DFalse)%0A%20%20%20%20leaderboard%20%3D%20experiment.pull().reset_index(drop%3DTrue)%0A%20%20%20%20return%20(leaderboard%2C)%0A%0A%0A%40app.cell%0Adef%20_(leaderboard)%3A%0A%20%20%20%20leaderboard%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(experiment)%3A%0A%20%20%20%20lightgbm_model%20%3D%20experiment.create_model(%22lightgbm%22%2C%20verbose%3DFalse)%0A%20%20%20%20tuned_lightgbm%20%3D%20experiment.tune_model(lightgbm_model%2C%20n_iter%3D8%2C%20optimize%3D%22MAE%22%2C%20verbose%3DFalse)%0A%20%20%20%20tuning_table%20%3D%20experiment.pull().reset_index(drop%3DTrue)%0A%20%20%20%20experiment.predict_model(tuned_lightgbm)%0A%20%20%20%20holdout_table%20%3D%20experiment.pull().reset_index(drop%3DTrue)%0A%20%20%20%20return%20holdout_table%2C%20tuned_lightgbm%2C%20tuning_table%0A%0A%0A%40app.cell%0Adef%20_(tuning_table)%3A%0A%20%20%20%20tuning_table%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(holdout_table)%3A%0A%20%20%20%20holdout_table.head()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(experiment%2C%20tuned_lightgbm%2C%20unseen_frame)%3A%0A%20%20%20%20from%20sklearn.metrics%20import%20mean_absolute_error%20as%20_mean_absolute_error%0A%20%20%20%20from%20sklearn.metrics%20import%20r2_score%20as%20_r2_score%0A%0A%20%20%20%20final_model%20%3D%20experiment.finalize_model(tuned_lightgbm)%0A%20%20%20%20unseen_predictions%20%3D%20experiment.predict_model(final_model%2C%20data%3Dunseen_frame)%0A%20%20%20%20prediction_column%20%3D%20next(column%20for%20column%20in%20unseen_predictions.columns%20if%20column.lower().startswith(%22prediction%22))%0A%20%20%20%20unseen_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%22R2%22%2C%20%22MAE%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22value%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_r2_score(unseen_predictions%5B%22Progression%22%5D%2C%20unseen_predictions%5Bprediction_column%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_mean_absolute_error(unseen_predictions%5B%22Progression%22%5D%2C%20unseen_predictions%5Bprediction_column%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%0A%20%20%20%20artifact_dir%20%3D%20Path(__file__).with_name(%22pycaret_artifacts%22)%0A%20%20%20%20artifact_dir.mkdir(exist_ok%3DTrue)%0A%20%20%20%20model_path%20%3D%20artifact_dir%20%2F%20%22diabetes_lightgbm%22%0A%20%20%20%20experiment.save_model(final_model%2C%20str(model_path))%0A%20%20%20%20reloaded_model%20%3D%20experiment.load_model(str(model_path))%0A%20%20%20%20reloaded_predictions%20%3D%20experiment.predict_model(reloaded_model%2C%20data%3Dunseen_frame)%0A%20%20%20%20saved_pickle%20%3D%20model_path.with_suffix(%22.pkl%22)%0A%20%20%20%20if%20saved_pickle.exists()%3A%0A%20%20%20%20%20%20%20%20saved_pickle.unlink()%0A%20%20%20%20if%20artifact_dir.exists()%20and%20not%20any(artifact_dir.iterdir())%3A%0A%20%20%20%20%20%20%20%20artifact_dir.rmdir()%0A%20%20%20%20return%20(unseen_metrics%2C)%0A%0A%0A%40app.cell%0Adef%20_(unseen_metrics)%3A%0A%20%20%20%20unseen_metrics%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(model_frame%2C%20unseen_frame)%3A%0A%20%20%20%20from%20sklearn.model_selection%20import%20train_test_split%0A%20%20%20%20from%20sklearn.preprocessing%20import%20StandardScaler%0A%0A%20%20%20%20x%20%3D%20model_frame.drop(columns%3D%22Progression%22)%0A%20%20%20%20y%20%3D%20model_frame%5B%22Progression%22%5D%0A%20%20%20%20x_train%2C%20x_valid%2C%20y_train%2C%20y_valid%20%3D%20train_test_split(x%2C%20y%2C%20test_size%3D0.2%2C%20random_state%3D123)%0A%20%20%20%20scaler%20%3D%20StandardScaler()%0A%20%20%20%20x_train_scaled%20%3D%20scaler.fit_transform(x_train)%0A%20%20%20%20x_valid_scaled%20%3D%20scaler.transform(x_valid)%0A%20%20%20%20x_unseen_scaled%20%3D%20scaler.transform(unseen_frame.drop(columns%3D%22Progression%22))%0A%20%20%20%20return%20x_train_scaled%2C%20x_unseen_scaled%2C%20x_valid_scaled%2C%20y_train%2C%20y_valid%0A%0A%0A%40app.cell%0Adef%20_(x_train_scaled%2C%20y_train)%3A%0A%20%20%20%20tf.keras.utils.set_random_seed(123)%0A%20%20%20%20keras_model%20%3D%20tf.keras.Sequential(%5B%0A%20%20%20%20%20%20%20%20tf.keras.layers.Input(shape%3D(x_train_scaled.shape%5B1%5D%2C))%2C%0A%20%20%20%20%20%20%20%20tf.keras.layers.Dense(64%2C%20activation%3D%22relu%22)%2C%0A%20%20%20%20%20%20%20%20tf.keras.layers.Dense(64%2C%20activation%3D%22relu%22)%2C%0A%20%20%20%20%20%20%20%20tf.keras.layers.Dense(1)%2C%0A%20%20%20%20%5D%2C%20name%3D%22regression_mlp%22)%0A%20%20%20%20keras_model.compile(optimizer%3D%22adam%22%2C%20loss%3D%22mse%22%2C%20metrics%3D%5B%22mae%22%5D)%0A%20%20%20%20history%20%3D%20keras_model.fit(x_train_scaled%2C%20y_train%2C%20validation_split%3D0.2%2C%20epochs%3D80%2C%20batch_size%3D32%2C%20verbose%3D0)%0A%20%20%20%20history_frame%20%3D%20pd.DataFrame(history.history)%0A%20%20%20%20return%20history_frame%2C%20keras_model%0A%0A%0A%40app.cell%0Adef%20_(history_frame)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(6%2C%204))%0A%20%20%20%20_ax.plot(history_frame%5B%22mae%22%5D%2C%20label%3D%22train%22)%0A%20%20%20%20_ax.plot(history_frame%5B%22val_mae%22%5D%2C%20label%3D%22validation%22)%0A%20%20%20%20_ax.set_title(%22Keras%20regression%20MAE%22)%0A%20%20%20%20_ax.legend()%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_(keras_model%2C%20x_unseen_scaled%2C%20x_valid_scaled%2C%20y_valid)%3A%0A%20%20%20%20from%20sklearn.metrics%20import%20mean_absolute_error%2C%20r2_score%0A%0A%20%20%20%20valid_predictions%20%3D%20keras_model.predict(x_valid_scaled%2C%20verbose%3D0).reshape(-1)%0A%20%20%20%20keras_unseen_predictions%20%3D%20keras_model.predict(x_unseen_scaled%2C%20verbose%3D0).reshape(-1)%0A%20%20%20%20keras_metrics%20%3D%20pd.DataFrame(%7B%22metric%22%3A%20%5B%22validation_mae%22%2C%20%22validation_r2%22%2C%20%22unseen_prediction_mean%22%5D%2C%20%22value%22%3A%20%5Bmean_absolute_error(y_valid%2C%20valid_predictions)%2C%20r2_score(y_valid%2C%20valid_predictions)%2C%20keras_unseen_predictions.mean()%5D%7D)%0A%20%20%20%20return%20(keras_metrics%2C)%0A%0A%0A%40app.cell%0Adef%20_(keras_metrics)%3A%0A%20%20%20%20keras_metrics%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
77dde1910e655bc61cd177db437f6b74