{
  "id": 116747,
  "title": "[HW][SanHee Kang] ImageClassification",
  "url": "/competitions/2019-fall-pr-project/discussion/116747",
  "author_name": "SanHee Kang",
  "post_date": "2019-11-11T08:01:37.917000",
  "votes": 0,
  "comment_count": 0,
  "views": 0,
  "content": "<h2>학습 데이터 준비</h2>\n\n<ul>\n<li><p>함수<code>resize32()</code>은 opencv를 이용하여 경로<code>dir</code>에 저장된 이미지를 불러와 1D Vector로 변환하는 함수이다. <code>cv2.imread(dir)</code>를 이용하여 경로 <code>dir</code>에 저장된 이미지를 열고 RGB 3차원으로 저장된 이미지를 흑백 1차원으로 변환한다. <code>resize()</code>를 이용하여 1024x1인 1D Vector로 변환한다.\n<code>\ndef resize32(dir):\nimg= cv2.imread(dir)\nimg_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\nimg_gray.resize(32*32)\nreturn img_gray\n</code></p></li>\n<li><p>os.listdir()를 이용하여 이미지가 저장되어 있는 폴더의 하위 디렉토리를 검색하여 이미지 파일의 이름을 저장한다.\nplt.subplots()를 이용하여 데이터의 이미지를 시각화하고 데이터의 라벨을 그림의 라벨로 지정한다.\n파일명은 dog.560.jpg와 같이 저장되어 있으므로 split('.')를 이용하여 ‘.’을 기준으로 분리하여 라벨을 얻어낸다. 얻어낸 라벨이 ‘cat’이면 0, ‘dog’이면 1으로 라벨링한다.\n이미지 데이터는 함수<code>resize32()</code>를 이용하여 1D Vector로 변환한다.</p></li>\n</ul>\n\n<p>```\ndataset_train = \"../input/2019-fall-pr-project/train/train/\"</p>\n\n<p>Y=[]\nx=[]\ndata=os.listdir(dataset_train)\nfig,ax=plt.subplots(3,3)\nfor i,axi in enumerate(ax.flat):\n    img= cv2.imread(dataset_train+data[i])\n    axi.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))\n    axi.set(xticks=[], yticks=[],xlabel=data[i].split('.')[0])</p>\n\n<p>for i in range(10000):\n    Y.append(0 if data[i].split('.')[0]=='cat' else 1)\n    image=resize32(dataset_train+data[i])\n    x.append(image)</p>\n\n<p>X=np.array(x)\n```\n* Train set과 validation set은 0.75 : 0.25로 나누어 학습을 진행하였다.</p>\n\n<p><code>\nX_train,X_val,y_train,y_val=train_test_split(X,Y,test_size=0.25,random_state=42)\n</code></p>\n\n<h2>KNeighborsClassifier과 GridSearchCV를 이용한 학습기반 모델 설계</h2>\n\n<ul>\n<li>KNeighborsClassifier를 이용하여 모델을 설계하였다. <code>n_neighbors</code>는 결과 예측시 몇개의 이웃 데이터를 가지고 투표할 것인가에 대한 파라미터이다. GridSearchCV를 이용하여 가장 정확도가 높은 <code>n_neighbors</code> 파라미터를 구하고 <code>best_estimator_</code>를 통해 모델을 저장한다.\n```\nfrom sklearn.model_selection import GridSearchCV</li>\n</ul>\n\n<p>knn = KNeighborsClassifier()\nparam_grid = {'n_neighbors': np.arange(1, 10)}\ngrid = GridSearchCV(knn, param_grid, cv=5)\ngrid.fit(X_train,y_train)\nmodel=grid.best_estimator_\nyfit=model.predict(X_val)\n```\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3879006%2Fa2a9dfb6f57fa82590a7bf750176848d%2F1.jpg?generation=1573461176485573&amp;alt=media\" alt=\"\"></p>\n\n<h2>테스트 데이터 가공</h2>\n\n<ul>\n<li>테스트 데이터가 저장된 폴더의 하위 파일을 <code>dataset_test</code>에 저장하고 이를 함수<code>resize32()</code>를 이용해 1D Vector로 변환해준다.\n```\ndataset_test = \"../input/2019-fall-pr-project/test1/test1/\"</li>\n</ul>\n\n<p>x=[]\nfiles=os.listdir(dataset_test)\nfor i in range(5000):\n    image=resize32(dataset_test+files[i])\n    x.append(image)\ntest_x=np.array(x)\n```</p>\n\n<h2>학습한 모델을 이용하여 결과 예측</h2>\n\n<ul>\n<li>학습된 모델을 이용하여 테스트 데이터를 라벨링한다.\n<code>\nresult=model.predict(test_x)\n</code></li>\n</ul>\n\n<h2>결과 파일 저장</h2>\n\n<ul>\n<li>캐글 제출 형식을 맞추기 위해 0번째 행의 index 이름을 <code>\"id\"</code>로 바꾸고 데이터는 'label'`로 바꿔준다. 마지막으로 data frame을 csv파일로 변환하여 저장한다.\n```\nimport pandas as pd\nresult=np.append(['label'],result)\ndf = pd.DataFrame(result,columns=[' '])\ndf=df.rename(index={0:\"id\"})</li>\n</ul>\n\n<p>df.to_csv('results.csv',index=True, header=False)\n```</p>",
  "messages": [
    {
      "id": 670245,
      "postDate": "2019-11-11T08:01:37.917Z",
      "content": "<h2>학습 데이터 준비</h2>\n\n<ul>\n<li><p>함수<code>resize32()</code>은 opencv를 이용하여 경로<code>dir</code>에 저장된 이미지를 불러와 1D Vector로 변환하는 함수이다. <code>cv2.imread(dir)</code>를 이용하여 경로 <code>dir</code>에 저장된 이미지를 열고 RGB 3차원으로 저장된 이미지를 흑백 1차원으로 변환한다. <code>resize()</code>를 이용하여 1024x1인 1D Vector로 변환한다.\n<code>\ndef resize32(dir):\nimg= cv2.imread(dir)\nimg_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\nimg_gray.resize(32*32)\nreturn img_gray\n</code></p></li>\n<li><p>os.listdir()를 이용하여 이미지가 저장되어 있는 폴더의 하위 디렉토리를 검색하여 이미지 파일의 이름을 저장한다.\nplt.subplots()를 이용하여 데이터의 이미지를 시각화하고 데이터의 라벨을 그림의 라벨로 지정한다.\n파일명은 dog.560.jpg와 같이 저장되어 있으므로 split('.')를 이용하여 ‘.’을 기준으로 분리하여 라벨을 얻어낸다. 얻어낸 라벨이 ‘cat’이면 0, ‘dog’이면 1으로 라벨링한다.\n이미지 데이터는 함수<code>resize32()</code>를 이용하여 1D Vector로 변환한다.</p></li>\n</ul>\n\n<p>```\ndataset_train = \"../input/2019-fall-pr-project/train/train/\"</p>\n\n<p>Y=[]\nx=[]\ndata=os.listdir(dataset_train)\nfig,ax=plt.subplots(3,3)\nfor i,axi in enumerate(ax.flat):\n    img= cv2.imread(dataset_train+data[i])\n    axi.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))\n    axi.set(xticks=[], yticks=[],xlabel=data[i].split('.')[0])</p>\n\n<p>for i in range(10000):\n    Y.append(0 if data[i].split('.')[0]=='cat' else 1)\n    image=resize32(dataset_train+data[i])\n    x.append(image)</p>\n\n<p>X=np.array(x)\n```\n* Train set과 validation set은 0.75 : 0.25로 나누어 학습을 진행하였다.</p>\n\n<p><code>\nX_train,X_val,y_train,y_val=train_test_split(X,Y,test_size=0.25,random_state=42)\n</code></p>\n\n<h2>KNeighborsClassifier과 GridSearchCV를 이용한 학습기반 모델 설계</h2>\n\n<ul>\n<li>KNeighborsClassifier를 이용하여 모델을 설계하였다. <code>n_neighbors</code>는 결과 예측시 몇개의 이웃 데이터를 가지고 투표할 것인가에 대한 파라미터이다. GridSearchCV를 이용하여 가장 정확도가 높은 <code>n_neighbors</code> 파라미터를 구하고 <code>best_estimator_</code>를 통해 모델을 저장한다.\n```\nfrom sklearn.model_selection import GridSearchCV</li>\n</ul>\n\n<p>knn = KNeighborsClassifier()\nparam_grid = {'n_neighbors': np.arange(1, 10)}\ngrid = GridSearchCV(knn, param_grid, cv=5)\ngrid.fit(X_train,y_train)\nmodel=grid.best_estimator_\nyfit=model.predict(X_val)\n```\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3879006%2Fa2a9dfb6f57fa82590a7bf750176848d%2F1.jpg?generation=1573461176485573&amp;alt=media\" alt=\"\"></p>\n\n<h2>테스트 데이터 가공</h2>\n\n<ul>\n<li>테스트 데이터가 저장된 폴더의 하위 파일을 <code>dataset_test</code>에 저장하고 이를 함수<code>resize32()</code>를 이용해 1D Vector로 변환해준다.\n```\ndataset_test = \"../input/2019-fall-pr-project/test1/test1/\"</li>\n</ul>\n\n<p>x=[]\nfiles=os.listdir(dataset_test)\nfor i in range(5000):\n    image=resize32(dataset_test+files[i])\n    x.append(image)\ntest_x=np.array(x)\n```</p>\n\n<h2>학습한 모델을 이용하여 결과 예측</h2>\n\n<ul>\n<li>학습된 모델을 이용하여 테스트 데이터를 라벨링한다.\n<code>\nresult=model.predict(test_x)\n</code></li>\n</ul>\n\n<h2>결과 파일 저장</h2>\n\n<ul>\n<li>캐글 제출 형식을 맞추기 위해 0번째 행의 index 이름을 <code>\"id\"</code>로 바꾸고 데이터는 'label'`로 바꿔준다. 마지막으로 data frame을 csv파일로 변환하여 저장한다.\n```\nimport pandas as pd\nresult=np.append(['label'],result)\ndf = pd.DataFrame(result,columns=[' '])\ndf=df.rename(index={0:\"id\"})</li>\n</ul>\n\n<p>df.to_csv('results.csv',index=True, header=False)\n```</p>",
      "rawMarkdown": "## 학습 데이터 준비\n*  함수`resize32()`은 opencv를 이용하여 경로`dir`에 저장된 이미지를 불러와 1D Vector로 변환하는 함수이다. `cv2.imread(dir)`를 이용하여 경로 `dir`에 저장된 이미지를 열고 RGB 3차원으로 저장된 이미지를 흑백 1차원으로 변환한다. `resize()`를 이용하여 1024x1인 1D Vector로 변환한다.\n``` \ndef resize32(dir):\n    img= cv2.imread(dir)\n    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n    img_gray.resize(32*32)\n    return img_gray\n```\n\n* os.listdir()를 이용하여 이미지가 저장되어 있는 폴더의 하위 디렉토리를 검색하여 이미지 파일의 이름을 저장한다.\nplt.subplots()를 이용하여 데이터의 이미지를 시각화하고 데이터의 라벨을 그림의 라벨로 지정한다.\n파일명은 dog.560.jpg와 같이 저장되어 있으므로 split('.')를 이용하여 ‘.’을 기준으로 분리하여 라벨을 얻어낸다. 얻어낸 라벨이 ‘cat’이면 0, ‘dog’이면 1으로 라벨링한다.\n이미지 데이터는 함수`resize32()`를 이용하여 1D Vector로 변환한다.\n\n```\ndataset_train = \"../input/2019-fall-pr-project/train/train/\"\n\nY=[]\nx=[]\ndata=os.listdir(dataset_train)\nfig,ax=plt.subplots(3,3)\nfor i,axi in enumerate(ax.flat):\n    img= cv2.imread(dataset_train+data[i])\n    axi.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))\n    axi.set(xticks=[], yticks=[],xlabel=data[i].split('.')[0])\n\nfor i in range(10000):\n    Y.append(0 if data[i].split('.')[0]=='cat' else 1)\n    image=resize32(dataset_train+data[i])\n    x.append(image)\n\nX=np.array(x)\n```\n* Train set과 validation set은 0.75 : 0.25로 나누어 학습을 진행하였다.\n\n```\nX_train,X_val,y_train,y_val=train_test_split(X,Y,test_size=0.25,random_state=42)\n```\n\n## KNeighborsClassifier과 GridSearchCV를 이용한 학습기반 모델 설계\n\n* KNeighborsClassifier를 이용하여 모델을 설계하였다. `n_neighbors`는 결과 예측시 몇개의 이웃 데이터를 가지고 투표할 것인가에 대한 파라미터이다. GridSearchCV를 이용하여 가장 정확도가 높은 `n_neighbors` 파라미터를 구하고 `best_estimator_`를 통해 모델을 저장한다.\n```\nfrom sklearn.model_selection import GridSearchCV\n\nknn = KNeighborsClassifier()\nparam_grid = {'n_neighbors': np.arange(1, 10)}\ngrid = GridSearchCV(knn, param_grid, cv=5)\ngrid.fit(X_train,y_train)\nmodel=grid.best_estimator_\nyfit=model.predict(X_val)\n```\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3879006%2Fa2a9dfb6f57fa82590a7bf750176848d%2F1.jpg?generation=1573461176485573&amp;alt=media)\n\n## 테스트 데이터 가공\n* 테스트 데이터가 저장된 폴더의 하위 파일을 `dataset_test`에 저장하고 이를 함수`resize32()`를 이용해 1D Vector로 변환해준다.\n```\ndataset_test = \"../input/2019-fall-pr-project/test1/test1/\"\n\nx=[]\nfiles=os.listdir(dataset_test)\nfor i in range(5000):\n    image=resize32(dataset_test+files[i])\n    x.append(image)\ntest_x=np.array(x)\n```\n## 학습한 모델을 이용하여 결과 예측\n* 학습된 모델을 이용하여 테스트 데이터를 라벨링한다.\n```\nresult=model.predict(test_x)\n```\n\n\n## 결과 파일 저장\n* 캐글 제출 형식을 맞추기 위해 0번째 행의 index 이름을 `\"id\"`로 바꾸고 데이터는 'label'`로 바꿔준다. 마지막으로 data frame을 csv파일로 변환하여 저장한다.\n```\nimport pandas as pd\nresult=np.append(['label'],result)\ndf = pd.DataFrame(result,columns=[' '])\ndf=df.rename(index={0:\"id\"})\n\ndf.to_csv('results.csv',index=True, header=False)\n```\n\n"
    }
  ],
  "comments": [],
  "raw_markdown_by_id": {
    "670245": "## 학습 데이터 준비\n*  함수`resize32()`은 opencv를 이용하여 경로`dir`에 저장된 이미지를 불러와 1D Vector로 변환하는 함수이다. `cv2.imread(dir)`를 이용하여 경로 `dir`에 저장된 이미지를 열고 RGB 3차원으로 저장된 이미지를 흑백 1차원으로 변환한다. `resize()`를 이용하여 1024x1인 1D Vector로 변환한다.\n``` \ndef resize32(dir):\n    img= cv2.imread(dir)\n    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n    img_gray.resize(32*32)\n    return img_gray\n```\n\n* os.listdir()를 이용하여 이미지가 저장되어 있는 폴더의 하위 디렉토리를 검색하여 이미지 파일의 이름을 저장한다.\nplt.subplots()를 이용하여 데이터의 이미지를 시각화하고 데이터의 라벨을 그림의 라벨로 지정한다.\n파일명은 dog.560.jpg와 같이 저장되어 있으므로 split('.')를 이용하여 ‘.’을 기준으로 분리하여 라벨을 얻어낸다. 얻어낸 라벨이 ‘cat’이면 0, ‘dog’이면 1으로 라벨링한다.\n이미지 데이터는 함수`resize32()`를 이용하여 1D Vector로 변환한다.\n\n```\ndataset_train = \"../input/2019-fall-pr-project/train/train/\"\n\nY=[]\nx=[]\ndata=os.listdir(dataset_train)\nfig,ax=plt.subplots(3,3)\nfor i,axi in enumerate(ax.flat):\n    img= cv2.imread(dataset_train+data[i])\n    axi.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))\n    axi.set(xticks=[], yticks=[],xlabel=data[i].split('.')[0])\n\nfor i in range(10000):\n    Y.append(0 if data[i].split('.')[0]=='cat' else 1)\n    image=resize32(dataset_train+data[i])\n    x.append(image)\n\nX=np.array(x)\n```\n* Train set과 validation set은 0.75 : 0.25로 나누어 학습을 진행하였다.\n\n```\nX_train,X_val,y_train,y_val=train_test_split(X,Y,test_size=0.25,random_state=42)\n```\n\n## KNeighborsClassifier과 GridSearchCV를 이용한 학습기반 모델 설계\n\n* KNeighborsClassifier를 이용하여 모델을 설계하였다. `n_neighbors`는 결과 예측시 몇개의 이웃 데이터를 가지고 투표할 것인가에 대한 파라미터이다. GridSearchCV를 이용하여 가장 정확도가 높은 `n_neighbors` 파라미터를 구하고 `best_estimator_`를 통해 모델을 저장한다.\n```\nfrom sklearn.model_selection import GridSearchCV\n\nknn = KNeighborsClassifier()\nparam_grid = {'n_neighbors': np.arange(1, 10)}\ngrid = GridSearchCV(knn, param_grid, cv=5)\ngrid.fit(X_train,y_train)\nmodel=grid.best_estimator_\nyfit=model.predict(X_val)\n```\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F3879006%2Fa2a9dfb6f57fa82590a7bf750176848d%2F1.jpg?generation=1573461176485573&amp;alt=media)\n\n## 테스트 데이터 가공\n* 테스트 데이터가 저장된 폴더의 하위 파일을 `dataset_test`에 저장하고 이를 함수`resize32()`를 이용해 1D Vector로 변환해준다.\n```\ndataset_test = \"../input/2019-fall-pr-project/test1/test1/\"\n\nx=[]\nfiles=os.listdir(dataset_test)\nfor i in range(5000):\n    image=resize32(dataset_test+files[i])\n    x.append(image)\ntest_x=np.array(x)\n```\n## 학습한 모델을 이용하여 결과 예측\n* 학습된 모델을 이용하여 테스트 데이터를 라벨링한다.\n```\nresult=model.predict(test_x)\n```\n\n\n## 결과 파일 저장\n* 캐글 제출 형식을 맞추기 위해 0번째 행의 index 이름을 `\"id\"`로 바꾸고 데이터는 'label'`로 바꿔준다. 마지막으로 data frame을 csv파일로 변환하여 저장한다.\n```\nimport pandas as pd\nresult=np.append(['label'],result)\ndf = pd.DataFrame(result,columns=[' '])\ndf=df.rename(index={0:\"id\"})\n\ndf.to_csv('results.csv',index=True, header=False)\n```\n\n"
  }
}