{
  "id": 116324,
  "title": "[HW][JiwonKim] 2019-PR-Midterm-ImageClassification",
  "url": "/competitions/2019-fall-pr-project/discussion/116324",
  "author_name": "Jiwon Kim",
  "post_date": "2019-11-08T12:10:38.956000",
  "votes": 0,
  "comment_count": 0,
  "views": 0,
  "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F4ee0a2c294f2cf735cf668cf28b6c577%2F1.PNG?generation=1573213786860496&amp;alt=media\" alt=\"1\"></p>\n\n<p>glob을 통해서 폴더 안에 있는 파일들의 이름들을 불러와  train_data_list에 저장합니다.\nKaggle Notebooks에서의 train dataset의 경로는 \"../input/2019-fall-pr-project/train/train/\"입니다.</p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F7cd62d487ff6bf8cf6421aed3747a27b%2F2.PNG?generation=1573213878886719&amp;alt=media\" alt=\"2\"></p>\n\n<p>폴더안에 이미지의 이름들이 저장된 train_data_list를 for문을 통해서 하나씩 불러오고 이를 이용해 로드할 이미지들의 경로를 설정합니다. 이때 경로의 42번째 리스트값에는 'dog' or 'cat'의 첫번째 알파벳이 들어가게되고, 이를 기준으로 라벨링을 진행합니다. 위에 그림에서는 해당 문자가 'c'일 경우 'cat'을 의미하므로 라벨은 '0'을 'c'가 아니라면 'dog'이기때문에 라벨 '1'을 저장합니다. 이를 통해서 각 이미지에 따른 옳바른 라벨을 이미지를 로드하는 순서에 맞춰서 저장합니다. 이미지의 경로를 알고있기 때문에 Image.open을 통해서 이미지를 로드하고, 불러온 이미지를 resize와 정규화를 진행합니다. 그리고 마지막으로 reshape을 통해서 1D-vector로 설정해 하나씩 저장합니다.</p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F55de6704a6c00d57bc133b3a75472f83%2F3.PNG?generation=1573214166516753&amp;alt=media\" alt=\"3\"></p>\n\n<p>이렇게 저장한 이미지의 리스트들을 np.array를 통해서 nparray형태로 변환하고 scaler함수를 통해서 다시한번 정규화를 진행합니다. 앞서한 정규하는 이미지의 인풋값이 0~255를 0~1로 했다면 두번째 scaler는 실제 이미지의 min,max값을 기준으로 0~1로 변경하는 정규화를 의미합니다. 추가로 라벨또한 nparray형태로 변환합니다.</p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F31a637297a3094d07c4aa5b5d045f5e7%2F4.PNG?generation=1573214269320463&amp;alt=media\" alt=\"4\"></p>\n\n<p>train_test_split을 통해서 train 셋과 validation 셋을 나눕니다. 이때 문제에서 validation의 크기를 전체 데이터셋의 25%를 권장했지만, 더 많은 데이터를 보기위해서 저같은 경우 90%는 학습에 이용하고 10%를 이용해 간이 테스트를 진행하였습니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F96b2b6a972c8317cad3a6fa3fc33eea5%2F5.PNG?generation=1573214361447164&amp;alt=media\" alt=\"5\"></p>\n\n<p>앞서 구분한 train셋을 svm을 이용해 분리하기위해서 svm의 값을 찾아내는 과정입니다. 커널은 'rbf'로 하였고, 'C'값은 1,5,10,100,1000 을 설정하였습니다. 나머지는 크게 건드리지 않고 GridSearchCV 를 통해서 가장 좋은 성능을 보이는 파라미터 조합을 찾아냈습니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2Ff567f1fa171b1b1f3cb69e4a3e20264a%2F6.PNG?generation=1573214518391484&amp;alt=media\" alt=\"\"></p>\n\n<p>GridSearchCV를 통해서 찾아낸 베스트 조합값은 'C'는 5 입니다. 'gamma'값도 있지만 이 'gamma'값은 'scale'로 설정하였습니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F0295181435caa030492ea464aee5d5af%2F7.PNG?generation=1573214585880962&amp;alt=media\" alt=\"\"></p>\n\n<p>이제 이렇게 학습한 support vector를 가지고 아까 분리해둔 10%의 test셋을 평가해보겠습니다. '.predict'에 test셋의 1D vector값을 넣고 svm을 통해서 class(개vs고양이)를 분류합니다. 그리고 이러한 분류된 결과를 실제 데이터셋으 true값과 비교하기 위해서 confusion matrix를 하였습니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F3451c332c1f04c1e5aae3a5e52567055%2F8.PNG?generation=1573214703306889&amp;alt=media\" alt=\"\"></p>\n\n<p>그리고 이러한 분류된 결과를 좀 더 확인하기위해 classification_report함수를 사용합니다. 이를 통해서 개의 경우 약 67%의 확률을 고양이는 70%의 확률로 맞추고 있음을 확인했습니다. 이때 다시 한번 체크해야될 것은 테스트셋은 앞서 불러온 label 정보를 알고있는 train셋에서 10%를 validation으로 분리한 데이터 입니다. </p>\n\n<p>그렇다면 이제 실제 문제에서 주어지는 test셋에 대한 평가를 진행하겠습니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F35644bf8d7b5a7d72532390d3cb3eb91%2F9.PNG?generation=1573214805657263&amp;alt=media\" alt=\"\"></p>\n\n<p>테스트셋은 총 5000장이고, 테스트셋에 대한 라벨의 정보는 없습니다. 앞서 진행한 방법과 같이 이미지를 불러 1D vector로 변환하고, 이미 구해논 support vector를 통해서 분류를 진행합니다. 그리고 구한 라벨의 값들을 csv로 저장해 캐글에 제출해 성능을 리더보드에서 확인합니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F11118cd93887c0297b2b70b5e35ad361%2F10.PNG?generation=1573214902525557&amp;alt=media\" alt=\"\"></p>\n\n<p>현 코드는 kaggle notebook이라 따로 제출하는 부분은 없지만 colab을 통해서 진행할시 마지막에 캐글에 제출하는 부분을 추가해야합니다. </p>",
  "messages": [
    {
      "id": 668419,
      "postDate": "2019-11-08T12:10:38.957Z",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F4ee0a2c294f2cf735cf668cf28b6c577%2F1.PNG?generation=1573213786860496&amp;alt=media\" alt=\"1\"></p>\n\n<p>glob을 통해서 폴더 안에 있는 파일들의 이름들을 불러와  train_data_list에 저장합니다.\nKaggle Notebooks에서의 train dataset의 경로는 \"../input/2019-fall-pr-project/train/train/\"입니다.</p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F7cd62d487ff6bf8cf6421aed3747a27b%2F2.PNG?generation=1573213878886719&amp;alt=media\" alt=\"2\"></p>\n\n<p>폴더안에 이미지의 이름들이 저장된 train_data_list를 for문을 통해서 하나씩 불러오고 이를 이용해 로드할 이미지들의 경로를 설정합니다. 이때 경로의 42번째 리스트값에는 'dog' or 'cat'의 첫번째 알파벳이 들어가게되고, 이를 기준으로 라벨링을 진행합니다. 위에 그림에서는 해당 문자가 'c'일 경우 'cat'을 의미하므로 라벨은 '0'을 'c'가 아니라면 'dog'이기때문에 라벨 '1'을 저장합니다. 이를 통해서 각 이미지에 따른 옳바른 라벨을 이미지를 로드하는 순서에 맞춰서 저장합니다. 이미지의 경로를 알고있기 때문에 Image.open을 통해서 이미지를 로드하고, 불러온 이미지를 resize와 정규화를 진행합니다. 그리고 마지막으로 reshape을 통해서 1D-vector로 설정해 하나씩 저장합니다.</p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F55de6704a6c00d57bc133b3a75472f83%2F3.PNG?generation=1573214166516753&amp;alt=media\" alt=\"3\"></p>\n\n<p>이렇게 저장한 이미지의 리스트들을 np.array를 통해서 nparray형태로 변환하고 scaler함수를 통해서 다시한번 정규화를 진행합니다. 앞서한 정규하는 이미지의 인풋값이 0~255를 0~1로 했다면 두번째 scaler는 실제 이미지의 min,max값을 기준으로 0~1로 변경하는 정규화를 의미합니다. 추가로 라벨또한 nparray형태로 변환합니다.</p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F31a637297a3094d07c4aa5b5d045f5e7%2F4.PNG?generation=1573214269320463&amp;alt=media\" alt=\"4\"></p>\n\n<p>train_test_split을 통해서 train 셋과 validation 셋을 나눕니다. 이때 문제에서 validation의 크기를 전체 데이터셋의 25%를 권장했지만, 더 많은 데이터를 보기위해서 저같은 경우 90%는 학습에 이용하고 10%를 이용해 간이 테스트를 진행하였습니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F96b2b6a972c8317cad3a6fa3fc33eea5%2F5.PNG?generation=1573214361447164&amp;alt=media\" alt=\"5\"></p>\n\n<p>앞서 구분한 train셋을 svm을 이용해 분리하기위해서 svm의 값을 찾아내는 과정입니다. 커널은 'rbf'로 하였고, 'C'값은 1,5,10,100,1000 을 설정하였습니다. 나머지는 크게 건드리지 않고 GridSearchCV 를 통해서 가장 좋은 성능을 보이는 파라미터 조합을 찾아냈습니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2Ff567f1fa171b1b1f3cb69e4a3e20264a%2F6.PNG?generation=1573214518391484&amp;alt=media\" alt=\"\"></p>\n\n<p>GridSearchCV를 통해서 찾아낸 베스트 조합값은 'C'는 5 입니다. 'gamma'값도 있지만 이 'gamma'값은 'scale'로 설정하였습니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F0295181435caa030492ea464aee5d5af%2F7.PNG?generation=1573214585880962&amp;alt=media\" alt=\"\"></p>\n\n<p>이제 이렇게 학습한 support vector를 가지고 아까 분리해둔 10%의 test셋을 평가해보겠습니다. '.predict'에 test셋의 1D vector값을 넣고 svm을 통해서 class(개vs고양이)를 분류합니다. 그리고 이러한 분류된 결과를 실제 데이터셋으 true값과 비교하기 위해서 confusion matrix를 하였습니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F3451c332c1f04c1e5aae3a5e52567055%2F8.PNG?generation=1573214703306889&amp;alt=media\" alt=\"\"></p>\n\n<p>그리고 이러한 분류된 결과를 좀 더 확인하기위해 classification_report함수를 사용합니다. 이를 통해서 개의 경우 약 67%의 확률을 고양이는 70%의 확률로 맞추고 있음을 확인했습니다. 이때 다시 한번 체크해야될 것은 테스트셋은 앞서 불러온 label 정보를 알고있는 train셋에서 10%를 validation으로 분리한 데이터 입니다. </p>\n\n<p>그렇다면 이제 실제 문제에서 주어지는 test셋에 대한 평가를 진행하겠습니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F35644bf8d7b5a7d72532390d3cb3eb91%2F9.PNG?generation=1573214805657263&amp;alt=media\" alt=\"\"></p>\n\n<p>테스트셋은 총 5000장이고, 테스트셋에 대한 라벨의 정보는 없습니다. 앞서 진행한 방법과 같이 이미지를 불러 1D vector로 변환하고, 이미 구해논 support vector를 통해서 분류를 진행합니다. 그리고 구한 라벨의 값들을 csv로 저장해 캐글에 제출해 성능을 리더보드에서 확인합니다. </p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F11118cd93887c0297b2b70b5e35ad361%2F10.PNG?generation=1573214902525557&amp;alt=media\" alt=\"\"></p>\n\n<p>현 코드는 kaggle notebook이라 따로 제출하는 부분은 없지만 colab을 통해서 진행할시 마지막에 캐글에 제출하는 부분을 추가해야합니다. </p>",
      "rawMarkdown": "![1](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F4ee0a2c294f2cf735cf668cf28b6c577%2F1.PNG?generation=1573213786860496&amp;alt=media)\n\nglob을 통해서 폴더 안에 있는 파일들의 이름들을 불러와  train_data_list에 저장합니다.\nKaggle Notebooks에서의 train dataset의 경로는 \"../input/2019-fall-pr-project/train/train/\"입니다.\n\n![2](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F7cd62d487ff6bf8cf6421aed3747a27b%2F2.PNG?generation=1573213878886719&amp;alt=media)\n\n폴더안에 이미지의 이름들이 저장된 train_data_list를 for문을 통해서 하나씩 불러오고 이를 이용해 로드할 이미지들의 경로를 설정합니다. 이때 경로의 42번째 리스트값에는 'dog' or 'cat'의 첫번째 알파벳이 들어가게되고, 이를 기준으로 라벨링을 진행합니다. 위에 그림에서는 해당 문자가 'c'일 경우 'cat'을 의미하므로 라벨은 '0'을 'c'가 아니라면 'dog'이기때문에 라벨 '1'을 저장합니다. 이를 통해서 각 이미지에 따른 옳바른 라벨을 이미지를 로드하는 순서에 맞춰서 저장합니다. 이미지의 경로를 알고있기 때문에 Image.open을 통해서 이미지를 로드하고, 불러온 이미지를 resize와 정규화를 진행합니다. 그리고 마지막으로 reshape을 통해서 1D-vector로 설정해 하나씩 저장합니다.\n\n![3](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F55de6704a6c00d57bc133b3a75472f83%2F3.PNG?generation=1573214166516753&amp;alt=media)\n\n이렇게 저장한 이미지의 리스트들을 np.array를 통해서 nparray형태로 변환하고 scaler함수를 통해서 다시한번 정규화를 진행합니다. 앞서한 정규하는 이미지의 인풋값이 0~255를 0~1로 했다면 두번째 scaler는 실제 이미지의 min,max값을 기준으로 0~1로 변경하는 정규화를 의미합니다. 추가로 라벨또한 nparray형태로 변환합니다.\n\n![4](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F31a637297a3094d07c4aa5b5d045f5e7%2F4.PNG?generation=1573214269320463&amp;alt=media)\n\ntrain_test_split을 통해서 train 셋과 validation 셋을 나눕니다. 이때 문제에서 validation의 크기를 전체 데이터셋의 25%를 권장했지만, 더 많은 데이터를 보기위해서 저같은 경우 90%는 학습에 이용하고 10%를 이용해 간이 테스트를 진행하였습니다. \n\n![5](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F96b2b6a972c8317cad3a6fa3fc33eea5%2F5.PNG?generation=1573214361447164&amp;alt=media)\n\n앞서 구분한 train셋을 svm을 이용해 분리하기위해서 svm의 값을 찾아내는 과정입니다. 커널은 'rbf'로 하였고, 'C'값은 1,5,10,100,1000 을 설정하였습니다. 나머지는 크게 건드리지 않고 GridSearchCV 를 통해서 가장 좋은 성능을 보이는 파라미터 조합을 찾아냈습니다. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2Ff567f1fa171b1b1f3cb69e4a3e20264a%2F6.PNG?generation=1573214518391484&amp;alt=media)\n\nGridSearchCV를 통해서 찾아낸 베스트 조합값은 'C'는 5 입니다. 'gamma'값도 있지만 이 'gamma'값은 'scale'로 설정하였습니다. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F0295181435caa030492ea464aee5d5af%2F7.PNG?generation=1573214585880962&amp;alt=media)\n\n이제 이렇게 학습한 support vector를 가지고 아까 분리해둔 10%의 test셋을 평가해보겠습니다. '.predict'에 test셋의 1D vector값을 넣고 svm을 통해서 class(개vs고양이)를 분류합니다. 그리고 이러한 분류된 결과를 실제 데이터셋으 true값과 비교하기 위해서 confusion matrix를 하였습니다. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F3451c332c1f04c1e5aae3a5e52567055%2F8.PNG?generation=1573214703306889&amp;alt=media)\n\n그리고 이러한 분류된 결과를 좀 더 확인하기위해 classification_report함수를 사용합니다. 이를 통해서 개의 경우 약 67%의 확률을 고양이는 70%의 확률로 맞추고 있음을 확인했습니다. 이때 다시 한번 체크해야될 것은 테스트셋은 앞서 불러온 label 정보를 알고있는 train셋에서 10%를 validation으로 분리한 데이터 입니다. \n\n그렇다면 이제 실제 문제에서 주어지는 test셋에 대한 평가를 진행하겠습니다. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F35644bf8d7b5a7d72532390d3cb3eb91%2F9.PNG?generation=1573214805657263&amp;alt=media)\n\n테스트셋은 총 5000장이고, 테스트셋에 대한 라벨의 정보는 없습니다. 앞서 진행한 방법과 같이 이미지를 불러 1D vector로 변환하고, 이미 구해논 support vector를 통해서 분류를 진행합니다. 그리고 구한 라벨의 값들을 csv로 저장해 캐글에 제출해 성능을 리더보드에서 확인합니다. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F11118cd93887c0297b2b70b5e35ad361%2F10.PNG?generation=1573214902525557&amp;alt=media)\n\n현 코드는 kaggle notebook이라 따로 제출하는 부분은 없지만 colab을 통해서 진행할시 마지막에 캐글에 제출하는 부분을 추가해야합니다. "
    }
  ],
  "comments": [],
  "raw_markdown_by_id": {
    "668419": "![1](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F4ee0a2c294f2cf735cf668cf28b6c577%2F1.PNG?generation=1573213786860496&amp;alt=media)\n\nglob을 통해서 폴더 안에 있는 파일들의 이름들을 불러와  train_data_list에 저장합니다.\nKaggle Notebooks에서의 train dataset의 경로는 \"../input/2019-fall-pr-project/train/train/\"입니다.\n\n![2](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F7cd62d487ff6bf8cf6421aed3747a27b%2F2.PNG?generation=1573213878886719&amp;alt=media)\n\n폴더안에 이미지의 이름들이 저장된 train_data_list를 for문을 통해서 하나씩 불러오고 이를 이용해 로드할 이미지들의 경로를 설정합니다. 이때 경로의 42번째 리스트값에는 'dog' or 'cat'의 첫번째 알파벳이 들어가게되고, 이를 기준으로 라벨링을 진행합니다. 위에 그림에서는 해당 문자가 'c'일 경우 'cat'을 의미하므로 라벨은 '0'을 'c'가 아니라면 'dog'이기때문에 라벨 '1'을 저장합니다. 이를 통해서 각 이미지에 따른 옳바른 라벨을 이미지를 로드하는 순서에 맞춰서 저장합니다. 이미지의 경로를 알고있기 때문에 Image.open을 통해서 이미지를 로드하고, 불러온 이미지를 resize와 정규화를 진행합니다. 그리고 마지막으로 reshape을 통해서 1D-vector로 설정해 하나씩 저장합니다.\n\n![3](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F55de6704a6c00d57bc133b3a75472f83%2F3.PNG?generation=1573214166516753&amp;alt=media)\n\n이렇게 저장한 이미지의 리스트들을 np.array를 통해서 nparray형태로 변환하고 scaler함수를 통해서 다시한번 정규화를 진행합니다. 앞서한 정규하는 이미지의 인풋값이 0~255를 0~1로 했다면 두번째 scaler는 실제 이미지의 min,max값을 기준으로 0~1로 변경하는 정규화를 의미합니다. 추가로 라벨또한 nparray형태로 변환합니다.\n\n![4](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F31a637297a3094d07c4aa5b5d045f5e7%2F4.PNG?generation=1573214269320463&amp;alt=media)\n\ntrain_test_split을 통해서 train 셋과 validation 셋을 나눕니다. 이때 문제에서 validation의 크기를 전체 데이터셋의 25%를 권장했지만, 더 많은 데이터를 보기위해서 저같은 경우 90%는 학습에 이용하고 10%를 이용해 간이 테스트를 진행하였습니다. \n\n![5](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F96b2b6a972c8317cad3a6fa3fc33eea5%2F5.PNG?generation=1573214361447164&amp;alt=media)\n\n앞서 구분한 train셋을 svm을 이용해 분리하기위해서 svm의 값을 찾아내는 과정입니다. 커널은 'rbf'로 하였고, 'C'값은 1,5,10,100,1000 을 설정하였습니다. 나머지는 크게 건드리지 않고 GridSearchCV 를 통해서 가장 좋은 성능을 보이는 파라미터 조합을 찾아냈습니다. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2Ff567f1fa171b1b1f3cb69e4a3e20264a%2F6.PNG?generation=1573214518391484&amp;alt=media)\n\nGridSearchCV를 통해서 찾아낸 베스트 조합값은 'C'는 5 입니다. 'gamma'값도 있지만 이 'gamma'값은 'scale'로 설정하였습니다. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F0295181435caa030492ea464aee5d5af%2F7.PNG?generation=1573214585880962&amp;alt=media)\n\n이제 이렇게 학습한 support vector를 가지고 아까 분리해둔 10%의 test셋을 평가해보겠습니다. '.predict'에 test셋의 1D vector값을 넣고 svm을 통해서 class(개vs고양이)를 분류합니다. 그리고 이러한 분류된 결과를 실제 데이터셋으 true값과 비교하기 위해서 confusion matrix를 하였습니다. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F3451c332c1f04c1e5aae3a5e52567055%2F8.PNG?generation=1573214703306889&amp;alt=media)\n\n그리고 이러한 분류된 결과를 좀 더 확인하기위해 classification_report함수를 사용합니다. 이를 통해서 개의 경우 약 67%의 확률을 고양이는 70%의 확률로 맞추고 있음을 확인했습니다. 이때 다시 한번 체크해야될 것은 테스트셋은 앞서 불러온 label 정보를 알고있는 train셋에서 10%를 validation으로 분리한 데이터 입니다. \n\n그렇다면 이제 실제 문제에서 주어지는 test셋에 대한 평가를 진행하겠습니다. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F35644bf8d7b5a7d72532390d3cb3eb91%2F9.PNG?generation=1573214805657263&amp;alt=media)\n\n테스트셋은 총 5000장이고, 테스트셋에 대한 라벨의 정보는 없습니다. 앞서 진행한 방법과 같이 이미지를 불러 1D vector로 변환하고, 이미 구해논 support vector를 통해서 분류를 진행합니다. 그리고 구한 라벨의 값들을 csv로 저장해 캐글에 제출해 성능을 리더보드에서 확인합니다. \n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3308400%2F11118cd93887c0297b2b70b5e35ad361%2F10.PNG?generation=1573214902525557&amp;alt=media)\n\n현 코드는 kaggle notebook이라 따로 제출하는 부분은 없지만 colab을 통해서 진행할시 마지막에 캐글에 제출하는 부분을 추가해야합니다. "
  }
}