{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Basic Imports"},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n\nimport tensorflow as tf\nimport tensorflow.keras as keras\nimport tensorflow.keras.layers as layers\n\nimport random\nimport os","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Seed all"},{"metadata":{"trusted":true},"cell_type":"code","source":"def seed_all(seed = 2016):\n    os.environ['PYTHONHASHSEED']=str(seed)\n    random.seed(seed)\n    np.random.seed(seed)\n    tf.random.set_seed(seed)\n    \nseed_all(5)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Get data"},{"metadata":{"trusted":true},"cell_type":"code","source":"df_data_input = pd.read_csv('/kaggle/input/osic-pulmonary-fibrosis-progression/train.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_data_input.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X = df_data_input.iloc[:, np.r_[1:2, 4:7]].values\nprint(X)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y = df_data_input.iloc[:, 2:3].values\nprint(y)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Data preprocessing"},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder, OneHotEncoder\nfrom sklearn.compose import ColumnTransformer\n\nlblEncoder = LabelEncoder()\nX[:, 2] = lblEncoder.fit_transform(X[:, 2])\n\nprint(X)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), [3])], remainder='passthrough')\nX = np.array(columnTransformer.fit_transform(X), dtype = np.str)\nX = X[:, 1:]\n\nprint(X)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler\nsc = StandardScaler()\nX = sc.fit_transform(X)\n\nprint(X)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sc_out = StandardScaler()\ny = sc_out.fit_transform(y)\n\nprint(y)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Build tensorflow model"},{"metadata":{"trusted":true},"cell_type":"code","source":"data_input = keras.Input(shape=(5,), name='data_input')\nx = layers.Dense(256, activation=\"relu\")(data_input)\nx = layers.Dense(128, activation=\"relu\")(x)\nx = layers.Dense(128, activation=\"relu\")(x)\ndata_output = layers.Dense(1, name='data_output')(x)\n\ndata_model = keras.Model(inputs=data_input, outputs=data_output, name=\"data_model\")\n\ndata_model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data_model.compile(\n    optimizer=keras.optimizers.Adam(learning_rate=0.001),\n    loss='mean_absolute_error')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Train model"},{"metadata":{"trusted":true},"cell_type":"code","source":"history = data_model.fit(X_train, y_train, batch_size=64, epochs=300, validation_split=0.2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nplt.plot(history.history['loss'], label='loss')\nplt.plot(history.history['val_loss'], label='val_loss')\nplt.ylim([0, 1])\nplt.xlabel('Epoch')\nplt.ylabel('Error [FVC]')\nplt.legend()\nplt.grid(True)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Check results"},{"metadata":{"trusted":true},"cell_type":"code","source":"test_results = {}\n\ntest_results['FVC'] = data_model.evaluate(\n    X_test,\n    y_test)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# MODEL ACCURACY"},{"metadata":{"trusted":true},"cell_type":"code","source":"acc = 100-(test_results['FVC'] / y_test.mean())\n\nprint('MODEL ACCURACY: ', str(round(acc, 2)), '%')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Prepare submission"},{"metadata":{"trusted":true},"cell_type":"code","source":"base_dir = '/kaggle/input/osic-pulmonary-fibrosis-progression'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_baseline = pd.read_csv(os.path.join(base_dir, 'test.csv'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission_baseline.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sub_img_data_raw = []\n\nfor index, row in submission_baseline.iterrows():\n    for i in range(-12, 134):\n        sub_img_data_raw.append([\n            row['Patient'], \n            i, \n            row['Age'],\n            row['Sex'],\n            row['SmokingStatus'],\n            None,\n        ])\n        \nprint('FINISHED!!!')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_data_sub = np.array(sub_img_data_raw)\nX_data_sub_orig = np.array(sub_img_data_raw)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_data_sub = np.delete(X_data_sub,0, 1)\nX_data_sub = np.delete(X_data_sub,4, 1)\nX_data_sub","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_data_sub[:, 2] = lblEncoder.transform(X_data_sub[:, 2])\n\nprint(X_data_sub)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_data_sub = np.array(columnTransformer.transform(X_data_sub), dtype = np.str)\nX_data_sub = X_data_sub[:, 1:]\n\nprint(X_data_sub)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_data_sub = sc.transform(X_data_sub)\n\nprint(X_data_sub)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_data_sub = np.asarray(X_data_sub, dtype=np.float)\n\nX_data_sub.shape","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Make prediction over submission data"},{"metadata":{"trusted":true},"cell_type":"code","source":"y_sub_pred = data_model.predict(X_data_sub)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_sub_pred = sc_out.inverse_transform(y_sub_pred)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_sub_pred","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Send submission"},{"metadata":{"trusted":true},"cell_type":"code","source":"final = []\nfor i in range(0, X_data_sub_orig.shape[0]):\n    final.append([str(X_data_sub_orig[i][0]) + '_' + str(X_data_sub_orig[i][1]), y_sub_pred[i][0], round(acc, 2)])\n\ndf_final = pd.DataFrame(final, columns=['Patient_Week','FVC','Confidence'])\ndf_final","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_final.to_csv('submission.csv', index=False, float_format='%.20f')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}