{"cells":[{"metadata":{"colab_type":"text","id":"v5Fj-ahf25os","_uuid":"624616b27797186d560b74b12504d5d48f0f1f0b"},"cell_type":"markdown","source":"# Homework #01: Machine Learning Libraries"},{"metadata":{"colab_type":"text","id":"9S8tqIMG25pb","_uuid":"9d8da3d1765d03ed8541e08b304d9b25257db6d7"},"cell_type":"markdown","source":"### Часть 3. Обучение kNN для Titanic (30%)"},{"metadata":{"colab":{"autoexec":{"startup":false,"wait_interval":0}},"colab_type":"code","id":"VF2CeR7W25pt","trusted":true,"_uuid":"a0fa60683c384255d6e7633741b09def17b2cc20"},"cell_type":"code","source":"# Скачайте train и test выборку датасета Titanic (также доступно в материалах семинара)\n# и прочитайте с помощью pandas\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nimport os\n# List data files that are connected to the kernel\nos.listdir('../input/')\n\nsns.set_style(\"whitegrid\")\n%matplotlib inline\n\ntrain = pd.read_csv(\"../input/train.csv\")\ntest = pd.read_csv(\"../input/test.csv\")\n\nprint(type(train), \"Dimensions of 'train' dataset:\", np.ndim(train))\nprint(\"Shape of 'train' dataset:\", np.shape(train), \"\\n\")\n\nprint(type(test), \"Dimensions of 'test' dataset:\", np.ndim(test))\nprint(\"Shape of 'test' dataset:\", np.shape(test), \"\\n\")\n\ntrain.head()\n\n# Imbalanced Classification Problem: Accuracy Paradox so using Cohen’s Kappa coefficient for metric\n# ct = pd.crosstab(train.Survived, train.Sex, margins=True, normalize = 'columns')\nprint(\"Binary Class 'Survived' is Imbalanced !!!!!\", \"\\n\", train.Survived.value_counts() / np.shape(train)[0])\n\nsns.catplot(x=\"Sex\", y=\"Survived\", kind=\"violin\", data=train, jitter=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b641bfe2a044fdcf189c9ac74d9a55afb8b175a5"},"cell_type":"code","source":"# Почистите / предобработайте данные в формате для sklearn (отдельно - X, отдельно - Y)\ntest_passengerids = test[\"PassengerId\"]\n\ndef preprocess_data(data):\n    columns_to_drop = [\"Ticket\", \"PassengerId\", \"Name\", \"Cabin\"]\n    data.drop(columns_to_drop, axis=1, inplace=True)\n\n    data[\"Sex\"] = (data[\"Sex\"] == \"female\").astype(int)\n    data[\"Embarked\"] = data[\"Embarked\"].map({\"S\":0, \"C\":1, \"Q\":2})\n\n    data.fillna(-1, inplace=True)\n    \npreprocess_data(train)\npreprocess_data(test)\n\nlabels = train[\"Survived\"]\ntrain.drop(\"Survived\", axis=1, inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"debfd0c185b5e86fe40a10fb9673d523c013f1db"},"cell_type":"code","source":"# Обучите классификатор kNN на train и оцените качество с помощью cross_val_score\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.model_selection import cross_val_score\n\n\nknn = KNeighborsClassifier(metric = \"manhattan\")\nknn.fit(train, labels)\ncross_val_scores = cross_val_score(knn, train, labels, scoring=\"accuracy\", cv=5)\nprint(\"Accuracy on Validation Sets =\", cross_val_scores)\nprint(\"Mean and SD of Accuracy on Validation Sets =\", cross_val_scores.mean(), cross_val_scores.std())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5fb1dfa707d48a67e2bec23dd998066998e79bb7"},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.metrics import cohen_kappa_score\n\nnp.random.seed(2019)\nXtrain, Xtest, ytrain, ytest = train_test_split(train, labels, train_size=0.7)\nknn.fit(Xtrain, ytrain)\ncross_val_scores = cross_val_score(knn, train, labels, scoring=\"accuracy\", cv=5)\nprint(\"Accuracy on Validation Sets =\", cross_val_scores)\nprint(\"Mean and SD of Accuracy on Validation Sets =\", cross_val_scores.mean(), cross_val_scores.std(), \"\\n\")\npredictions = knn.predict(Xtest)\n# print(type(predictions)) # <class 'numpy.ndarray'>\n# print(predictions)\n# print(type(ytest)) # <class 'pandas.core.series.Series'>\n# print(ytest)\n\n# Accuracy\nprint(\"Accuracy on Test Set =\", accuracy_score(y_true=ytest, y_pred=predictions), \"\\n\")\n\n# Cohen’s Kappa coefficient\nprint(\"Cohen’s Kappa on Test Set =\", cohen_kappa_score(y1=ytest, y2=predictions))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fd37993d01a2d94275a81a539bdb205532a9f729"},"cell_type":"code","source":"# Добейтесь качества 0.7 по метрике accuracy локально, за счет добавления новых факторов\nprint(id(train))\ntrain_new_features = train.copy()\nprint(id(train_new_features))\n\ntrain_new_features [\"Sex_Age\"] = train_new_features.Sex*train_new_features.Age\ntrain_new_features [\"Age_Pclass\"] = train_new_features.Age*train_new_features.Pclass\n# train_new_features [\"Embarked_Sex\"] = train_new_features.Embarked*train_new_features.Sex\ntrain_new_features [\"SibSp_Parch\"] = train_new_features.SibSp*train_new_features.Parch\n\nnp.random.seed(2019)\nXtrain, Xtest, ytrain, ytest = train_test_split(train_new_features, labels, train_size=0.7)\nknn.fit(Xtrain, ytrain)\ncross_val_scores = cross_val_score(knn, train, labels, scoring=\"accuracy\", cv=5)\nprint(\"Accuracy on Validation Sets =\", cross_val_scores)\nprint(\"Mean amd SD of Accuracy on Validation Sets =\", cross_val_scores.mean(), cross_val_scores.std(), \"\\n\")\n\npredictions = knn.predict(Xtest)\n\n# Accuracy\nprint(\"Accuracy on Test Set =\", accuracy_score(y_true=ytest, y_pred=predictions), '\\n')\n\n# Cohen’s Kappa coefficient\nprint(\"Cohen’s Kappa on Test Set =\", cohen_kappa_score(y1=ytest, y2=predictions))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"64663ebdde03022fedd1a9a68dd96ea63d8551ba"},"cell_type":"code","source":"# Берем проверочный набор данных и обогащаем его производными предикторами\ntest0 = pd.read_csv(\"../input/test.csv\")\n\ntest0.head()\n\ntest_new_features = test0.copy()\npreprocess_data(test_new_features)\ntest_new_features[\"Sex_Age\"] = test_new_features.Sex*test_new_features.Age\ntest_new_features[\"Age_Pclass\"] = test_new_features.Age*test_new_features.Pclass\n# test_new_features[\"Embarked_Sex\"] = test_new_features.Embarked*test_new_features.Sex\ntest_new_features[\"SibSp_Parch\"] = test_new_features.SibSp*test_new_features.Parch\n\npredictions0 = knn.predict(test_new_features)\n\ndf = pd.DataFrame({'Survived':predictions0.astype(int)})\n\nresult = pd.concat([test0.take([0], axis=1), df], axis=1) # , test.loc[:, test.columns != 'PassengerId']], axis=1)\n# result.to_csv('c:/Temp/predictions.csv', index=False)","execution_count":null,"outputs":[]}],"metadata":{"colab":{"collapsed_sections":["dKCiU0wz25pj","9MKHZ2JC25pv","VYogShkD25qD","p41xvYTU25qK"],"default_view":{},"name":"HW1_Logistic_regression_and_SVM.ipynb","provenance":[],"version":"0.3.2","views":{}},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}