나의 첫 머신러닝/딥러닝(개정판)

파이썬으로 구현해보는 필수 머신러닝/딥러닝 알고리즘

머신러닝/딥러닝을 처음 시작하는 분들을 위한 책입니다!

《나의 첫 머신러닝/딥러닝》은 머신러닝/딥러닝을 시작하려는 모든 분들을 대상으로 합니다. 간단한 그림과 명쾌한 설명으로 이해하기 쉬운 알고리즘부터 차근차근 단계별로 배우면서 어려움 없이 머신러닝/딥러닝을 학습할 수 있도록 구성했습니다.

이번 개정판에서는 최신 트렌드로 자리 잡은 임베딩 및 전이학습의 이론과 실습을 추가했고, 최신 텐서플로 2로 작성된 코드를 구글 코랩을 활용해 온라인에서 직접 실습할 수 있게 구성했습니다.

★ 이 책에서 배우는 내용 ★

  • 머신러닝 필수 개념
  • 딥러닝 필수 개념
  • k-최근접 이웃
  • 서포트 벡터 머신
  • 의사결정 트리
  • 나이브 베이즈
  • 앙상블
  • 군집화
  • 선형회귀
  • 로지스틱 회귀
  • 주성분 분석
  • 다층 퍼셉트론 

  • 컨볼루셔널 뉴럴 네트워크(CNN)
  • 순환신경망(RNN)
  • 오토인코더
  • Word2Vec, FastText, Glove
  • 전이학습

 

도서 상세 이미지

허민석(Minsuk Heo)

실리콘밸리에서 행복하게 살고 있는 평범한 머신러닝 개발자입니다. 취미로 머신러닝/딥러닝 지식과 경험을 유튜브 채널로 공유하고 많은 머신러닝 개발자, 데이터 과학자, 학생분들과 소통하며 살고 있습니다.

  • ▣ 01장: 개발자가 처음 만난 머신러닝의 세계
    • 1.1 머신러닝이란?
    • 1.2 프로젝트 과정 미리보기
    • 1.3 실습의 중요성
    •  
  • ▣ 02장: 실습 준비
    • 2.1 예제 코드
    • 2.2 구글 코랩(Google Colaboratory)
    •  
  • ▣ 03장: 자주 등장하는 머신러닝 필수 개념
    • 3.1 지도학습과 비지도학습
      • 3.1.1 지도학습
      • 3.1.2 비지도학습
    • 3.2 분류와 회귀
      • 3.2.1 분류
      • 3.2.2 회귀
    • 3.3 과대적합과 과소적합
      • 3.3.1 과소적합
      • 3.3.2 과대적합
    • 3.4 혼동 행렬
    • 3.5 머신러닝 모델의 성능 평가
      • 3.5.1 TP(true positive) – 맞는 것을 올바르게 예측한 것
      • 3.5.2 TN(true negative) – 틀린 것을 올바르게 예측한 것
      • 3.5.3 FP(false positive) – 틀린 것을 맞다고 잘못 예측한 것
      • 3.5.4 FN(false negative) – 맞는 것을 틀렸다고 잘못 예측한 것
      • 3.5.5 정확도
      • 3.5.6 정밀도
      • 3.5.7 재현율
      • 3.5.8 F1 점수
    • 3.6 k-폴드 교차 검증
    •  
  • ▣ 04장: 머신러닝 알고리즘 실습
    • 4.1 머신러닝 알고리즘 실습 개요
      • 4.1.1 알고리즘 선정 이유
    • 4.2 k-최근접 이웃(k-Nearest Neighbor, kNN)
      • 4.2.1 [이론] k-최근접 이웃 알고리즘(kNN)
      • 4.2.2 [실습] 농구선수의 게임 데이터를 활용한 포지션 예측
    • 4.3 서포트 벡터 머신(SVM)
      • 4.3.1 [이론] 서포트 벡터 머신
      • 4.3.2 [실습] 농구선수의 게임 기록을 학습해서 포지션을 예측해보자
    • 4.4 의사결정 트리
      • 4.4.1 [이론] 의사결정 트리
      • 4.4.2 [실습] 서울 지역(강동, 강서, 강남, 강북) 다중 분류하기
    • 4.5 나이브 베이즈
      • 4.5.1 [이론] 나이브 베이즈
      • 4.5.2 [실습] 가우시안 나이브 베이즈를 활용한 붓꽃 분류
      • 4.5.3 [실습] 베르누이 나이브 베이즈를 활용한 스팸 분류
      • 4.5.4 [실습] 다항분포 나이브 베이즈를 활용한 영화 리뷰 분류
    • 4.6 앙상블
      • 4.6.1 [이론] 배깅
      • 4.6.2 [이론] 부스팅
      • 4.6.3 [실습] 랜덤 포레스트 손글씨 분류
      • 4.6.4 [실습] 보팅 앙상블 손글씨 분류
    • 4.7 군집화
      • 4.7.1 [이론] k 평균 알고리즘
      • 4.7.2 [실습] 키와 몸무게에 따른 체형 군집화
    • 4.8 선형회귀
      • 4.8.1 [이론] 선형회귀
      • 4.8.2 [실습] 선형회귀
    • 4.9 로지스틱 회귀
      • 4.9.1 [이론] 로지스틱 회귀
      • 4.9.2 [실습] 단일 입력 로지스틱 회귀
      • 4.9.3 [실습] 다중 입력 로지스틱 회귀
      • 4.9.4 [실습] 소프트맥스(다중 분류 로지스틱 회귀)
    • 4.10 주성분 분석
      • 4.10.1 [이론] 주성분 분석
      • 4.10.2 [실습] 식습관 데이터를 차원축소시켜서 시각화하기
    •  
  • ▣ 05장: 딥러닝의 기본 개념
    • 5.1 딥러닝의 탄생
    • 5.2 딥러닝과 머신러닝의 관계
    • 5.3 딥러닝 이름의 유래
    • 5.4 딥러닝 탄생 배경
    • 5.5 퍼셉트론
    • 5.6 다층 퍼셉트론
    • 5.7 뉴런(노드)
    • 5.8 딥러닝의 학습
      • 5.8.1 순전파(forward propagation)
      • 5.8.2 손실함수
      • 5.8.3 최적화
      • 5.8.4 역전파
      • 5.8.5 옵티마이저
    • 5.9 딥러닝의 과대적합
      • 5.9.1 드롭아웃
      • 5.9.2 조기 종료
    • 5.10 [실습] 퍼셉트론
    • 5.11 [실습] 뉴런(노드)
    • 5.12 [실습] 다층 퍼셉트론으로 XOR 구현하기
    • 5.13 [실습] 다층 퍼셉트론으로 손글씨 숫자 분류하기
    •  
  • ▣ 06장: 딥러닝
    • 6.1 컨볼루셔널 뉴럴 네트워크(CNN)
      • 6.1.1 [이론] CNN
      • 6.1.2 [실습] CNN
    • 6.2 순환신경망(RNN)
      • 6.2.1 [이론] RNN
      • 6.2.2 [이론] LSTM
      • 6.2.3 [실습] RNN 기초
      • 6.2.4 [실습] LSTM 기초
      • 6.2.5 [실습] LSTM - 지문을 읽고 주제 분류하기
    • 6.3 오토인코더
      • 6.3.1 [이론] 오토인코더
      • 6.3.2 [실습] 손글씨 숫자 데이터 시각화
    • 6.4 단어 임베딩
      • 6.4.1 [이론] Word2Vec
      • 6.4.2 [실습] Word2Vec
      • 6.4.3 [실습] 사전 학습된 Word2Vec 맛보기
      • 6.4.4 [이론] FastText
      • 6.4.5 [실습] 사전학습된 FastText 맛보기
      • 6.4.6 [실습] 사전 학습된 Glove 맛보기
    • 6.5 전이 학습
      • 6.5.1 [이론] 전이 학습
      • 6.5.2 [실습] 사전 학습된 임베딩으로 사용자 리뷰 분류하기
    •  
  • ▣ 참고문헌
    • 딥러닝 이론/실습
    • 파이썬 활용 데이터 과학 및 엔지니어링
    • Numpy
    • IPython
    • Matplotlib
    • Seaborn
    • Cython
    • Pandas
    • scikit-learn
    • scikit-image
    • Jupyter Notebook
    • Keras
    • Tensorflow
  • 63쪽, 예제 코드를 다음 코드로 교체(C_candidates 변수명 변경)

    # 시각화할 비용 후보들을 저장
    C_candidates = []
    C_candidates.append(clf.best_params_['C'] * 0.01)
    C_candidates.append(clf.best_params_['C'])
    C_candidates.append(clf.best_params_['C'] * 100)
    
    # 시각화할 감마 후보들을 저장
    gamma_candidates = []
    gamma_candidates.append(clf.best_params_['gamma'] * 0.01)
    gamma_candidates.append(clf.best_params_['gamma'])
    gamma_candidates.append(clf.best_params_['gamma'] * 100)
    
    # 3점슛과 블로킹 횟수로 학습
    X = train[['3P', 'BLK']]
    # 농구선수 포지션을 학습 모델의 분류값으로 사용
    Y = train['Pos'].tolist()
    
    # 시각화를 위해 센터(C)와 슈팅가드(SG)를 숫자로 표현
    position = []
    for gt in Y:
      if gt == 'C':
        position.append(0)
      else:
        position.append(1)
    
    classifiers = []
    
    # 파라미터 후보들을 조합해서 학습된 모델들을 저장
    for C in C_candidates:
      for gamma in gamma_candidates:
        clf = SVC(C=C, gamma=gamma)
        clf.fit(X, Y)
        classifiers.append((C, gamma, clf))
    
    # 각 모델을 시각화
    plt.figure(figsize=(18, 18))
    xx, yy = np.meshgrid(np.linspace(0, 4, 100), np.linspace(0, 4, 100))
    
    for (k, (C, gamma, clf)) in enumerate(classifiers):
      Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
      Z = Z.reshape(xx.shape)
    
      plt.subplot(len(C_candidates), len(gamma_candidates), k + 1)
      plt.title("gamma=10^%d, C=10^%d" % (np.log10(gamma), np.log10(C)), size='medium')
    
      plt.pcolormesh(xx, yy, -Z, cmap=plt.cm.RdBu)
      plt.scatter(X['3P'], X['BLK'], c=position, cmap=plt.cm.RdBu_r, edgecolors='k')
    
  • 73쪽, 본문 7번째 줄

    분리했을 때의 엔트로피는 0.966이며,

    ==>

    분리했을 때의 엔트로피는 0.81이며,

  • 73쪽, 본문 10번째 줄

    "긴 생머리"로 데이터를 분리할 때의 정보 획득: 0.034

    ==>

    "긴 생머리"로 데이터를 분리할 때의 정보 획득: 0.19

  • 90쪽, 표 4.4.2를 다음 표로 교체(ground_truth와 prediction 열의 순서를 변경)

    mymlrev-p90.png

  • 111쪽, 페이지 중간 명령어를 변경(라이브러리 버전 업그레이드로 인한 오류)

    cv.inverse_transform(encoded_input[0])
    

    ==>

    cv.inverse_transform(encoded_input[0].reshape(1,-1))
    
  • 139쪽, 본문 첫 번째 줄

    데이터가 c1에서 c2 클러스터로

    ==>

    데이터가 c1에서 c3 클러스터로

  • 142쪽, 첫 번째 코드 예제

    data_points = df.values
    kmeans = KMeans(n_clusters=3).fit(data_points)
    

    ==>

    data_points = df.values
    kmeans = KMeans(n_clusters=3).fit(data_points)
    
    kmeans.cluster_centers_
    df['cluster_id'] = kmeans.labels_