본문 바로가기
소소한 일상/소소한 책

핸즈온 머신러닝 2판 - 3.8 연습문제

by 빙글빙글이 2021. 1. 27.
728x90
반응형

1. MNIST 데이터셋으로 분류기를 만들어 테스트 세트에서 97% 정확도를 달성해보세요. 

   힌트 : KNeighborsClassifier가 이 작업에 아주 잘 맞습니다. 좋은 하이퍼파라미터 값만 찾으면 됩니다.

            (weights와 n_neighbors 하이퍼파라미터로 그리드 탐색을 시도해보세요.)

 

2. MNIST 이미지를 (왼, 오른, 위, 아래) 어느 방향으로든 한 픽셀 이동시킬 수 있는 함수를 만들어보세요. 그런 다음 훈련 세트에 있는 각 이미지에 대해 네 개의 이동 된 복사본(방향마다 한 개씩)을 만들어 훈련 세트에 추가하세요. 마지막으로 이 확장된 데이터셋에서 앞에서 찾은 최선의 모델을 훈련 시키고 테스트 세트에서 정확도를 측정해보세요. 모델 성능이 더 높아졌는지 확인해보세요! 인위적으로 훈련 세트를 늘리는 이 기법을 데이터 증식 또는 훈련 세트 확장(training set expansion) 이라고 합니다. 

 

3. 타이타닉 데이터셋에 도전해보세요. 캐글에서 시작하면 좋습니다. (www.kaggle.com/biswajee/titanic-dataset)

 

4. 스팸 분류기를 만들어보세요(아주 도전적인 과제 입니다).

- 아파치 스팸어새신(Apache SpamAssassin) 공공 데이터셋(spamassassin.apache.org/old/publiccorpus/)에서 스팸과 햄(스팸이 아닌 메일) 샘플을 내려받습니다. 

- 데이터셋의 압축을 풀고 데이터 형식을 살펴봅니다.

- 데이터셋을 훈련 세트와 테스트 세트로 나눕니다.

- 각 이메일을 특성 벡터로 변환하는 데이터 준비 파이프라인을 만듭니다. 이 준비 파이프라인은 하나의 이메일을 가능한 단어의 존재 여부를 나타내는 (희소) 벡터로 바꿔야 합니다. 예를 들어 모든 이메일이 네 개의 단어 'Hello','How','are','you' 만 포함한다면 'Hello you Hello Hello you'란 이메일은 벡터 [1,0,0,1](['Hello' 있음, 'how' 없음, 'are' 없음, 'you' 있음]을 의미)로 변환되거나, 단어의 출현 횟수에 관심이 있다면 [3,0,0,2]로 변환되어야 합니다. 

- 준비 파이프라인에 이메일 헤더 제거, 소문자 변환, 구두점 제거, 모든 URLs 주소를 'URL'로 대체, 모든 숫자를 'NUMBER'로 대체, 어간(stem) 추출(즉, 단어의 끝을 떼어냅니다. 이런 작업을 할 수 있는 파이썬 라이브러리가 있습니다) 등을 수행할지 여부를 제어하기 위해 하이퍼파라미터를 추가합니다. 

- 여러 분류기를 시도해보고 재현율과 정밀도가 모두 높은 스팸 분류기를 만들 수 있는지 확인해보세요. 

728x90
반응형