{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import scipy\nimport pandas as pd\nfrom sklearn.linear_model import LogisticRegression","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Load data"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"D0 = pd.read_csv(\"/kaggle/input/cat-in-the-dat-ii/train.csv\", index_col=\"id\")\nD_test = pd.read_csv(\"/kaggle/input/cat-in-the-dat-ii/test.csv\", index_col=\"id\")\n\ny_train = D0[\"target\"]\nD = D0.drop(columns=\"target\")\ntest_ids = D_test.index\n\nD_all = pd.concat([D, D_test])\nnum_train = len(D)\n\nprint(f\"D_all.shape = {D_all.shape}\")        ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Map value in train xor test"},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"for col in D.columns.difference([\"id\"]):\n    train_vals = set(D[col].dropna().unique())\n    test_vals = set(D_test[col].dropna().unique())\n\n    xor_cat_vals = train_vals ^ test_vals\n    if xor_cat_vals:\n        print(f\"Replacing {len(xor_cat_vals)} values in {col}, {xor_cat_vals}\")\n        D_all.loc[D_all[col].isin(xor_cat_vals), col] = \"xor\"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Info for ordinal encoding"},{"metadata":{"trusted":true},"cell_type":"code","source":"ord_maps = {\n    \"ord_0\": {val: i for i, val in enumerate([1, 2, 3])},\n    \"ord_1\": {\n        val: i\n        for i, val in enumerate(\n            [\"Novice\", \"Contributor\", \"Expert\", \"Master\", \"Grandmaster\"]\n        )\n    },\n    \"ord_2\": {\n        val: i\n        for i, val in enumerate(\n            [\"Freezing\", \"Cold\", \"Warm\", \"Hot\", \"Boiling Hot\", \"Lava Hot\"]\n        )\n    },\n    **{col: {val: i for i, val in enumerate(sorted(D_all[col].dropna().unique()))} for col in [\"ord_3\", \"ord_4\", \"ord_5\", \"day\", \"month\"]},\n}","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# OneHot encoding"},{"metadata":{"trusted":true},"cell_type":"code","source":"oh_cols = D_all.columns.difference(ord_maps.keys() - {\"day\", \"month\"})\n\nprint(f\"OneHot encoding {len(oh_cols)} columns\")\n\none_hot = pd.get_dummies(\n    D_all[oh_cols],\n    columns=oh_cols,\n    drop_first=True,\n    dummy_na=True,\n    sparse=True,\n    dtype=\"int8\",\n).sparse.to_coo()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Ordinal encoding"},{"metadata":{"trusted":true},"cell_type":"code","source":"ord_cols = pd.concat([D_all[col].map(ord_map).fillna(max(ord_map.values())//2).astype(\"float32\") for col, ord_map in ord_maps.items()], axis=1)\nord_cols /= ord_cols.max()  # for convergence\n\nord_cols_sqr = 4*(ord_cols - 0.5)**2","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Combine data"},{"metadata":{"trusted":true},"cell_type":"code","source":"X = scipy.sparse.hstack([one_hot, ord_cols, ord_cols_sqr]).tocsr()\nprint(f\"X.shape = {X.shape}\")\n\nX_train = X[:num_train]\nX_test = X[num_train:]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Make submission"},{"metadata":{"trusted":true},"cell_type":"code","source":"clf=LogisticRegression(C=0.05, solver=\"lbfgs\", max_iter=5000)\n\nclf.fit(X_train, y_train)\n\npred = clf.predict_proba(X_test)[:, 1]\n\npd.DataFrame({\"id\": test_ids, \"target\": pred}).to_csv(\"submission.csv\", index=False)","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":1}