{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"from sklearn.preprocessing import MinMaxScaler, QuantileTransformer, OneHotEncoder\nfrom sklearn.compose import make_column_transformer\nfrom sklearn.model_selection import GridSearchCV\nfrom sklearn.pipeline import make_pipeline\nfrom sklearn.impute import SimpleImputer\nfrom matplotlib import pyplot as plt\nfrom sklearn.svm import SVC\nimport seaborn as sns\nimport pandas as pd","metadata":{"pycharm":{"name":"#%%\n"},"execution":{"iopub.status.busy":"2022-08-07T00:51:11.676076Z","iopub.execute_input":"2022-08-07T00:51:11.676546Z","iopub.status.idle":"2022-08-07T00:51:11.684484Z","shell.execute_reply.started":"2022-08-07T00:51:11.676510Z","shell.execute_reply":"2022-08-07T00:51:11.683114Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv('../input/titanic/train.csv')\ntest_df = pd.read_csv('../input/titanic/test.csv')","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2022-08-07T00:51:11.760227Z","iopub.execute_input":"2022-08-07T00:51:11.761577Z","iopub.status.idle":"2022-08-07T00:51:11.776893Z","shell.execute_reply.started":"2022-08-07T00:51:11.761527Z","shell.execute_reply":"2022-08-07T00:51:11.775913Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, ax = plt.subplots(3, 3, figsize=(25, 20))\nax = ax.flatten()\nfor i, v in enumerate(train_df.drop(columns=['PassengerId', 'Name', 'Cabin', 'Ticket']).columns):\n    sns.histplot(\n        data=train_df,\n        x=v,\n        ax=ax[i],\n        kde=True,\n        hue='Survived'\n    )","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2022-08-07T00:51:11.811517Z","iopub.execute_input":"2022-08-07T00:51:11.812150Z","iopub.status.idle":"2022-08-07T00:51:14.948270Z","shell.execute_reply.started":"2022-08-07T00:51:11.812114Z","shell.execute_reply":"2022-08-07T00:51:14.946965Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Based on the above graphs the Age, SibSp, Parch, and Fare features are not gaussian distributed we can try to transform them","metadata":{"pycharm":{"name":"#%% md\n"}}},{"cell_type":"code","source":"fig, ax = plt.subplots(2, 2, figsize=(25, 20))\nax = ax.flatten()\nfor i, v in enumerate(['Age', 'SibSp', 'Parch', 'Fare']):\n    qt = QuantileTransformer(output_distribution='normal', n_quantiles=800)\n    x = train_df[v].to_numpy()\n    x = x.reshape(-1, 1)\n    x = qt.fit_transform(x).flatten()\n    ax[i].set_title(v)\n    sns.histplot(\n        data=train_df,\n        x=x,\n        ax=ax[i],\n        kde=True\n    )","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n"},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2022-08-07T00:51:14.950296Z","iopub.execute_input":"2022-08-07T00:51:14.950711Z","iopub.status.idle":"2022-08-07T00:51:15.870047Z","shell.execute_reply.started":"2022-08-07T00:51:14.950673Z","shell.execute_reply":"2022-08-07T00:51:15.868705Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"We can notice that Fare, and Age can be transformed using Quantile transformer","metadata":{"pycharm":{"name":"#%% md\n"}}},{"cell_type":"code","source":"sns.pairplot(\n    data=train_df.drop(columns=['Name', 'Cabin', 'Ticket', 'PassengerId']),\n    dropna=True,\n    hue='Survived',\n    diag_kind='kde',\n    kind='reg'\n)","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n","is_executing":true},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2022-08-07T00:51:15.871303Z","iopub.execute_input":"2022-08-07T00:51:15.872543Z","iopub.status.idle":"2022-08-07T00:51:26.918826Z","shell.execute_reply.started":"2022-08-07T00:51:15.872500Z","shell.execute_reply":"2022-08-07T00:51:26.917469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, ax = plt.subplots(1, 1)\nsns.heatmap(\n    train_df.drop(columns=['PassengerId', 'Cabin', 'Ticket', 'Name']).corr(),\n    annot=True,\n    ax=ax\n)","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n","is_executing":true},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2022-08-07T00:51:26.921191Z","iopub.execute_input":"2022-08-07T00:51:26.921596Z","iopub.status.idle":"2022-08-07T00:51:27.302059Z","shell.execute_reply.started":"2022-08-07T00:51:26.921559Z","shell.execute_reply":"2022-08-07T00:51:27.300734Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"age_fare_pipeline = make_pipeline(\n    SimpleImputer(strategy='mean'),\n    QuantileTransformer(n_quantiles=800, output_distribution='normal'),\n    MinMaxScaler(),\n)\n\nembarked_pipeline = make_pipeline(\n    SimpleImputer(strategy='most_frequent'),\n    OneHotEncoder()\n)\n\ndata_preprocessor = make_column_transformer(\n    (age_fare_pipeline, ['Age', 'Fare']),\n    (embarked_pipeline, ['Embarked']),\n    (MinMaxScaler(), ['Pclass', 'SibSp', 'Parch']),\n    (OneHotEncoder(), ['Sex']),\n)","metadata":{"collapsed":false,"pycharm":{"name":"#%%\n","is_executing":true},"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2022-08-07T00:51:27.303736Z","iopub.execute_input":"2022-08-07T00:51:27.304106Z","iopub.status.idle":"2022-08-07T00:51:27.312073Z","shell.execute_reply.started":"2022-08-07T00:51:27.304074Z","shell.execute_reply":"2022-08-07T00:51:27.310506Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"training_pipline = make_pipeline(data_preprocessor, SVC())\nmodel = GridSearchCV(\n    estimator=training_pipline,\n    n_jobs=-1,\n    cv=10,\n    param_grid={\n        'svc__C': [0.01, 0.03, 0.1, 0.3, 1, 3],\n        'svc__kernel': ['linear', 'poly', 'rbf', 'sigmoid'],\n        'svc__degree': [1, 2, 3, 4],\n        'svc__class_weight': [{0: 1, 1:i} for i in range(1, 3)]\n    },\n).fit(train_df, train_df.Survived.to_numpy())","metadata":{"execution":{"iopub.status.busy":"2022-08-07T00:51:27.313954Z","iopub.execute_input":"2022-08-07T00:51:27.314330Z","iopub.status.idle":"2022-08-07T00:52:22.296065Z","shell.execute_reply.started":"2022-08-07T00:51:27.314296Z","shell.execute_reply":"2022-08-07T00:52:22.294572Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions = model.predict(test_df)\npd.DataFrame({\n    'PassengerId': test_df.PassengerId.to_numpy(),\n    'Survived': predictions\n}).to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-07T00:52:22.298156Z","iopub.execute_input":"2022-08-07T00:52:22.298598Z","iopub.status.idle":"2022-08-07T00:52:22.332200Z","shell.execute_reply.started":"2022-08-07T00:52:22.298559Z","shell.execute_reply":"2022-08-07T00:52:22.331271Z"},"trusted":true},"execution_count":null,"outputs":[]}]}