{"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":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-08-11T13:46:09.727488Z","iopub.execute_input":"2022-08-11T13:46:09.727984Z","iopub.status.idle":"2022-08-11T13:46:09.738878Z","shell.execute_reply.started":"2022-08-11T13:46:09.727945Z","shell.execute_reply":"2022-08-11T13:46:09.737528Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import  OneHotEncoder\nfrom sklearn.impute import SimpleImputer\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\n\n\n# Setup plotting\nplt.style.use('seaborn-whitegrid')\n# Set Matplotlib defaults\nplt.rc('figure', autolayout=True)\nplt.rc('axes', labelweight='bold', labelsize='large',\n       titleweight='bold', titlesize=18, titlepad=10)\nplt.rc('animation', html='html5')\n\n\n","metadata":{"execution":{"iopub.status.busy":"2022-08-11T13:46:09.744621Z","iopub.execute_input":"2022-08-11T13:46:09.745604Z","iopub.status.idle":"2022-08-11T13:46:18.520388Z","shell.execute_reply.started":"2022-08-11T13:46:09.745535Z","shell.execute_reply":"2022-08-11T13:46:18.519259Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = pd.read_csv('/kaggle/input/titanic/train.csv')\ntest_data = pd.read_csv('/kaggle/input/titanic/test.csv')\nprint(train_data.shape,test_data.shape)\n\nX = train_data.copy()\nX_test = test_data.copy()\n#select Survived as my goal predict feature\ny = X.pop('Survived')\n","metadata":{"execution":{"iopub.status.busy":"2022-08-11T13:46:18.522708Z","iopub.execute_input":"2022-08-11T13:46:18.523584Z","iopub.status.idle":"2022-08-11T13:46:18.566360Z","shell.execute_reply.started":"2022-08-11T13:46:18.523534Z","shell.execute_reply":"2022-08-11T13:46:18.565353Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#///////////////////////// prepare data //////////////////////\n\n#drop the name feature as it's not Useful for the train of the model\nX_withoutName = X.drop('Name',axis=1)\n\n# Number of missing values in each column of training data\nmissing_val_counts = (X_withoutName.isnull().sum())\n#print(\"sum of Columns with NaN is :\\n\",missing_val_counts[missing_val_counts > 0])\n\n#filling missing value in Age with the mean value       \nX_withoutName.Age = X_withoutName.Age.fillna(29.67)\n    \n#Drop the Cabin column as it has most of it NaN value\nX_withoutName = X_withoutName.drop('Cabin',axis=1)\n\n#filling missing value in Embarked with the most frequent value\nX_withoutName.Embarked = X_withoutName.Embarked.fillna('S')\n\nX_train, X_valid, y_train, y_valid = train_test_split(X_withoutName, y, stratify=y, train_size=0.80)\n\n#drop the ticket columns as it's so hard to encode\nX_train = X_train.drop('Ticket',axis=1)\nX_valid = X_valid.drop('Ticket',axis=1)\n\n#prepare test data\n#droping the unuse features \ntest_data1 = X_test.drop(['Name','Ticket','Cabin'],axis=1)\n\n#filling missing value in Age with the mean value \ntest_data1.Age = test_data1.Age.fillna(30.27)\ntest_data1.Fare = test_data1.Fare.fillna(35.63)\n\n# get the columns with text values\ns = (X_train.dtypes == 'object')\nobject_cols = list(s[s].index)\nprint(\"Categorical variables:\")\nprint(object_cols,\"\\n\")\n\n\n\n#encoding the data with one hot Encoder\nm_encoder = OneHotEncoder(handle_unknown='ignore',sparse=False)\n \nencoded_train_data = pd.DataFrame(m_encoder.fit_transform(X_train[object_cols]))\nencoded_valid_data = pd.DataFrame(m_encoder.fit_transform(X_valid[object_cols]))\nencoded_test_data = pd.DataFrame(m_encoder.fit_transform(test_data1[object_cols]))\n\n#get index back\nencoded_train_data.index = X_train.index\nencoded_valid_data.index = X_valid.index\nencoded_test_data.index = test_data1.index\n\n#remove cols with text\nnew_train_data = X_train.drop(object_cols , axis=1)\nnew_vaild_data = X_valid.drop(object_cols , axis=1)\nnew_test_data = test_data1.drop(object_cols , axis=1)\n\n#add encoder cols to the data\nprepared_train_data = pd.concat([new_train_data,encoded_train_data],axis=1)\nprepared_vaild_data = pd.concat([new_vaild_data,encoded_valid_data],axis=1)\nprepared_test_data = pd.concat([new_test_data,encoded_test_data],axis=1)\n\n\nprint(\"train is :\",prepared_train_data.shape,\"validation data is :\",prepared_vaild_data.shape,\"test data is :\",prepared_test_data.shape,\"\\n\")\n\ninput_shape =  [prepared_train_data.shape[1]]","metadata":{"execution":{"iopub.status.busy":"2022-08-11T13:46:18.567945Z","iopub.execute_input":"2022-08-11T13:46:18.568536Z","iopub.status.idle":"2022-08-11T13:46:18.617370Z","shell.execute_reply.started":"2022-08-11T13:46:18.568503Z","shell.execute_reply":"2022-08-11T13:46:18.616229Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\nfrom sklearn.metrics import mean_absolute_error\nfrom sklearn.tree import DecisionTreeRegressor\nfrom sklearn.metrics import accuracy_score\n\n# build model with Decisiontree Regressor\n\nmode_1 = DecisionTreeRegressor(random_state=1)\nmode_1.fit(prepared_train_data,y_train)\npredicted_y_vaild = mode_1.predict(prepared_vaild_data)\n\npredict_test = mode_1.predict(prepared_test_data)\nmae = mean_absolute_error(y_valid,predicted_y_vaild)\naccurracy = accuracy_score(y_valid,predicted_y_vaild)\n\nmae_train =  mean_absolute_error(y_train,mode_1.predict(prepared_train_data))\naccurracy_train = accuracy_score(y_train,mode_1.predict(prepared_train_data))\n\n\n\nprint(\"MEA validation is: \" ,mae)\nprint(\"MEA train is: \",mae_train)\nprint(\"Accuracy for validation is: \",accurracy*100)\nprint(\"Accuracy for train is: \",accurracy_train*100)","metadata":{"execution":{"iopub.status.busy":"2022-08-11T13:46:18.620674Z","iopub.execute_input":"2022-08-11T13:46:18.622154Z","iopub.status.idle":"2022-08-11T13:46:18.757989Z","shell.execute_reply.started":"2022-08-11T13:46:18.622108Z","shell.execute_reply":"2022-08-11T13:46:18.756641Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# build model with RandomForest Regressor\n\nforest_model = RandomForestClassifier(n_estimators=30, criterion='entropy')\nforest_model.fit(prepared_train_data, y_train)\nmelb_preds = forest_model.predict(prepared_vaild_data)\nMEA_forest = mean_absolute_error(y_valid, melb_preds)\n\nforest_accurracy = forest_model.score(prepared_vaild_data,y_valid)\nforest_accurracy_train = forest_model.score(prepared_train_data, y_train)\npredict_test = forest_model.predict(prepared_test_data)\n\nprint(\"MEA validation is: \",MEA_forest)\nprint(\"MEA train is: \",mean_absolute_error(y_train, forest_model.predict(prepared_train_data)))\nprint(\"Accuracy for validation is: \",forest_accurracy*100)\nprint(\"Accuracy for train is: \",forest_accurracy_train*100)\n\n","metadata":{"execution":{"iopub.status.busy":"2022-08-11T13:46:18.759683Z","iopub.execute_input":"2022-08-11T13:46:18.760175Z","iopub.status.idle":"2022-08-11T13:46:18.887012Z","shell.execute_reply.started":"2022-08-11T13:46:18.760132Z","shell.execute_reply":"2022-08-11T13:46:18.885829Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# build XGBoost model\nfrom xgboost import XGBClassifier\n\nXGBoost_model = XGBClassifier(n_estimators=300, learning_rate=0.01,early_stopping_rounds=5)\nXGBoost_model.fit(prepared_train_data, y_train, \n             eval_set=[(prepared_vaild_data, y_valid)], \n             verbose=False)\npredicted_y_vaild = XGBoost_model.predict(prepared_vaild_data)\nMEA_XGBoost_vaild = mean_absolute_error(y_valid, predicted_y_vaild)\nMEA_XGBoost_train = mean_absolute_error(y_train, XGBoost_model.predict(prepared_train_data))\n\nXGBoost_accurracy = XGBoost_model.score(prepared_vaild_data,y_valid)\nXGBoost_accurracy_train = XGBoost_model.score(prepared_train_data, y_train)\npredict_test = XGBoost_model.predict(prepared_test_data)\n\nprint(\"MEA validation is: \",MEA_XGBoost_vaild)\nprint(\"MEA train is: \",MEA_XGBoost_train)\nprint(\"Accuracy for validation is: \",XGBoost_accurracy*100)\nprint(\"Accuracy for train is: \",XGBoost_accurracy_train*100)\n\n","metadata":{"execution":{"iopub.status.busy":"2022-08-11T13:46:18.888523Z","iopub.execute_input":"2022-08-11T13:46:18.888981Z","iopub.status.idle":"2022-08-11T13:46:20.884411Z","shell.execute_reply.started":"2022-08-11T13:46:18.888949Z","shell.execute_reply":"2022-08-11T13:46:20.883408Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# build model with K- Nearest Neighbours KNN\n\nfrom sklearn.neighbors import KNeighborsClassifier\nKNN_model = KNeighborsClassifier(p=3, n_neighbors=50)\nKNN_model.fit(prepared_train_data, y_train)\npredict_test = KNN_model.predict(prepared_test_data)\n\n\nprint(\"MEA validation is: \", mean_absolute_error(y_valid,KNN_model.predict(prepared_vaild_data) ))\nprint(\"MEA train is: \",mean_absolute_error(y_train,KNN_model.predict(prepared_train_data) ))\nprint(\"Accuracy for validation is: \",KNN_model.score(prepared_vaild_data,y_valid)*100)\nprint(\"Accuracy for train is: \",KNN_model.score(prepared_train_data, y_train)*100)","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2022-08-11T13:46:20.888727Z","iopub.execute_input":"2022-08-11T13:46:20.892113Z","iopub.status.idle":"2022-08-11T13:46:21.120212Z","shell.execute_reply.started":"2022-08-11T13:46:20.892042Z","shell.execute_reply":"2022-08-11T13:46:21.118752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# build model with support vector machine (SVM)\n# import SVC classifier\nfrom sklearn.svm import SVC\nfrom sklearn.metrics import accuracy_score\n\nsvc = SVC(kernel='linear', C=1000.0) \n# fit classifier to training set\nsvc.fit(prepared_train_data,y_train)\n\n# make predictions on test set\npredict_test=svc.predict(prepared_test_data)\n\noutput = pd.DataFrame({\n\"PassengerId\": test_data[\"PassengerId\"],\n\"Survived\": predict_test\n})\noutput.to_csv('submission.csv', index=False)\nprint(\"Your submission was successfully saved!\")\n\nprint(\"MEA validation is: \", mean_absolute_error(y_valid,svc.predict(prepared_vaild_data) ))\nprint(\"MEA train is: \",mean_absolute_error(y_train,svc.predict(prepared_train_data) ))\nprint(\"Accuracy for validation is: \",accuracy_score(y_valid,svc.predict(prepared_vaild_data))*100)\nprint(\"Accuracy for train is: \",accuracy_score( y_train,svc.predict(prepared_train_data))*100)\n","metadata":{"execution":{"iopub.status.busy":"2022-08-11T15:53:00.231730Z","iopub.execute_input":"2022-08-11T15:53:00.232170Z","iopub.status.idle":"2022-08-11T15:53:57.036688Z","shell.execute_reply.started":"2022-08-11T15:53:00.232137Z","shell.execute_reply":"2022-08-11T15:53:57.035513Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#buid my NN Model\n\nmodel = keras.Sequential([\n    layers.BatchNormalization(input_shape=input_shape),\n    \n    layers.Dense(128,activation='relu'),\n    layers.BatchNormalization(),\n    layers.Dropout(rate=0.1),\n    layers.Dense(256,activation='relu'),\n    layers.BatchNormalization(),\n    layers.Dropout(rate=0.4),\n    layers.Dense(256,activation='relu'),\n    layers.BatchNormalization(),\n    layers.Dropout(rate=0.4),\n    layers.Dense(128,activation='relu'),\n    layers.BatchNormalization(),\n    layers.Dropout(rate=0.3), \n    layers.Dense(64,activation='relu'),\n    layers.BatchNormalization(),\n    layers.Dropout(rate=0.2),  \n    layers.Dense(32,activation='relu'),\n    layers.BatchNormalization(),\n    layers.Dropout(rate=0.1),  \n    layers.Dense(16,activation='relu'),\n    layers.BatchNormalization(),\n    layers.Dense(8,activation='relu'),\n    layers.BatchNormalization(),\n    layers.Dense(1, activation='sigmoid'),   \n])\n\nmodel.compile(\n    optimizer='adam',\n    loss='binary_crossentropy',\n    metrics=['binary_accuracy']\n)\n\nearly_stopping = keras.callbacks.EarlyStopping(\n    patience=16,\n    min_delta=0.001,\n    restore_best_weights=True,\n)\nfitting_model = model.fit(\n    prepared_train_data, y_train,\n    validation_data=(prepared_vaild_data, y_valid),\n    batch_size=32,\n    epochs=40,\n    callbacks=[early_stopping],\n)\n\n\nhistory_df = pd.DataFrame(fitting_model.history)\nhistory_df.loc[:, ['loss', 'val_loss']].plot(title=\"Cross-entropy\")\nhistory_df.loc[:, ['binary_accuracy', 'val_binary_accuracy']].plot(title=\"Accuracy\")\n\n# test the model with test data\npredict_test = model.predict(prepared_test_data)\npredict_test = (predict_test > 0.5).astype(int).ravel()\nprint(\"test predictions is: \\n\",predict_test)\n\n# get the accuracy from the train data\nfrom sklearn import metrics\nY_predicted= (model.predict(prepared_train_data) > 0.5).astype(int)\nprint('train Accuracy : ', np.round(metrics.accuracy_score(y_train, Y_predicted)*100,2))\n\nY_predicted_vaild= (model.predict(prepared_vaild_data) > 0.5).astype(int)\nprint('vaildition Accuracy : ', np.round(metrics.accuracy_score(y_valid, Y_predicted_vaild)*100,2))\n\n\n","metadata":{"execution":{"iopub.status.busy":"2022-08-11T14:58:24.151631Z","iopub.execute_input":"2022-08-11T14:58:24.152291Z","iopub.status.idle":"2022-08-11T14:58:39.603207Z","shell.execute_reply.started":"2022-08-11T14:58:24.152234Z","shell.execute_reply":"2022-08-11T14:58:39.601913Z"},"trusted":true},"execution_count":null,"outputs":[]}]}