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%20scikit-learn%20%E3%81%AB%E3%82%88%E3%82%8B%E5%9B%9E%E5%B8%B0%E3%81%AE%E5%9F%BA%E6%9C%AC%E4%BE%8B%0A%0A%20%20%20%20%E5%85%83%20notebook%20%E3%81%AF%E5%89%8A%E9%99%A4%E6%B8%88%E3%81%BF%E3%81%AE%20Boston%20housing%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E5%90%8C%E3%81%98%E5%9B%9E%E5%B8%B0%E6%95%99%E6%9D%90%E3%81%AE%E6%84%8F%E5%9B%B3%E3%82%92%E4%BF%9D%E3%81%A1%E3%81%A4%E3%81%A4%E3%80%81%0A%20%20%20%20scikit-learn%20%E5%90%8C%E6%A2%B1%E3%81%AE%20%60load_diabetes%60%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%20data_frame%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%20data_frame.columns%20if%20column%20!%3D%20%22target%22%5D%0A%20%20%20%20data_frame.head()%0A%20%20%20%20return%20data_frame%2C%20feature_columns%0A%0A%0A%40app.cell%0Adef%20_(data_frame%2C%20feature_columns)%3A%0A%20%20%20%20sk_linear_model%20%3D%20importlib.import_module(%22sklearn.linear_model%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%20sk_pipeline%20%3D%20importlib.import_module(%22sklearn.pipeline%22)%0A%20%20%20%20sk_preprocessing%20%3D%20importlib.import_module(%22sklearn.preprocessing%22)%0A%0A%20%20%20%20candidate_alphas%20%3D%20%5B0.1%2C%201.0%2C%2010.0%5D%0A%20%20%20%20cv%20%3D%20sk_model_selection.KFold(n_splits%3D4%2C%20shuffle%3DTrue%2C%20random_state%3D71)%0A%20%20%20%20cv_rows%20%3D%20%5B%5D%0A%20%20%20%20_features%20%3D%20data_frame%5Bfeature_columns%5D%0A%20%20%20%20_target%20%3D%20data_frame%5B%22target%22%5D%0A%20%20%20%20for%20alpha%20in%20candidate_alphas%3A%0A%20%20%20%20%20%20%20%20estimator%20%3D%20sk_pipeline.make_pipeline(sk_preprocessing.StandardScaler()%2C%20sk_linear_model.Ridge(alpha%3Dalpha))%0A%20%20%20%20%20%20%20%20scores%20%3D%20sk_model_selection.cross_validate(estimator%2C%20_features%2C%20_target%2C%20cv%3Dcv%2C%20scoring%3D%7B%22mae%22%3A%20%22neg_mean_absolute_error%22%2C%20%22r2%22%3A%20%22r2%22%7D)%0A%20%20%20%20%20%20%20%20cv_rows.append(%7B%22alpha%22%3A%20alpha%2C%20%22mae%22%3A%20-scores%5B%22test_mae%22%5D.mean()%2C%20%22r2%22%3A%20scores%5B%22test_r2%22%5D.mean()%7D)%0A%0A%20%20%20%20cv_results%20%3D%20pd.DataFrame(cv_rows).sort_values(%22mae%22).reset_index(drop%3DTrue)%0A%20%20%20%20best_alpha%20%3D%20float(cv_results.iloc%5B0%5D%5B%22alpha%22%5D)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20best_alpha%2C%0A%20%20%20%20%20%20%20%20cv_results%2C%0A%20%20%20%20%20%20%20%20sk_linear_model%2C%0A%20%20%20%20%20%20%20%20sk_metrics%2C%0A%20%20%20%20%20%20%20%20sk_model_selection%2C%0A%20%20%20%20%20%20%20%20sk_pipeline%2C%0A%20%20%20%20%20%20%20%20sk_preprocessing%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20_(cv_results)%3A%0A%20%20%20%20cv_results%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20best_alpha%2C%0A%20%20%20%20data_frame%2C%0A%20%20%20%20feature_columns%2C%0A%20%20%20%20sk_linear_model%2C%0A%20%20%20%20sk_metrics%2C%0A%20%20%20%20sk_model_selection%2C%0A%20%20%20%20sk_pipeline%2C%0A%20%20%20%20sk_preprocessing%2C%0A)%3A%0A%20%20%20%20_features%20%3D%20data_frame%5Bfeature_columns%5D%0A%20%20%20%20_target%20%3D%20data_frame%5B%22target%22%5D%0A%20%20%20%20train_x%2C%20test_x%2C%20train_y%2C%20test_y%20%3D%20sk_model_selection.train_test_split(_features%2C%20_target%2C%20test_size%3D0.25%2C%20random_state%3D71)%0A%20%20%20%20ridge_pipeline%20%3D%20sk_pipeline.make_pipeline(sk_preprocessing.StandardScaler()%2C%20sk_linear_model.Ridge(alpha%3Dbest_alpha))%0A%20%20%20%20ridge_pipeline.fit(train_x%2C%20train_y)%0A%20%20%20%20predictions%20%3D%20ridge_pipeline.predict(test_x)%0A%20%20%20%20metrics_frame%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%22value%22%3A%20%5Bsk_metrics.mean_absolute_error(test_y%2C%20predictions)%2C%20np.sqrt(sk_metrics.mean_squared_error(test_y%2C%20predictions))%2C%20sk_metrics.r2_score(test_y%2C%20predictions)%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%0A%20%20%20%20coefficients%20%3D%20pd.Series(ridge_pipeline.named_steps%5B%22ridge%22%5D.coef_%2C%20index%3Dfeature_columns%2C%20name%3D%22coefficient%22).sort_values()%0A%20%20%20%20return%20coefficients%2C%20metrics_frame%2C%20predictions%2C%20test_y%0A%0A%0A%40app.cell%0Adef%20_(metrics_frame)%3A%0A%20%20%20%20metrics_frame%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(coefficients)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(8%2C%204))%0A%20%20%20%20coefficients.plot.barh(ax%3D_ax%2C%20color%3D%22tab%3Ablue%22)%0A%20%20%20%20_ax.set_title(%22Ridge%20coefficients%20on%20standardized%20features%22)%0A%20%20%20%20_ax.set_xlabel(%22coefficient%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_(predictions%2C%20test_y)%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(test_y%2C%20predictions%2C%20alpha%3D0.7)%0A%20%20%20%20diagonal_min%20%3D%20min(test_y.min()%2C%20predictions.min())%0A%20%20%20%20diagonal_max%20%3D%20max(test_y.max()%2C%20predictions.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(%22Holdout%20predictions%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%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
868c29bffbd992531b30f4f220a43b3c