import%20marimo%0A%0A__generated_with%20%3D%20%220.10.4%22%0Aapp%20%3D%20marimo.App()%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%20%20%20%20%23%20Machine%20Learning%0A%0A%20%20%20%20%20%20%20%20**Textbook%20is%20available%20%40%20%5Bhttps%3A%2F%2Fwww.github.com%2Fa-mhamdi%2Fmlpy%5D(https%3A%2F%2Fwww.github.com%2Fa-mhamdi%2Fmlpy)**%0A%0A%20%20%20%20%20%20%20%20---%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Data%20Preprocessing%20Template%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(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20It%20is%20important%20to%20carefully%20consider%20the%20preprocessing%20steps%20that%20are%20appropriate%20for%20the%20specific%20dataset%20and%20machine%20learning%20task.%20Preprocessing%20of%20data%20helps%20to%20ensure%20that%20the%20data%20is%20in%20a%20suitable%20format%20to%20use%2C%20and%20can%20also%20help%20to%20improve%20the%20generalization%20ability%20of%20the%20model.%0A%0A%20%20%20%20%20%20%20%20There%20are%20several%20reasons%20why%20data%20preprocessing%20is%20important%20in%20machine%20learning%3A%0A%0A%20%20%20%20%20%20%20%201.%20Cleaning%20and%20formatting%20the%20data%3B%0A%20%20%20%20%20%20%20%201.%20Normalizing%20the%20data%3B%0A%20%20%20%20%20%20%20%201.%20Reducing%20the%20dimensionality%20of%20the%20data%3B%20and%0A%20%20%20%20%20%20%20%201.%20Enhancing%20the%20interpretability%20of%20the%20model.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Introduction%20to%20Data%20Scaling%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20return%20(np%2C)%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20X%20%3D%20np.array(%5B%5B1%2C%20-1%5D%2C%20%5B0%2C%202%5D%2C%20%5B4.5%2C%20-3%5D%2C%20%5B0%2C%209%5D%2C%20%5B1.3%2C%20-2%5D%2C%20%5B5%2C%204%5D%5D)%0A%20%20%20%20X%0A%20%20%20%20return%20(X%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20return%20(pd%2C)%0A%0A%0A%40app.cell%0Adef%20_(X%2C%20pd)%3A%0A%20%20%20%20df%20%3D%20pd.DataFrame(X%2C%20columns%3D%5B'Col%20%231'%2C%20'Col%20%232'%5D)%0A%20%20%20%20df%0A%20%20%20%20return%20(df%2C)%0A%0A%0A%40app.cell%0Adef%20_(df)%3A%0A%20%20%20%20df.describe()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%23%20MinMaxScaler%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X)%3A%0A%20%20%20%20X_pg%20%3D%20(X-X.min(axis%3D0))%2F(X.max(axis%3D0)-X.min(axis%3D0))%0A%20%20%20%20X_pg%0A%20%20%20%20return%20(X_pg%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20sklearn.preprocessing%20import%20MinMaxScaler%0A%20%20%20%20return%20(MinMaxScaler%2C)%0A%0A%0A%40app.cell%0Adef%20_(MinMaxScaler%2C%20X)%3A%0A%20%20%20%20X_mms%20%3D%20MinMaxScaler().fit_transform(X)%0A%20%20%20%20X_mms%0A%20%20%20%20return%20(X_mms%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%23%20StandardScaler%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X)%3A%0A%20%20%20%20X_ms%20%3D%20(X-X.mean(axis%3D0))%2F(X.std(axis%3D0))%0A%20%20%20%20X_ms%0A%20%20%20%20return%20(X_ms%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20sklearn.preprocessing%20import%20StandardScaler%0A%20%20%20%20return%20(StandardScaler%2C)%0A%0A%0A%40app.cell%0Adef%20_(StandardScaler%2C%20X)%3A%0A%20%20%20%20X_sc%20%3D%20StandardScaler().fit_transform(X)%0A%20%20%20%20X_sc%0A%20%20%20%20return%20(X_sc%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Data%20Preprocessing%20Template%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(r%22%22%22%23%23%23%23%20Importing%20the%20libraries%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20matplotlib%20import%20pyplot%20as%20plt%0A%20%20%20%20return%20(plt%2C)%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20np.set_printoptions(precision%3D3)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%23%20Importing%20the%20dataset%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pd)%3A%0A%20%20%20%20df_1%20%3D%20pd.read_csv('..%2FDatasets%2FData.csv')%0A%20%20%20%20df_1.head()%0A%20%20%20%20return%20(df_1%2C)%0A%0A%0A%40app.cell%0Adef%20_(df_1)%3A%0A%20%20%20%20df_1.describe()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(df_1)%3A%0A%20%20%20%20df_1%5B'Purchased'%5D.value_counts()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%23%20Extracting%20independent%20and%20dependent%20variables%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(df_1)%3A%0A%20%20%20%20X_1%20%3D%20df_1.iloc%5B%3A%2C%20%3A-1%5D.values%0A%20%20%20%20y%20%3D%20df_1.iloc%5B%3A%2C%20-1%5D.values%0A%20%20%20%20return%20X_1%2C%20y%0A%0A%0A%40app.cell%0Adef%20_(X_1%2C%20y)%3A%0A%20%20%20%20print('*****%20Features%20*****'%2C%20X_1%2C%20sep%3D'%5Cn')%0A%20%20%20%20print('*****%20Target%20*****'%2C%20y%2C%20sep%3D'%5Cn')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%23%20Imputation%20transformer%20for%20completing%20missing%20values%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%5Bhttps%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.impute.SimpleImputer.html%5D(https%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.impute.SimpleImputer.html)%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20sklearn.impute%20import%20SimpleImputer%0A%20%20%20%20return%20(SimpleImputer%2C)%0A%0A%0A%40app.cell%0Adef%20_(SimpleImputer%2C%20X_1%2C%20np)%3A%0A%20%20%20%20si%20%3D%20SimpleImputer(missing_values%3Dnp.nan%2C%20strategy%3D'mean')%0A%20%20%20%20X_1%5B%3A%2C%201%3A%5D%20%3D%20si.fit_transform(X_1%5B%3A%2C%201%3A%5D)%0A%20%20%20%20return%20(si%2C)%0A%0A%0A%40app.cell%0Adef%20_(X_1%2C%20y)%3A%0A%20%20%20%20print('*****%20Features%20*****'%2C%20X_1%2C%20sep%3D'%5Cn')%0A%20%20%20%20print('*****%20Target%20*****'%2C%20y%2C%20sep%3D'%5Cn')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%23%20How%20to%20encode%20categorical%20data%3F%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(r%22%22%22%23%23%23%23%23%20Case%20of%20two%20categories%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(r%22%22%22%5Bhttps%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.preprocessing.LabelEncoder.html%5D(https%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.preprocessing.LabelEncoder.html)%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20sklearn.preprocessing%20import%20LabelEncoder%0A%20%20%20%20le%20%3D%20LabelEncoder()%0A%20%20%20%20return%20LabelEncoder%2C%20le%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Fit%20%60le%60%20and%20return%20encoded%20labels%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(le%2C%20y)%3A%0A%20%20%20%20y_1%20%3D%20le.fit_transform(y)%0A%20%20%20%20print(y_1)%0A%20%20%20%20return%20(y_1%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%20%20%20%20**MARGINAL%20NOTE**%0A%0A%20%20%20%20%20%20%20%20Try%20to%20fit%20and%20transform%20a%20new%20%60LabelEncoder%60%20instance%20on%20the%20%60Country%60%20column.%0A%0A%20%20%20%20%20%20%20%20%3E%60%60%60python%0A%20%20%20%20%20%20%20%20%3Ece%20%3D%20LabelEncoder()%0A%20%20%20%20%20%20%20%20%3Ecountry%20%3D%20ce.fit_transform(X%5B%3A%2C%200%5D)%20%23%20You%20can%20use%20%60df.Country%60%20instead%0A%20%20%20%20%20%20%20%20%3E%60%60%60%0A%0A%20%20%20%20%20%20%20%20We%20can%20access%20the%20original%20values%20by%20simply%20writing%3A%0A%0A%20%20%20%20%20%20%20%20%3E%60%60%60python%0A%20%20%20%20%20%20%20%20%3EX%5B%3A%2C%200%5D%20%3D%20ce.inverse_transform(country)%20%23%20X%5B%3A%2C%200%5D.astype(int)%0A%20%20%20%20%20%20%20%20%3E%60%60%60%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%23%23%20Case%20of%20multiple%20categories%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20sklearn.compose%20import%20ColumnTransformer%0A%20%20%20%20return%20(ColumnTransformer%2C)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%5Bhttps%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.compose.ColumnTransformer.html%5D(https%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.compose.ColumnTransformer.html)%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20sklearn.preprocessing%20import%20OneHotEncoder%0A%20%20%20%20return%20(OneHotEncoder%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%5Bhttps%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.preprocessing.OneHotEncoder.html%23sklearn.preprocessing.OneHotEncoder%5D(https%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.preprocessing.OneHotEncoder.html%23sklearn.preprocessing.OneHotEncoder)%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ColumnTransformer%2C%20OneHotEncoder)%3A%0A%20%20%20%20ct%20%3D%20ColumnTransformer(transformers%3D%5B('encoder'%2C%20OneHotEncoder()%2C%20%5B0%5D)%5D%2C%20remainder%3D'passthrough')%0A%20%20%20%20ct%0A%20%20%20%20return%20(ct%2C)%0A%0A%0A%40app.cell%0Adef%20_(X_1%2C%20ct%2C%20np)%3A%0A%20%20%20%20X_2%20%3D%20np.array(ct.fit_transform(X_1))%0A%20%20%20%20return%20(X_2%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Display%20%60X%60%20after%20being%20encoded%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X_2)%3A%0A%20%20%20%20print(X_2)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22_REMARK_%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20z%20%3D%20%5B%5B'Python'%5D%2C%20%5B'Julia'%5D%2C%20%5B'Rust'%5D%2C%20%5B'JavaScript'%5D%5D%0A%20%20%20%20Z%20%3D%20%5B3%20*%20_%20for%20_%20in%20z%5D%0A%20%20%20%20Z%0A%20%20%20%20return%20Z%2C%20z%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20sklearn.preprocessing%20import%20OrdinalEncoder%0A%20%20%20%20return%20(OrdinalEncoder%2C)%0A%0A%0A%40app.cell%0Adef%20_(ColumnTransformer%2C%20OneHotEncoder%2C%20OrdinalEncoder)%3A%0A%20%20%20%20ctz%20%3D%20ColumnTransformer(transformers%3D%5B('oe'%2C%20OrdinalEncoder()%2C%20%5B2%5D)%2C%20('ohe'%2C%20OneHotEncoder()%2C%20%5B0%5D)%5D%2C%20remainder%3D'passthrough')%0A%20%20%20%20ctz%0A%20%20%20%20return%20(ctz%2C)%0A%0A%0A%40app.cell%0Adef%20_(Z%2C%20ctz)%3A%0A%20%20%20%20ctz.fit_transform(Z)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%23%20Splitting%20the%20dataset%20into%20training%20set%20and%20test%20set%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(r%22%22%22%5Bhttps%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.model_selection.train_test_split.html%5D(https%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.model_selection.train_test_split.html)%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20sklearn.model_selection%20import%20train_test_split%0A%20%20%20%20return%20(train_test_split%2C)%0A%0A%0A%40app.cell%0Adef%20_(X_2%2C%20train_test_split%2C%20y_1)%3A%0A%20%20%20%20(X_train%2C%20X_test%2C%20y_train%2C%20y_test)%20%3D%20train_test_split(X_2%2C%20y_1%2C%20train_size%3D0.8%2C%20random_state%3D123)%0A%20%20%20%20return%20X_test%2C%20X_train%2C%20y_test%2C%20y_train%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Print%20%60y_train%60%20which%20is%20%2480%5C%25%24%20of%20the%20target%20variable%20%60y%60%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(y_train)%3A%0A%20%20%20%20print(y_train)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Print%20%60y_test%60%20which%20is%20%2420%5C%25%24%20of%20the%20target%20variable%20%60y%60%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(y_test)%3A%0A%20%20%20%20print(y_test)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%23%20Scaling%20of%20features%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(r%22%22%22%5Bhttps%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.preprocessing.StandardScaler.html%5D(https%3A%2F%2Fscikit-learn.org%2Fstable%2Fmodules%2Fgenerated%2Fsklearn.preprocessing.StandardScaler.html)%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(StandardScaler)%3A%0A%20%20%20%20sc%20%3D%20StandardScaler()%0A%20%20%20%20return%20(sc%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%60X_train%60%20after%20scaling%20*(fit%20%26%20transform%2C%20mean%20%24%5Cmu%24%20%26%20standard%20deviation%20%24%5Csigma%24%20are%20stored%20to%20be%20later%20used%20to%20transform%20the%20test%20set)*%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X_train%2C%20sc)%3A%0A%20%20%20%20X_train%5B%3A%2C%203%3A%5D%20%3D%20sc.fit_transform(X_train%5B%3A%2C%203%3A%5D)%0A%20%20%20%20print(X_train)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%60X_test%60%20after%20scaling%20*(only%20transform)*%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X_test%2C%20sc)%3A%0A%20%20%20%20X_test%5B%3A%2C%203%3A%5D%20%3D%20sc.transform(X_test%5B%3A%2C%203%3A%5D)%0A%20%20%20%20print(X_test)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20(mo%2C)%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
36b241c3dc0fd3c1ed5ad049a54c653289fed07759213ca7af819deb2c842511