{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense\nfrom tensorflow.keras.callbacks import ModelCheckpoint,EarlyStopping\nfrom sklearn.preprocessing import LabelEncoder\nfrom tensorflow.keras.utils import to_categorical\nfrom sklearn.model_selection import train_test_split\n\n#생략 없이 출력\npd.set_option('display.max_rows', None)\npd.set_option('display.max_columns', None)\npd.set_option('display.max_seq_items', None)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-09-24T03:33:00.796921Z","iopub.execute_input":"2021-09-24T03:33:00.797212Z","iopub.status.idle":"2021-09-24T03:33:00.806667Z","shell.execute_reply.started":"2021-09-24T03:33:00.79718Z","shell.execute_reply":"2021-09-24T03:33:00.805766Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# seed 값 설정\nseed = 3\nnp.random.seed(seed)\ntf.random.set_seed(seed)\n\n# 데이터 입력\ntrain = pd.read_csv('/kaggle/input/cat-in-the-dat-ii/train.csv',sep=',')\ntest = pd.read_csv('/kaggle/input/cat-in-the-dat-ii/test.csv',sep=',')\nlabel = pd.read_csv('/kaggle/input/cat-in-the-dat-ii/sample_submission.csv',sep=',')\n\n#데이터 정보 확인\n#print(train.head(5))\n#print(train.info())\n\n#오브젝트 idx\nidx=['bin_3','bin_4','nom_0','nom_1','nom_2','nom_3','nom_4','nom_5','nom_6','nom_7','nom_8','nom_9','ord_1','ord_2','ord_3','ord_4','ord_5']\n#idx=['bin_4','nom_1','nom_4','nom_7','nom_8','nom_9','ord_2','ord_3','ord_5']\n\"\"\"\n#히트맵\ncolormap = plt.cm.gist_heat\nplt.figure(figsize=(25,25))\nsns.heatmap(df.corr(),linewidths=0.1,vmax=0.5, cmap=colormap,\\\n            linecolor='white', annot=True)\nplt.show()\n\n\n#그래프 히스토그램\nfor i in idx:\n    grid = sns.FacetGrid(train, col='target')\n    grid.map(plt.hist, i,  bins=10)\n    plt.show()\n\"\"\"\n\n#공백 바로 위의 데이터를 입력\ntrain=train.fillna(method = 'ffill')\ntest=test.fillna(method = 'ffill')\n   \n#데이터 삭제\n#'bin_3','nom_0','nom_2','nom_3','nom_5','nom_6','ord_1','ord_4'\ntrain=train.drop(['id'],axis=1)\ntest=test.drop(['id'],axis=1)\n\n#object 속성 숫자로 바꿔주기\ne = LabelEncoder()\nfor i in idx:\n    e.fit(train[i])\n    train[i] = e.transform(train[i])\n    e.fit(test[i])\n    test[i] = e.transform(test[i])\n\n#훈련_데이터분류\ntrian_dataset = train.values\nX_train = trian_dataset[:,0:23]\nY_train = trian_dataset[:,23]\n\n#샘플_데이터\ntest_dataset = test.values\nX_sample = test_dataset[:,0:23]\n\nX_train, X_test, Y_train, Y_test = train_test_split(X_train, Y_train, test_size=0.3, random_state=seed)\n\n#모델생성\nmodel = Sequential()\nmodel.add(Dense(79, input_dim=23, activation='relu'))\nmodel.add(Dense(67, activation='relu'))\nmodel.add(Dense(58, activation='relu'))\nmodel.add(Dense(49, activation='relu'))\nmodel.add(Dense(37, activation='relu'))\nmodel.add(Dense(29, activation='relu'))\nmodel.add(Dense(17, activation='relu'))\nmodel.add(Dense(8, activation='relu'))\nmodel.add(Dense(1, activation='sigmoid'))\n\nmodel.compile(loss='binary_crossentropy',\n          optimizer='adam',\n          metrics=['accuracy'])\n\n# 모델 저장 폴더 설정\nMODEL_DIR = '../model/'\nif not os.path.exists(MODEL_DIR):\n    os.mkdir(MODEL_DIR)\n\n# 모델 저장 조건 설정\nmodelpath=\"../model/claim-{epoch:02d}-accuracy:{accuracy:.4f}.hdf5\"\n\n# 모델 업데이트 및 저장\ncheckpointer = ModelCheckpoint(filepath=modelpath, monitor='accuracy', verbose=1, save_best_only=True)\n\n# 학습 자동 중단 설정\nearly_stopping_callback = EarlyStopping(monitor='accuracy', patience=50)\n\n# 모델 실행 및 저장\nhistory =model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=2000,batch_size=500, verbose=0, callbacks=[early_stopping_callback,checkpointer])\n\"\"\"\n# 테스트셋 실험 결과의 값을 저장\ny_vloss=history.history['val_loss']\ny_vacc=history.history['val_accuracy']\n\n# 학습 셋 측정한 값을 저장\ny_acc=history.history['accuracy']\ny_loss=history.history['loss']\n\n# x값을 지정하고 나머지 표시\nx_len = np.arange(len(y_loss))\n\n#loss그래프\nplt.plot(x_len, y_vloss, \"o\", c=\"red\",  markersize=5, label='Testset')\nplt.plot(x_len, y_loss, \"o\", c=\"blue\", markersize=5, label='Trainset')\nplt.grid()\nplt.xlabel('epoch')\nplt.ylabel('loss')\nplt.show()\n\n#acc그래프\nplt.plot(x_len, y_vacc, \"o\", c=\"pink\", markersize=5, label='Testset')\nplt.plot(x_len, y_acc, \"o\", c=\"skyblue\", markersize=5, label='Trainset')\nplt.grid()\nplt.xlabel('epoch')\nplt.ylabel('acc')\nplt.show()\n\"\"\"\n\nprint('------------------------------------------------------------------------')\nprint(\"\\n train_Accuracy: %.4f\" % (model.evaluate(X_train, Y_train)[1]))\nprint(\"\\n test_Accuracy: %.4f\" % (model.evaluate(X_test, Y_test)[1]))\n\n# 예측 값과 실제 값의 csv저장\nY_prediction = model.predict(X_sample).flatten()\nY_prediction=np.round(Y_prediction,1)\n\n#제출파일 만들기\nsubmission=pd.DataFrame({\n\"id\":label[\"id\"],\n\"target\":Y_prediction\n})\n#print(submission.head(5))\nsubmission.to_csv('./submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2021-09-24T03:33:02.157334Z","iopub.execute_input":"2021-09-24T03:33:02.157717Z","iopub.status.idle":"2021-09-24T04:43:44.832511Z","shell.execute_reply.started":"2021-09-24T03:33:02.15768Z","shell.execute_reply":"2021-09-24T04:43:44.830469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}