{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import scipy\nimport pandas as pd\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.preprocessing import OneHotEncoder, OrdinalEncoder\nfrom sklearn.compose import make_column_transformer\nfrom sklearn.pipeline import make_union, make_pipeline\nfrom sklearn.preprocessing import MinMaxScaler, FunctionTransformer\nfrom sklearn.model_selection import cross_validate\nfrom statistics import mean, stdev\nfrom math import sqrt\nimport category_encoders as ce","execution_count":null,"outputs":[]},{"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","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ordinal_order = {\n    #\"ord_0\": [1.0, 2.0, 3.0],\n    \"ord_1\": [\"Novice\", \"Contributor\", \"Expert\", \"Master\", \"Grandmaster\"],\n    #\"ord_2\": [\"Freezing\", \"Cold\", \"Warm\", \"Hot\", \"Boiling Hot\", \"Lava Hot\"],\n    **{col: sorted(D[col].dropna().unique()) for col in [\"ord_3\", \"ord_4\", \"ord_5\"]}, #\"day\", \"month\",\n}\n\nfor k, vals in ordinal_order.items():\n    vals.insert(len(vals)//2, \"nan\")\n    ordinal_order[k] = list(map(str, vals))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"target_encs = {\"nom_6\": ce.LeaveOneOutEncoder(cols=[\"nom_6\"])}","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train=D.astype(str)\nX_test=D_test.astype(str)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def make_cat_trans(onehot_cols, ordinal_order, target_encs):\n    encs = []\n    \n    if onehot_cols:\n        encs.append(make_column_transformer((OneHotEncoder(sparse=True, dtype=\"int8\", handle_unknown=\"ignore\"), onehot_cols)))\n\n    if ordinal_order:\n        ordinal_enc = make_column_transformer(*[(OrdinalEncoder([vals], dtype=\"float32\"), [col]) for col, vals in ordinal_order.items()])\n        encs.append(make_pipeline(ordinal_enc, MinMaxScaler(copy=False)))\n        encs.append(make_pipeline(ordinal_enc, MinMaxScaler(copy=False), FunctionTransformer(lambda x:4*(x-0.5)**2, validate=False)))\n    \n    if target_encs:\n        encs.append(make_column_transformer(*[(enc, [col]) for col, enc in target_encs.items()]))\n\n    trans = make_union(*encs)\n    \n    return trans\n\nonehot_cols = X_train.columns.difference(ordinal_order.keys()).tolist()\n\ntrans = make_cat_trans(onehot_cols, ordinal_order, target_encs)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\nclf=LogisticRegression(C=0.05, solver=\"lbfgs\", max_iter=5000)\n\nmodel=make_pipeline(trans, clf)\n\nmodel.fit(X_train, y_train)\n\npred = model.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":4}