import%20marimo%0A%0A__generated_with%20%3D%20%220.16.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20seaborn%20as%20sns%0A%20%20%20%20return%20mo%2C%20np%2C%20pd%2C%20sns%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%20Module%202%20-%20%5BRegression%5D(https%3A%2F%2Fgithub.com%2FDataTalksClub%2Fmachine-learning-zoomcamp%2Ftree%2Fmaster%2F02-regression)%0A%0A%20%20%20%20%23%23%20Homework%0A%0A%20%20%20%20%23%23%23%20Dataset%0A%0A%20%20%20%20For%20this%20homework%2C%20we'll%20use%20the%20Car%20Fuel%20Efficiency%20dataset.%20Download%20it%20from%20here.%20You%20can%20do%20it%20with%20wget%3A%0A%0A%20%20%20%20wget%20https%3A%2F%2Fraw.githubusercontent.com%2Falexeygrigorev%2Fdatasets%2Fmaster%2Fcar_fuel_efficiency.csv%0A%0A%20%20%20%20The%20goal%20of%20this%20homework%20is%20to%20create%20a%20regression%20model%20for%20predicting%20the%20car%20fuel%20efficiency%20(column%20%60fuel_efficiency_mpg%60).%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pd)%3A%0A%20%20%20%20def%20get_dataframe()%3A%0A%20%20%20%20%20%20%20%20return%20pd.read_csv(%22.%2Fmodule-2%2Fdata%2Fcar_fuel_efficiency.csv%22)%0A%0A%20%20%20%20get_dataframe()%0A%20%20%20%20return%20(get_dataframe%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%23%20Preparing%20the%20dataset%20%0A%0A%20%20%20%20Use%20only%20the%20following%20columns%3A%0A%0A%20%20%20%20*%20%60'engine_displacement'%60%2C%0A%20%20%20%20*%20%60'horsepower'%60%2C%0A%20%20%20%20*%20%60'vehicle_weight'%60%2C%0A%20%20%20%20*%20%60'model_year'%60%2C%0A%20%20%20%20*%20%60'fuel_efficiency_mpg'%60%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(get_dataframe)%3A%0A%20%20%20%20def%20get_simplified_dataframe()%3A%0A%20%20%20%20%20%20%20%20df%20%3D%20get_dataframe()%0A%0A%20%20%20%20%20%20%20%20return%20df%5B%5B%22engine_displacement%22%2C%20%22horsepower%22%2C%20%22vehicle_weight%22%2C%20%22model_year%22%2C%20%22fuel_efficiency_mpg%22%5D%5D%0A%0A%20%20%20%20dataframe%20%3D%20get_simplified_dataframe()%0A%0A%20%20%20%20dataframe%0A%20%20%20%20return%20(dataframe%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%23%20EDA%0A%0A%20%20%20%20*%20Look%20at%20the%20%60fuel_efficiency_mpg%60%20variable.%20Does%20it%20have%20a%20long%20tail%3F%0A%0A%20%20%20%20Looking%20at%20its%20histogram%2C%20it%20does%20not%20look%20like%20it%20has%20a%20long%20tail.%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(dataframe%2C%20sns)%3A%0A%20%20%20%20sns.histplot(dataframe.fuel_efficiency_mpg%2C%20bins%3D50)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%23%20Question%201%0A%0A%20%20%20%20There's%20one%20column%20with%20missing%20values.%20What%20is%20it%3F%0A%0A%20%20%20%20*%20%60'engine_displacement'%60%0A%20%20%20%20*%20%60'horsepower'%60%0A%20%20%20%20*%20%60'vehicle_weight'%60%0A%20%20%20%20*%20%60'model_year'%60%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(dataframe)%3A%0A%20%20%20%20dataframe.isna().any()%5Bdataframe.isna().any().values%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%23%20Question%202%0A%0A%20%20%20%20What's%20the%20median%20(50%25%20percentile)%20for%20variable%20%60'horsepower'%60%3F%0A%0A%20%20%20%20-%2049%0A%20%20%20%20-%2099%0A%20%20%20%20-%20149%0A%20%20%20%20-%20199%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(dataframe)%3A%0A%20%20%20%20dataframe.horsepower.median()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%23%20Prepare%20and%20split%20the%20dataset%0A%0A%20%20%20%20*%20Shuffle%20the%20dataset%20(the%20filtered%20one%20you%20created%20above)%2C%20use%20seed%20%6042%60.%0A%20%20%20%20*%20Split%20your%20data%20in%20train%2Fval%2Ftest%20sets%2C%20with%2060%25%2F20%25%2F20%25%20distribution.%0A%0A%20%20%20%20Use%20the%20same%20code%20as%20in%20the%20lectures%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(dataframe%2C%20np)%3A%0A%20%20%20%20def%20split_dataset(df%2C%20seed%20%3D%2042)%3A%0A%20%20%20%20%20%20%20%20n%20%3D%20len(df)%0A%20%20%20%20%20%20%20%20n_val%20%3D%20n_test%20%3D%20int(len(df)%20*%200.2)%0A%20%20%20%20%20%20%20%20n_train%20%3D%20len(df)%20-%20n_val%20-%20n_test%0A%0A%20%20%20%20%20%20%20%20np.random.seed(seed)%0A%20%20%20%20%20%20%20%20shuffled_indexes%20%3D%20np.arange(n)%0A%20%20%20%20%20%20%20%20np.random.shuffle(shuffled_indexes)%0A%0A%20%20%20%20%20%20%20%20train%20%3D%20df.iloc%5Bshuffled_indexes%5B%3An_train%5D%5D%0A%20%20%20%20%20%20%20%20val%20%3D%20df.iloc%5Bshuffled_indexes%5Bn_train%3An_train%2Bn_val%5D%5D%0A%20%20%20%20%20%20%20%20test%20%3D%20df.iloc%5Bshuffled_indexes%5Bn_train%2Bn_val%3A%5D%5D%0A%0A%20%20%20%20%20%20%20%20return%20train%2C%20val%2C%20test%0A%0A%20%20%20%20split_dataset(dataframe)%0A%20%20%20%20return%20(split_dataset%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%23%20Question%203%0A%0A%20%20%20%20*%20We%20need%20to%20deal%20with%20missing%20values%20for%20the%20column%20from%20Q1.%0A%20%20%20%20*%20We%20have%20two%20options%3A%20fill%20it%20with%200%20or%20with%20the%20mean%20of%20this%20variable.%0A%20%20%20%20*%20Try%20both%20options.%20For%20each%2C%20train%20a%20linear%20regression%20model%20without%20regularization%20using%20the%20code%20from%20the%20lessons.%0A%20%20%20%20*%20For%20computing%20the%20mean%2C%20use%20the%20training%20only!%0A%20%20%20%20*%20Use%20the%20validation%20dataset%20to%20evaluate%20the%20models%20and%20compare%20the%20RMSE%20of%20each%20option.%0A%20%20%20%20*%20Round%20the%20RMSE%20scores%20to%202%20decimal%20digits%20using%20%60round(score%2C%202)%60%0A%20%20%20%20*%20Which%20option%20gives%20better%20RMSE%3F%0A%0A%20%20%20%20Options%3A%0A%0A%20%20%20%20-%20With%200%0A%20%20%20%20-%20With%20mean%0A%20%20%20%20-%20Both%20are%20equally%20good%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(dataframe)%3A%0A%20%20%20%20def%20get_zero_filled_horsepower()%3A%0A%20%20%20%20%20%20%20%20df_zero_filled%20%3D%20dataframe.copy()%0A%20%20%20%20%20%20%20%20df_zero_filled.horsepower%20%3D%20dataframe.horsepower.fillna(0)%0A%0A%20%20%20%20%20%20%20%20return%20df_zero_filled%0A%0A%20%20%20%20get_zero_filled_horsepower()%0A%20%20%20%20return%20(get_zero_filled_horsepower%2C)%0A%0A%0A%40app.cell%0Adef%20_(dataframe%2C%20split_dataset)%3A%0A%20%20%20%20def%20get_mean_filled_horsepower()%3A%0A%20%20%20%20%20%20%20%20df_mean_filled%20%3D%20dataframe.copy()%0A%20%20%20%20%20%20%20%20train%2C%20val%2C%20test%20%3D%20split_dataset(dataframe)%0A%20%20%20%20%20%20%20%20df_mean_filled.horsepower%20%3D%20dataframe.horsepower.fillna(train.horsepower.mean())%0A%0A%20%20%20%20%20%20%20%20return%20df_mean_filled%0A%0A%20%20%20%20get_mean_filled_horsepower()%0A%20%20%20%20return%20(get_mean_filled_horsepower%2C)%0A%0A%0A%40app.cell%0Adef%20_(dataframe)%3A%0A%20%20%20%20def%20separate_target(dataframe)%3A%0A%20%20%20%20%20%20%20%20X%20%3D%20dataframe.copy()%0A%20%20%20%20%20%20%20%20del%20X%5B%22fuel_efficiency_mpg%22%5D%0A%20%20%20%20%20%20%20%20X.insert(0%2C%20%22ones%22%2C%201)%0A%20%20%20%20%20%20%20%20y%20%3D%20dataframe.fuel_efficiency_mpg.copy()%0A%0A%20%20%20%20%20%20%20%20return%20X%2C%20y%0A%0A%20%20%20%20separate_target(dataframe)%0A%20%20%20%20return%20(separate_target%2C)%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20def%20solve_linear_regression(X%2C%20y)%3A%0A%20%20%20%20%20%20%20%20return%20np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)%0A%20%20%20%20return%20(solve_linear_regression%2C)%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20def%20rmse(y_predicted%2C%20y_real)%3A%0A%20%20%20%20%20%20%20%20n%20%3D%20len(y_real)%0A%20%20%20%20%20%20%20%20return%20np.sqrt(((y_predicted%20-%20y_real)**2).sum()%20%2F%20n)%0A%20%20%20%20return%20(rmse%2C)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20get_zero_filled_horsepower%2C%0A%20%20%20%20rmse%2C%0A%20%20%20%20separate_target%2C%0A%20%20%20%20solve_linear_regression%2C%0A%20%20%20%20split_dataset%2C%0A)%3A%0A%20%20%20%20def%20evaluate_zero_filled_horsepower()%3A%0A%20%20%20%20%20%20%20%20df%20%3D%20get_zero_filled_horsepower()%0A%20%20%20%20%20%20%20%20train%2C%20val%2C%20test%20%3D%20split_dataset(df)%0A%0A%20%20%20%20%20%20%20%20X_train%2C%20y_train%20%3D%20separate_target(train)%0A%20%20%20%20%20%20%20%20w%20%3D%20solve_linear_regression(X_train%2C%20y_train)%0A%0A%20%20%20%20%20%20%20%20X_val%2C%20y_val%20%3D%20separate_target(val)%0A%20%20%20%20%20%20%20%20y_predicted%20%3D%20X_val.dot(w)%0A%0A%20%20%20%20%20%20%20%20return%20rmse(y_predicted%2C%20y_val)%0A%0A%20%20%20%20evaluate_zero_filled_horsepower()%0A%20%20%20%20return%20(evaluate_zero_filled_horsepower%2C)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20get_mean_filled_horsepower%2C%0A%20%20%20%20rmse%2C%0A%20%20%20%20separate_target%2C%0A%20%20%20%20solve_linear_regression%2C%0A%20%20%20%20split_dataset%2C%0A)%3A%0A%20%20%20%20def%20evaluate_mean_filled_horsepower()%3A%0A%20%20%20%20%20%20%20%20df%20%3D%20get_mean_filled_horsepower()%0A%20%20%20%20%20%20%20%20train%2C%20val%2C%20test%20%3D%20split_dataset(df)%0A%0A%20%20%20%20%20%20%20%20X_train%2C%20y_train%20%3D%20separate_target(train)%0A%20%20%20%20%20%20%20%20w%20%3D%20solve_linear_regression(X_train%2C%20y_train)%0A%0A%20%20%20%20%20%20%20%20X_val%2C%20y_val%20%3D%20separate_target(val)%0A%20%20%20%20%20%20%20%20y_predicted%20%3D%20X_val.dot(w)%0A%0A%20%20%20%20%20%20%20%20return%20rmse(y_predicted%2C%20y_val)%0A%0A%20%20%20%20evaluate_mean_filled_horsepower()%0A%20%20%20%20return%20(evaluate_mean_filled_horsepower%2C)%0A%0A%0A%40app.cell%0Adef%20_(evaluate_mean_filled_horsepower%2C%20evaluate_zero_filled_horsepower)%3A%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%22rmse_zero_filled%22%3A%20evaluate_zero_filled_horsepower().round(2)%2C%0A%20%20%20%20%20%20%20%20%22rmse_mean_filled%22%3A%20evaluate_mean_filled_horsepower().round(2)%2C%0A%20%20%20%20%7D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%23%20Question%204%0A%0A%20%20%20%20*%20Now%20let's%20train%20a%20regularized%20linear%20regression.%0A%20%20%20%20*%20For%20this%20question%2C%20fill%20the%20NAs%20with%200.%20%0A%20%20%20%20*%20Try%20different%20values%20of%20%60r%60%20from%20this%20list%3A%20%60%5B0%2C%200.01%2C%200.1%2C%201%2C%205%2C%2010%2C%20100%5D%60.%0A%20%20%20%20*%20Use%20RMSE%20to%20evaluate%20the%20model%20on%20the%20validation%20dataset.%0A%20%20%20%20*%20Round%20the%20RMSE%20scores%20to%202%20decimal%20digits.%0A%20%20%20%20*%20Which%20%60r%60%20gives%20the%20best%20RMSE%3F%0A%0A%20%20%20%20If%20multiple%20options%20give%20the%20same%20best%20RMSE%2C%20select%20the%20smallest%20%60r%60.%0A%0A%20%20%20%20Options%3A%0A%0A%20%20%20%20-%200%0A%20%20%20%20-%200.01%0A%20%20%20%20-%201%0A%20%20%20%20-%2010%0A%20%20%20%20-%20100%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20def%20solve_regularized_linear_regression(X%2C%20y%2C%20r%20%3D%200.1)%3A%0A%20%20%20%20%20%20%20%20XTX%20%3D%20X.T.dot(X)%0A%20%20%20%20%20%20%20%20XTX%20%3D%20XTX%20%2B%20r%20*%20np.eye(XTX.shape%5B0%5D)%0A%20%20%20%20%20%20%20%20return%20np.linalg.inv(XTX).dot(X.T).dot(y)%0A%20%20%20%20return%20(solve_regularized_linear_regression%2C)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20get_zero_filled_horsepower%2C%0A%20%20%20%20rmse%2C%0A%20%20%20%20separate_target%2C%0A%20%20%20%20solve_regularized_linear_regression%2C%0A%20%20%20%20split_dataset%2C%0A)%3A%0A%20%20%20%20def%20evaluate_with_regularization(r%20%3D%200.1)%3A%0A%20%20%20%20%20%20%20%20df%20%3D%20get_zero_filled_horsepower()%0A%20%20%20%20%20%20%20%20train%2C%20val%2C%20test%20%3D%20split_dataset(df)%0A%0A%20%20%20%20%20%20%20%20X_train%2C%20y_train%20%3D%20separate_target(train)%0A%20%20%20%20%20%20%20%20w%20%3D%20solve_regularized_linear_regression(X_train%2C%20y_train%2C%20r)%0A%0A%20%20%20%20%20%20%20%20X_val%2C%20y_val%20%3D%20separate_target(val)%0A%20%20%20%20%20%20%20%20y_predicted%20%3D%20X_val.dot(w)%0A%0A%20%20%20%20%20%20%20%20return%20rmse(y_predicted%2C%20y_val).round(2)%0A%0A%20%20%20%20regularization_scores%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%220%22%3A%20evaluate_with_regularization(r%20%3D%200)%2C%0A%20%20%20%20%20%20%20%20%220.01%22%3A%20evaluate_with_regularization(r%20%3D%200.01)%2C%0A%20%20%20%20%20%20%20%20%221%22%3A%20evaluate_with_regularization(r%20%3D%201)%2C%0A%20%20%20%20%20%20%20%20%2210%22%3A%20evaluate_with_regularization(r%20%3D%2010)%2C%0A%20%20%20%20%20%20%20%20%22100%22%3A%20evaluate_with_regularization(r%20%3D%20100)%2C%0A%20%20%20%20%7D%0A%0A%20%20%20%20regularization_scores%0A%20%20%20%20return%20(regularization_scores%2C)%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20regularization_scores)%3A%0A%20%20%20%20np.min(list(regularization_scores.values()))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%23%20Question%205%20%0A%0A%20%20%20%20*%20We%20used%20seed%2042%20for%20splitting%20the%20data.%20Let's%20find%20out%20how%20selecting%20the%20seed%20influences%20our%20score.%0A%20%20%20%20*%20Try%20different%20seed%20values%3A%20%60%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%5D%60.%0A%20%20%20%20*%20For%20each%20seed%2C%20do%20the%20train%2Fvalidation%2Ftest%20split%20with%2060%25%2F20%25%2F20%25%20distribution.%0A%20%20%20%20*%20Fill%20the%20missing%20values%20with%200%20and%20train%20a%20model%20without%20regularization.%0A%20%20%20%20*%20For%20each%20seed%2C%20evaluate%20the%20model%20on%20the%20validation%20dataset%20and%20collect%20the%20RMSE%20scores.%20%0A%20%20%20%20*%20What's%20the%20standard%20deviation%20of%20all%20the%20scores%3F%20To%20compute%20the%20standard%20deviation%2C%20use%20%60np.std%60.%0A%20%20%20%20*%20Round%20the%20result%20to%203%20decimal%20digits%20(%60round(std%2C%203)%60)%0A%0A%20%20%20%20What's%20the%20value%20of%20std%3F%0A%0A%20%20%20%20-%200.001%0A%20%20%20%20-%200.006%0A%20%20%20%20-%200.060%0A%20%20%20%20-%200.600%0A%0A%20%20%20%20%3E%20Note%3A%20Standard%20deviation%20shows%20how%20different%20the%20values%20are.%0A%20%20%20%20%3E%20If%20it's%20low%2C%20then%20all%20values%20are%20approximately%20the%20same.%0A%20%20%20%20%3E%20If%20it's%20high%2C%20the%20values%20are%20different.%20%0A%20%20%20%20%3E%20If%20standard%20deviation%20of%20scores%20is%20low%2C%20then%20our%20model%20is%20*stable*.%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20get_zero_filled_horsepower%2C%0A%20%20%20%20rmse%2C%0A%20%20%20%20separate_target%2C%0A%20%20%20%20solve_linear_regression%2C%0A%20%20%20%20split_dataset%2C%0A)%3A%0A%20%20%20%20def%20evaluate_seed_influence(seed%20%3D%200)%3A%0A%20%20%20%20%20%20%20%20df%20%3D%20get_zero_filled_horsepower()%0A%20%20%20%20%20%20%20%20train%2C%20val%2C%20test%20%3D%20split_dataset(df%2C%20seed%3Dseed)%0A%0A%20%20%20%20%20%20%20%20X_train%2C%20y_train%20%3D%20separate_target(train)%0A%20%20%20%20%20%20%20%20w%20%3D%20solve_linear_regression(X_train%2C%20y_train)%0A%0A%20%20%20%20%20%20%20%20X_val%2C%20y_val%20%3D%20separate_target(val)%0A%20%20%20%20%20%20%20%20y_predicted%20%3D%20X_val.dot(w)%0A%0A%20%20%20%20%20%20%20%20return%20rmse(y_predicted%2C%20y_val)%0A%0A%20%20%20%20seed_scores%20%3D%20%7B%7D%0A%20%20%20%20for%20seed%20in%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%5D%3A%0A%20%20%20%20%20%20%20%20seed_scores%5Bseed%5D%20%3D%20evaluate_seed_influence(seed)%0A%0A%20%20%20%20seed_scores%0A%20%20%20%20return%20(seed_scores%2C)%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20seed_scores)%3A%0A%20%20%20%20np.std(list(seed_scores.values())).round(3)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%23%20Question%206%0A%0A%20%20%20%20*%20Split%20the%20dataset%20like%20previously%2C%20use%20seed%209.%0A%20%20%20%20*%20Combine%20train%20and%20validation%20datasets.%0A%20%20%20%20*%20Fill%20the%20missing%20values%20with%200%20and%20train%20a%20model%20with%20%60r%3D0.001%60.%20%0A%20%20%20%20*%20What's%20the%20RMSE%20on%20the%20test%20dataset%3F%0A%0A%20%20%20%20Options%3A%0A%0A%20%20%20%20-%200.15%0A%20%20%20%20-%200.515%0A%20%20%20%20-%205.15%0A%20%20%20%20-%2051.5%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20get_zero_filled_horsepower%2C%0A%20%20%20%20np%2C%0A%20%20%20%20rmse%2C%0A%20%20%20%20separate_target%2C%0A%20%20%20%20solve_regularized_linear_regression%2C%0A%20%20%20%20split_dataset%2C%0A)%3A%0A%20%20%20%20def%20evaluate_final()%3A%0A%20%20%20%20%20%20%20%20df%20%3D%20get_zero_filled_horsepower()%0A%20%20%20%20%20%20%20%20train%2C%20val%2C%20test%20%3D%20split_dataset(df%2C%20seed%3D9)%0A%0A%20%20%20%20%20%20%20%20X_train%2C%20y_train%20%3D%20separate_target(train)%0A%20%20%20%20%20%20%20%20X_val%2C%20y_val%20%3D%20separate_target(val)%0A%20%20%20%20%20%20%20%20X_test%2C%20y_test%20%3D%20separate_target(test)%0A%0A%20%20%20%20%20%20%20%20X%20%3D%20np.concat(%5BX_train%2C%20X_val%5D)%0A%20%20%20%20%20%20%20%20y%20%3D%20np.concat(%5By_train%2C%20y_val%5D)%0A%20%20%20%20%20%20%20%20w%20%3D%20solve_regularized_linear_regression(X%2C%20y%2C%20r%3D0.001)%0A%0A%20%20%20%20%20%20%20%20y_predicted%20%3D%20X_test.dot(w)%0A%0A%20%20%20%20%20%20%20%20return%20rmse(y_predicted%2C%20y_test)%0A%0A%20%20%20%20evaluate_final()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%23%23%20Submit%20the%20results%0A%0A%20%20%20%20*%20Submit%20your%20results%20here%3A%20https%3A%2F%2Fcourses.datatalks.club%2Fml-zoomcamp-2025%2Fhomework%2Fhw02%0A%20%20%20%20*%20If%20your%20answer%20doesn't%20match%20options%20exactly%2C%20select%20the%20closest%20one%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%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
1e6b92228fae77d8b8ba7a6db7e8f698159c7d21712054c0a27f749300c19bfa