{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2019-03-11T13:06:11.305433Z", "start_time": "2019-03-11T13:06:10.536634Z" } }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "from scipy.io import loadmat\n", "from sklearn.svm import OneClassSVM\n", "from sklearn.covariance import EllipticEnvelope\n", "\n", "import seaborn as sns\n", "sns.set_style('white')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2019-03-11T13:06:35.060356Z", "start_time": "2019-03-11T13:06:35.055890Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dict_keys(['__header__', '__version__', '__globals__', 'X', 'Xval', 'yval'])\n" ] } ], "source": [ "# 데이터를 로드 합니다.\n", "data1 = loadmat(\"resources/data1.mat\")\n", "# 로드한 데이터의 key 값을 확인합니다.\n", "print(data1.keys())" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2019-03-11T13:06:44.826734Z", "start_time": "2019-03-11T13:06:44.824227Z" } }, "outputs": [], "source": [ "# 데이터 중 실제 데이터에 해당하는 X 값을 변수에 저장합니다.\n", "X = data1['X']" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2019-03-11T13:06:52.323129Z", "start_time": "2019-03-11T13:06:52.320153Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X: (307, 2)\n" ] } ], "source": [ "# X 값을 확인합니다.\n", "X = data1['X']\n", "print('X:', X.shape)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2019-03-11T13:08:16.881440Z", "start_time": "2019-03-11T13:08:16.831344Z" } }, "outputs": [ { "data": { "text/plain": [ "EllipticEnvelope(assume_centered=False, contamination=0.1, random_state=None,\n", " store_precision=True, support_fraction=None)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# gaussian 분포를 이용하여 Outlier를 검출하는 EllipticEnvelope 객체를 선언합니다.\n", "clf = EllipticEnvelope()\n", "# 학습 데이터 X를 이용하여 gaussian 분포를 학습합니다.\n", "clf.fit(X)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2019-03-11T13:38:40.645379Z", "start_time": "2019-03-11T13:38:40.641411Z" } }, "outputs": [], "source": [ "# Calculate the decision function and use threshold to determine outliers\n", "# decision_function을 이용하여 Mahalanobis distances를 구합니다.\n", "y_pred = clf.decision_function(X).ravel()\n", "# outlier를 백분위에서 얼마나 낮은 값이하로 설정할지 임계값을 정합니다. \n", "# percentile은 0 ~ 100 사이로 입력해야 하며 outlier검출 목적상 작은 값이어야 합니다.\n", "percentile = 2\n", "# y_pred에서 percentile 에 해당하는 값(threshold)를 구합니다.\n", "threshold = np.percentile(y_pred, percentile)\n", "# threshold 값보다 작은 값들의 index를 구합니다.\n", "outliers = y_pred < threshold" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2019-03-11T13:40:47.514618Z", "start_time": "2019-03-11T13:40:47.511145Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Outlier 갯수 : 7\n" ] } ], "source": [ "print(\"Outlier 갯수 : \", np.count_nonzero(outliers))" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "ExecuteTime": { "end_time": "2019-03-11T13:41:23.187922Z", "start_time": "2019-03-11T13:41:23.007378Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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Lbfcwv3338+bb77Jq6++SmJiIvPmzeOmm27iD3/4A+vXr8fj8fDLX/6SKVOmAHDGGWfwpS99qWdbCQkJB2z/C1/4ArNnz2bnzp1MmzaNX/7yl3R0dHDLLbfQ1NQEwK233opSitNOO43S0lJKS0v5+te/zq233kp3dzcul4v7778fr9fLbbfdhtfrJSUlhZ///OcEAgF++MMfUlhYSHV1NUcddRR33XUXjz76KGVlZTz33HOsX7+es846a7+4nnrqKf71r3/hcDg466yzuPTSS/dbftVVV+HxeHruT5kyhTvvvLPPY9ze3o7P5+t5f0888UQ++OCD/ZLye++9x5lnnsm3vvUt3G43d9xxBwDr169n48aNXHjhhWzfvr3P7QshxKAZhjGs5bzzzjN6++STT/Z/4JRTDOMvfzH/9vnM+089Zd7v6DDvP/useb+52bz/wgvm/bo68/7LL5v39+w5YH/9eeGFF4x777235/6qVauMs846y/B6vYbH4zHmz59vGIZhLFmyxPjPf/5jGIZhPPPMM8Y999xjGIZhNDY2GmeddZZhGIZx8sknGzt37jS8Xq/x//7f/+t53j//+U/DMAzjwQcfNB5//HFj2bJlxjXXXGMEg0HD5/MZF1xwgVFWVmb8+Mc/NlasWGE89dRTxn333WcYhmFs2LDBOO200w6Ie8mSJca2bduMsrIy44ILLjB8Pp8RDAaNa665xli2bJnx4IMPGj//+c/7fd1tbW3GkiVLjJfD71mEI4880qiqqjIMwzCuu+4644033jDuuece45lnnjEMwzAqKyuNiy66yDAMw1BKGY2NjYZhGMbVV19trFixwjAMw3j11VeNd99917j++uuN5cuXG4ZhGO+//77xgx/8wKiurjbmz59vtLW1GX6/3zj11FON2tpaY9WqVcYNN9xgGIbR816Ej8/WrVuNiy66yPD7/UYgEDCWLl1qVFRUHOzQHtSePXuMCy64oOf+888/3/Oeh51++unG73//e8MwDOOll14ybrrpJmPfvn3G5Zdfbng8ngM+O5EO+HwLIWxl+vTpa41B5kipKQ9g2rRpJCcnA5CY+NnbFT7Fpby8nHXr1vX0Mfr9fpqamrjvvvu47777qK+v56STTup53syZMwHIz8+nvr6eiooK5s2bh8PhICkpidmzZ+/X77x169ae58+ePXu/GHrbvn07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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plot을 설정합니다.\n", "fig, ax = plt.subplots(figsize=(8,5))\n", "\n", "# decision function의 결과인 y_pred에 대한 분포를 그래프에 표시합니다.\n", "sns.distplot(y_pred, rug = True, ax=ax)\n", "\n", "# outliter를 그래프에 표시합니다.\n", "sns.distplot(y_pred[outliers], rug=True, hist=False, kde=False, norm_hist=True, color='r', ax=ax)\n", "\n", "ax.vlines(threshold, 0, 0.9, colors='r', linestyles='dotted',\n", " label='Threshold for {} percentile = {}'.format(percentile, np.round(threshold, 2)))\n", "\n", "ax.set_title('Distribution of Elliptic Envelope decision function values');\n", "\n", "ax.legend(loc='best')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda env:mldl]", "language": "python", "name": "conda-env-mldl-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }