파이썬을 이용한 머신러닝, 딥러닝 실전 앱 개발

실무에서 즉시 활용 가능한 머신러닝, 딥러닝 실전 앱 개발

최근에는 머신러닝/딥러닝 환경을 갖추기만 하면, 누구라도 쉽게 머신러닝/딥러닝을 할 수 있게 되었습니다. 그래서 다양한 서비스와 애플리케이션에서 머신러닝을 활용하는 경우를 볼 수 있습니다.

이 책은 《파이썬으로 배우는 머신러닝 딥러닝 실전 개발 입문》의 활용편으로, 이전 책에서는 데이터를 수집하는 스크레이핑부터 기본적인 머신러닝 딥러닝을 다루었다면, 이번 《파이썬을 이용한 머신러닝, 딥러닝 실전 앱 개발》에서는 기본적인 머신러닝 딥러닝부터 좀 더 실용적인 머신러닝 딥러닝 예제를 다룹니다.

머신러닝/딥러닝은 깊게 들어가면 들어 갈수록 정말 넓은 분야입니다. 일단 머신러닝과 딥러닝이 무엇인지 이 책에서 다루는 다양한 예제로 체험해보기 바랍니다.

★ 이 책에서 다루는 내용 ★

  • 맛있는 와인 판정하기, 얼굴에 모자이크 처리하기, 손글씨 숫자 판정하기, 우편 번호를 자동으로 인식하기, 동영상에서 특정 장면 추출하기
  • 문장을 형태소로 분할하기, 단어의 의미를 벡터로 만들기, 문장 분류하기
  • 사진 속의 물체 인식하기, 뉴스 기사 카테고리 분류하기, 요리 사진을 기반으로 칼로리 확인하기

쿠지라 히코우즈쿠에

파이썬, PHP, 자바스크립트 등의 프로그래밍 언어, 머신러닝과 알고리즘 등의 서적을 다수 집필했다. 무료 소프트웨어도 다수 공개하고 있다. 대표작으로는 일본어 프로그래밍 언어 ‘나데시코’, 텍스트 음악 ‘사쿠라’ 등이 있다. 2001년에 온라인 소프트웨어 대상을 받았으며, 2005년 IPA에서 슈퍼크리에이터로 인정받았다. 2010년에 OSS 공헌자 상을 받았다(웹 사이트: https://kujirahand.com).

스기야마 요우이치

주식회사 J-Tech Japan의 글로벌 엔지니어. 사용자 기업의 업무 개선을 위해 일하고 있으며 태국과 일본을 자주 왕복하고 있다.

엔도 슌스케

주식회사 J-Tech Japan의 매니저이자 영업 엔지니어. 새로운 기술을 매우 좋아해서 집 안에 IoT 장비를 잔뜩 설치해 뒀다.

윤인성

홍차와 커피를 좋아하며 요리, 음악, 그림, 스컬핑 등이 취미다. 『모던 웹을 위한 JavaScript+jQuery 입문』 『모던 웹을 위한 Node.js 프로그래밍』 『모던 웹 디자인을 위한 HTML5+CSS3 입문』 등을 저술하였으며, 『텐서플로로 시작하는 딥러닝 입문』 『모던 리액트/리덕스 프로그래밍』 『크롤링 핵심 가이드』 『파이썬을 이용한 웹 크롤링과 스크레이핑』 『모던 자바스크립트 개발자를 위한 리액트 프로그래밍』 『최신 표준 HTML5+CSS3 디자인』 『파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문』 『스위프트로 시작하는 아이폰 앱 개발 교과서』 『유니티 게임 이펙트 입문』 『모던 웹사이트 디자인의 정석』 등을 번역했다.

  • ▣ 01장: 머신러닝과 딥러닝
    • 1-1. 머신러닝
      • 머신러닝이란?
      • 머신러닝으로 할 수 있는 것
      • 구체적으로 머신러닝을 어떻게 적용할 수 있을까?
      • 딥러닝이란?
      • 머신러닝이 실용화된 이유
      • 머신러닝의 구조
      • 머신러닝의 종류
    • 1-2. 머신러닝 과정 시나리오
      • 머신러닝 과정 시나리오
      • 머신러닝의 기본 과정
    • 1-3. 머신러닝에서 사용할 데이터 만드는 방법
      • 무엇을 위해 머신러닝을 사용하는가?
      • 어떻게 데이터를 수집할까?
      • 수집한 데이터를 저장하는 형식
      • 입력에 사용하는 데이터
      • 데이터 정규화
    • 1-4. 설치가 필요 없는 Colaboratory
      • Google Colaboratory
      • Colaboratory의 제약
      • Colaboratory의 기본 사용 방법
      • 응용 힌트
    • 1-5. Jupyter Notebook 사용 방법
      • Jupyter Notebook이란?
      • Jupyter Notebook 실행하기
      • 신규 노트북 만들고 실행하기
      • 노트북에 셀을 여러 개 만들기
      • 값을 그래프로 출력하기
      • 마크다운 기법으로 문서 만들기
    • 1-6. 개별적으로 프로그램을 실행하는 방법
      • 명령 라인이란?
      • 프로그램 실행하기
      • 모듈 설치하고 사용하기
    •  
  • ▣ 02장: 머신러닝 입문
    • 2-1. 가장 간단한 머신러닝 예
      • scikit-learn에 대해
      • 머신러닝으로 AND 연산 해보기
      • 개선 힌트
    • 2-2. 붓꽃 분류하기
      • 붓꽃 데이터 내려받기
      • 붓꽃 데이터를 사용해 머신러닝 하기
      • 추가 설명: scikit-learn의 샘플에도 들어 있는 붓꽃 데이터
      • 응용 힌트
    • 2-3. AI로 맛있는 와인 판정하기
      • 와인의 품질을 머신러닝으로 분류하기
      • 와인 데이터 내려받기
      • 와인 데이터 살펴보기
      • 와인 품질 판정하기
      • 정답률 올리기
    • 2-4. 과거 10년 동안의 기상 데이터 분석하기
      • 기상 데이터 사용하기
      • 과거 10년 동안의 기상 데이터를 얻는 방법
      • 기온 평균 구하기
      • 월별 평균 기온 구하기
      • 기온이 30도 넘는 날 구하기 - Pandas 필터
      • 회귀 분석으로 내일 기온 예측하기
    • 2-5. 최적의 알고리즘과 매개변수 찾기
      • 응용 힌트
      • 최적의 알고리즘 찾기
      • 최적의 매개변수 찾기
      • 개선 힌트
    •  
  • ▣ 03장: OpenCV와 머신러닝 - 이미지/동영상 입문
    • 3-1. OpenCV
      • OpenCV
      • 이미지 읽어 들이기
    • 3-2. 얼굴 검출 - 자동으로 얼굴에 모자이크 처리하기
      • 얼굴 인식
      • 얼굴 검출 프로그램 만들기
      • OpenCV로 모자이크 처리하기
      • 사람 얼굴에 자동으로 모자이크 처리하기
      • OpenCV의 얼굴 검출은 옆모습과 기울어진 얼굴을 잘 검출하지 못함
      • 개선·응용 힌트
    • 3-3. 문자 인식 - 손글씨 숫자 판정하기
      • 손글씨 숫자 광학 인식 데이터세트 사용하기
      • 이미지 머신러닝하기
      • 자신이 작성한 이미지 판별하기
      • 이미지를 대상으로 하는 머신러닝
      • 개선 힌트
    • 3-4. 윤곽 검출 - 엽서의 우편 번호 인식하기
      • 엽서의 우편 번호 인식하기
      • OpenCV로 윤곽 검출하기
      • 엽서에서 우편 번호 영역 검출하기
      • 추출한 숫자 이미지 판정하기
      • 개선 힌트
      • 응용 힌트
    • 3-5. 동영상 분석 - 동영상에서 열대어가 등장하는 부분 검출하기
      • 동영상 분석
      • 화면에 움직임이 있는 부분 추출하기
      • 이미지 파일 쓰기
      • 동영상에서 열대어가 나오는 부분 검출하기
      • 머신러닝으로 동영상에서 열대어가 많이 나오는 부분 찾기
      • 개선 힌트
      • 응용 힌트
    •  
  • ▣ 04장: 자연어 처리하기
    • 4-1. 언어 판정하기
      • 언어 판정
      • 머신러닝으로 언어 판정 해보기
    • 4-2. 문장을 단어로 분할하기
      • 형태소 분석
    • 4-3. 단어의 의미를 벡터로 만들기
      • 단어 벡터
      • 단어의 의미를 벡터로 만들기
      • 응용 힌트
    •  
  • ▣ 05장: 딥러닝
    • 5-1. 딥러닝(심층학습)
      • 딥러닝이란?
    • 5-2. TensorFlow 입문
      • TensorFlow란?
      • TensorFlow 설치와 동작 확인하기
      • TensorFlow 데이터 플로 그래프
    • 5-3. TensorFlow로 붓꽃 분류하기
      • 붓꽃 분류 문제 복습하기
      • Keras로 가는 길
      • MNIST 데이터 사용하기
    • 5-4. 딥러닝으로 손글씨 숫자 판정하기
      • 굉장히 간단한 신경망으로 MNIST 분류하기
      • MLP를 사용해 MNIST 분류 문제 풀기
      • 개선 힌트
    • 5-5. 사진에 찍힌 물체 인식하기
      • CIFAR-10이란?
      • CIFAR-10 내려받기
      • CIFAR-10 분류 문제를 MLP로 풀기
      • CIFAR-10 분류 문제를 CNN으로 풀어보기
      • 학습 결과 저장하기
      • 응용 힌트
    • 5-6. 이미지 데이터로 일본어 가타카나 판정하기
      • 머신러닝의 입력과 출력
      • 이미지 학습시키기 - 이미지 리사이즈
    •  
  • ▣ 06장: 머신러닝으로 업무 효율화하기
    • 6-1. 업무 시스템에 머신러닝 적용하기
      • 기존의 업무 시스템
      • 업무 시스템에 머신러닝 도입하기
    • 6-2. 학습 모델을 저장하고 읽어 들이는 방법
      • 학습한 학습기를 저장하고 다시 사용하는 방법
    • 6-3. 뉴스 기사의 카테고리 판정하기
      • 뉴스 기사 자동 분류
      • TF-IDF
      • 딥러닝으로 정답률 개선하기
      • 직접 문장을 지정해 판정하기
      • 개선 힌트
    • 6-4. 웹에서 사용할 수 있는 뉴스 카테고리 판정 애플리케이션 만들기
      • 머신러닝을 웹 애플리케이션에서 사용하는 방법
      • 웹 애플리케이션에서 카테고리를 분류하는 모델 사용하기
      • API를 호출하는 웹 애플리케이션 만들기
      • 개선 힌트
    • 6-5. 머신러닝에 데이터베이스(RDBMS) 사용하기
      • 데이터베이스를 기반으로 데이터를 학습시키는 방법
      • 데이터베이스에서 직접 머신러닝 시스템에 데이터 전달하기
      • 키와 체중 데이터베이스 만들기
      • 키, 체중, 체형 학습하기
      • 개선 힌트
      • 응용 힌트
    • 6-6. 요리 사진을 기반으로 칼로리를 알려주는 프로그램 만들기
      • 요리 사진 판정 방법
      • Flickr API를 사용해 사진 수집하기
      • 직접 찍은 사진으로 테스트하기
      • 개선 힌트
    •  
  • ▣ 부록: 이 책의 예제를 실습하기 위한 환경 준비하기
    • Python과 머신러닝 환경 준비하기
    • Windows에 환경 구축하기
    • macOS에 개발 환경 구축하기
    • Docker 설치하기
    • 언어 처리 라이브러리
  • 87쪽, selectAlgorithm.py의 22~24번째 줄

    for(name, algorithm) in allAlgorithms:
        # 각 알고리즘 객체 생성하기--- ( ※ 2)
        clf = algorithm()
    

    ==>

    for(name, algorithm) in allAlgorithms:
        if name == 'ClassifierChain' : continue
        elif name == 'CheckingClassifier' : continue
        elif name == 'MultiOutputClassifier' : continue
        elif name == 'OneVsOneClassifier' : continue
        elif name == 'OneVsRestClassifier' : continue
        elif name == 'OutputCodeClassifier' : continue
        elif name == 'StackingClassifier' : continue
        elif name == 'VotingClassifier' : continue
    
        # 각 알고리즘 객체 생성하기--- ( ※ 2)
        clf = algorithm()
    
  • 90쪽, cross_validation.py의 21~23번째 줄

    for (name, algorithm) in allAlgorithms:
        # 각 알고리즘 객체 생성하기
        clf = algorithm()
    

    ==>

    for (name, algorithm) in allAlgorithms:
        if name == 'ClassifierChain' : continue
        elif name == 'CheckingClassifier' : continue
        elif name == 'MultiOutputClassifier' : continue
        elif name == 'OneVsOneClassifier' : continue
        elif name == 'OneVsRestClassifier' : continue
        elif name == 'OutputCodeClassifier' : continue
        elif name == 'StackingClassifier' : continue
        elif name == 'VotingClassifier' : continue
    
        # 각 알고리즘 객체 생성하기
        clf = algorithm()
    
  • 129쪽, find_contours.py의 20번째 줄

    cv2.CHAIN_APPROX_SIMPLE)[1]
    

    ==>

    cv2.CHAIN_APPROX_SIMPLE)[0]
    
  • 134쪽, detect_zip.py의 18번째 줄

    cv2.CHAIN_APPROX_SIMPLE)[1]
    

    ==>

    cv2.CHAIN_APPROX_SIMPLE)[0]
    
  • 143쪽, 예제 코드의 18번째 줄

    img[((h < 50)  (h > 200)) & (s > 100)] = 255
    

    ==>

    img[((h < 50) | (h > 200)) & (s > 100)] = 255
    
  • 315쪽, 페이지 상단 예제 코드의 17~18번째 줄

    plt.plot(hist.history['acc'])
    plt.plot(hist.history['val_acc'])
    

    ==>

    plt.plot(hist.history['accuracy'])
    plt.plot(hist.history['val_accuracy'])