{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport keras\n\nfrom keras.utils.np_utils import to_categorical\nfrom sklearn.preprocessing import LabelEncoder\n#pandas - для работы с данными, с csv\n#sklearn - для преобразования текста в числа и обратно\nimport os\n\nos.system(\"ls ../input\")","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"#кодировщик labels(class_1, class_2...)\nlabel_encoder = LabelEncoder()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6d6681ba7e922e481c8be578a6c5475f94337465"},"cell_type":"code","source":"train_df= pd.read_csv(\"../input/train.csv\")\ntest_df = pd.read_csv(\"../input/test.csv\")\nsubmit_df = pd.read_csv(\"../input/sampleSubmission.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8871d3c1f04fdc5e5381714a2335d5fc9130a007"},"cell_type":"code","source":"#вывести название столбцов\nprint(train_df.columns)\nprint(test_df.columns)\nprint(submit_df.columns)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"838206c8756ca2e1e5568a2cbd261fec6ca95e1f"},"cell_type":"code","source":"#разделить обучающий набор данных на data и target без колонки id\ndata = train_df.drop(['target', 'id'], axis=1)\ntarget = train_df['target']\nencoded_target = label_encoder.fit_transform(target)\none_hot_target = to_categorical(encoded_target)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ff22dbb01b6c58cde90f23ec345f1beac1d032e2"},"cell_type":"code","source":"#удалить колонку 'id' в  тестовом наборе данных\ntest_df = test_df.drop(['id'], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1fa5b3f38aa538487180c76b93257c0408ea4e25"},"cell_type":"code","source":"#вывести итоговые размеры таблиц\nprint(data.shape)\nprint(one_hot_target.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0ccaaac435fac28e771bd452c0a3fa2343288a7a"},"cell_type":"code","source":"#разбить обучающий dataset для cross-validation (4/5 для train и 1/5 для test)\nfrom sklearn.model_selection import train_test_split\n\nx_train, x_test, y_train, y_test = train_test_split(data.index, one_hot_target, test_size=0.2, random_state=0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"51074d669e66165125ae917f370746bbcbfa30c4"},"cell_type":"code","source":"#вывести результат разбиения\nprint(\"train size: {0}, test shape: {1}\".format(x_train.shape, x_test.shape))\nprint(data.iloc[x_train])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1ed844de1532424fda8eea51fa96ee8e89b30a77"},"cell_type":"code","source":"# создать небольшую модель нейронной сети\nfrom keras.models import Sequential\nfrom keras.layers import Dense\n\nmodel = Sequential()\nmodel.add(Dense(units=30, activation='relu', input_dim=data.shape[1]))\nmodel.add(Dense(units=10, activation='relu'))\nmodel.add(Dense(units=9, activation='softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"569a5ed1b8d9bfd89dc2dbc2276547924c921fbb"},"cell_type":"code","source":"# обучить модель с помощью train dataset\nmodel.fit(data.iloc[x_train], y_train, epochs=50, batch_size=32)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d783e6e3245a99125280aad6bc5de1d71a42c186"},"cell_type":"code","source":"scores = model.evaluate(data.iloc[x_test], y_test)\n# точность: ~ 77-79% (для небольшой нейронной сети, 4/5 от train dataset и 50 epochs)\nprint(\"%s: %.2f%%\" % (model.metrics_names[1], scores[1]*100))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9e54b30f7a94b313d98ffd9d7c478e6acb53ff29"},"cell_type":"code","source":"#преобразовать обратно в labels\npredicted_test = model.predict(data.iloc[x_test], batch_size=32)\nprint(label_encoder.inverse_transform(list(map(np.argmax, predicted_test))))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ec789d5dfa0541d99e2d08dcb8850fcd9087bf59"},"cell_type":"code","source":"# вывести вероятности\nprint(predicted_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f442301c5207dea63ec7e3df98a5a7cda7d563fe"},"cell_type":"code","source":"#обучить модель на полном train dataset\nmodel.fit(data, one_hot_target, epochs=50, batch_size=32)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0af271e7027be0dd810555bc611e67657c103001"},"cell_type":"code","source":"# предсказать вероятности\npredicted_targets = model.predict(test_df, batch_size=32)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e80b3b7ae6c368b64ddf2a0ebd8049f1b4f0a14c"},"cell_type":"code","source":"# вывести вероятости\nprint(predicted_targets)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c652b9cd098d5d1f0f8081d2489c53c7b924e741"},"cell_type":"code","source":"# проверить кэшированные labels в label_encoder\nlabel_encoder.classes_","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d80e7969da30075aafaafcba6922d812f10395ea"},"cell_type":"code","source":"# добавить итоговые вероятности в таблицу\nsubmit_df[label_encoder.classes_] = predicted_targets\n#и вывести результирующую таблицу\nsubmit_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fe9ea09a52a7bb9c33fd2c40b467fb7c9e5da66a"},"cell_type":"code","source":"# сохранить результат\nsubmit_df.to_csv('prediction.csv', index = False)","execution_count":null,"outputs":[]}],"metadata":{"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}