기초 수학으로 이해하는 머신러닝 알고리즘

수학으로 풀어보는 머신러닝 알고리즘과 파이썬 머신러닝 프로그래밍

수포자(수학을 포기한 사람)도 읽을 수 있다! 머신러닝을 쉽게 배우자!

“머신러닝에 관심은 있지만 어떤 책을 봐도 수식이 나와서 공부하기 힘들다.”

이 책은 이런 독자에게 안성맞춤입니다. 이 책에서는 머신러닝을 공부하고 있는 프로그래머 ‘연아’와 친구 ‘소희’가 펼치는 대화를 통해 재미있게 공부할 수 있습니다.

이 책에서는 다음과 같은 내용을 친절하게 그리고 천천히 설명합니다.

  • 기계학습은 왜 주목받고 있는가?
  • 기계학습을 이용해 무슨 일을 할 수 있는가?
  • 회귀나 분류 기법은 어떤 경우에 사용하는가?
  • 회귀나 분류 기법에 관한 구체적인 문제를 제시하고 해결 방법을 단계별로 설명한다
  • 해당 해결 방법을 수식을 사용해서 표현하는 방법도 자세히 설명한다
  • 실제로 프로그램을 만들어 보면서 공부한다

이 책에서는 고등학교에서 배운 수학을 잊어버린 독자도 이해하기 쉽도록 수식에서 어려움을 느낄 만한 부분을 중점적으로 설명함으로써 머신러닝과 관련된 수식을 완전히 이해하고 싶은 엔지니어가 요긴하게 읽을 수 있습니다.

 

도서 상세 이미지

타테이시 켄고(立石 賢吾)

LINE Fukuoka 주식회사의 데이터 엔지니어다. 사가대학을 졸업한 후 사가현 내에 있는 시스템 개발 회사에 입사했다. 그 후 후쿠오카에 있는 개발회사를 거쳐 2014년에 LINE Fukuoka 주식회사에 입사했다. 웹 서비스와 안드로이드 앱을 개발하며 댓글과 텍스트 분류 등의 머신러닝을 활용한 개발에 경험을 쌓은 후에 LINE Fukuoka에서 데이터 분석과 머신러닝을 전문으로 하는 조직을 구성해서 이끌고 있다.

김범준

일본 호세이대학 경영학부를 졸업했다. 대학 시절 취미로 프로그래밍을 시작한 것을 계기로 이 업계에 발을 들여놓게 됐으며, 한국과 일본에서 임베디드 시스템과 게임 관련 회사에서 개발 프로젝트를 진행했다. 번역서로는 《정석으로 배우는 딥러닝》 《러닝스쿨! 파이썬 교과서》 《유니티 UI 디자인 교과서》 《머신러닝 이론 입문》 《모던 C 언어 프로그래밍》 《따라 하면서 배우는 유니티 3D 입문》이 있으며, 저서로는 《만들면서 배우는 OS커널의 구조와 원리》 《뇌를 자극하는 하드웨어 입문》이 있다.

  • ▣ 1장: 둘이 여행을 시작한다
    • 1 머신러닝에 대한 관심
    • 2 머신러닝의 중요성
    • 3 머신러닝 알고리즘
    • 4 수학과 프로그래밍
    •  
  • ▣ 2장: 회귀를 배워보자 - 광고비에서 클릭 수를 예측한다
    • 1 문제 설정
    • 2 모델을 정의한다
    • 3 최소제곱법
    • 3-1 최급하강법
    • 4 다항식 회귀
    • 5 중회귀
    • 6 확률 경사하강법
    •  
  • ▣ 3장: 분류에 대해 배워보자 - 이미지 크기를 기준으로 분류한다
    • 1 문제 설정
    • 2 내적
    • 3 퍼셉트론
      • 3-1 학습 데이터를 준비한다
      • 3-2 웨이트 벡터 갱신식
    • 4 선형분리가능
    • 5 로지스틱 회귀
      • 5-1 시그모이드 함수
      • 5-2 최급하강법
    • 6 우도함수
    • 7 대수우도함수
      • 7-1 우도함수의 미분
    • 8 선형분리불가능
    •  
  • ▣ 4장: 평가해보자 - 만든 모델을 평가하자
    • 1 모델 평가
    • 2 교차 검증
      • 2-1 최급하강법
      • 2-2 분류 문제를 검증한다
      • 2-3 최급하강법
      • 2-4 F값
    • 3 정칙화
      • 3-1 과잉적합
      • 3-2 정칙화하는 방법
      • 3-3 정칙화의 효과
      • 3-4 분류의 정칙화
      • 3-5 정칙화한 식을 미분한다
    • 4 학습곡선
      • 4-1 오적합
      • 4-2 과잉적합과 오적합을 판별한다
    •  
  • ▣ 5장: 파이썬으로 프로그래밍해보자
    • 1 파이썬으로 구현해보자
    • 2 회귀
      • 2-1 학습 데이터를 확인하자
      • 2-2 1차함수로 구현한다
      • 2-3 검증
      • 2-4 다항식 회귀를 구현한다
      • 2-5 확률 경사하강법을 구현한다
    • 3 분류(퍼셉트론)
      • 3-1 학습 데이터를 확인한다
      • 3-2 퍼셉트론을 구현한다
      • 3-3 검증
    • 4 분류(로지스틱 회귀)
      • 4-1 학습 데이터를 확인한다
      • 4-2 로지스틱 회귀를 구현한다
      • 4-3 검증
      • 4-4 선형분리불가능인 분류를 구현한다
      • 4-5 확률 경사하강법을 구현한다
    • 5 정칙화
      • 5-1 학습 데이터를 확인한다
      • 5-2 정칙화를 적용하지 않고 구현한다
      • 5-3 정칙화를 적용해서 구현한다
      • 5-4 후일담
    •  
  • ▣ 부록
    • 1 시그마 기호, 파이 기호
    • 2 미분
    • 3 편미분
    • 4 합성함수
    • 5 벡터와 행렬
    • 6 기하벡터
    • 7 지수와 대수
    • 8 파이썬 환경 구축
      • 8-1 파이썬을 설치한다
      • 8-2 파이썬 실행
    • 9 파이썬 기초
      • 9-1 숫자값과 문자열
      • 9-2 변수
      • 9-3 부울값과 비교연산자
      • 9-4 리스트
      • 9-5 제어구문
      • 9-6 함수
    • 10 NumPy 기초
      • 10-1 임포트
      • 10-2 다차원 배열
      • 10-3 브로드캐스트

아나콘다 설치 안내

아나콘다 설치 시 문제가 발생할 경우 아래 문서를 참고해서 설치를 진행해 주세요.


  • 27쪽, 본문 밑에서 3번째 줄

    2,000원일 때 ==> 200원일 때

  • 31쪽, 본문 3번째 줄

    광고비로 1,000원을 냈다고 하면

    ==>

    광고비로 100원을 냈다고 하면

  • 31쪽, 본문 5번째 줄

    광고비가 1,000원일 때

    ==>

    광고비가 100원일 때

  • 40쪽, 본문 4번째 줄

    $ 2x+2 $의 부호에 주목하면

    ==>

    $ 2x-2 $의 부호에 주목하면

  • 62쪽, 본문 밑에서 2번째 줄

    식에 있는

    ==>

    다음 식에 있는

  • 63쪽, 본문 4번째 줄

    국소해에 빠져버리게 되는 거야.

    ==>

    국소해에 빠지기 어려운 거야.

  • 80쪽, 본문 5번째 줄

    학습 데이터 대해 반복해서 처리해서

    ==>

    학습 데이터에 대해 반복 처리해서

  • 91쪽, 본문 5번째 줄

    응. 나왔어. $ \theta^Tx $일 때

    ==>

    응. 나왔어. $ \theta^Tx = 0 $일 때

  • 112쪽, 본문 밑에서 6번째 줄

    함수 를 정의하고 그 함수의 매개변수인 $ f_\theta(x) $를

    ==>

    함수 $ f_\theta(x) $를 정의하고 그 함수의 매개변수인 $ \theta $를

  • 129쪽, 본문 4번째 줄

    본래 가중치를 가진 가중치를 가진 F값이고

    ==>

    본래 가중치를 가진 F값이고

  • 133쪽, 6번째 줄의 수식을 아래 수식으로 대체

    $ f_\theta(x) = \theta_0 + \theta_1x + \theta_2x^2 $

  • 136쪽, 본문 밑에서 3번째 줄

    전과 비교해서 $ \theta_1 $

    ==>

    전과 비교해서 $ \theta_1 $

  • 144쪽, 본문 3번째 줄

    정칙화 항 $ R $

    ==>

    정칙화 항 $ R $

  • 161쪽, 하단 로그를 다음 내용으로 대체

    # ... 생략 ...
    383회째: theta0 = 428.963, theta1 = 93.438, 차분 = 0.0151
    384회째: theta0 = 428.967, theta1 = 93.439, 차분 = 0.0145
    385회째: theta0 = 428.970, theta1 = 93.440, 차분 = 0.0139
    386회째: theta0 = 428.974, theta1 = 93.441, 차분 = 0.0134
    387회째: theta0 = 428.978, theta1 = 93.442, 차분 = 0.0128
    388회째: theta0 = 428.981, theta1 = 93.442, 차분 = 0.0123
    389회째: theta0 = 428.984, theta1 = 93.443, 차분 = 0.0118
    390회째: theta0 = 428.988, theta1 = 93.444, 차분 = 0.0114
    391회째: theta0 = 428.991, theta1 = 93.444, 차분 = 0.0109
    392회째: theta0 = 428.994, theta1 = 93.445, 차분 = 0.0105
    393회째: theta0 = 428.997, theta1 = 93.446, 차분 = 0.0101
    394회째: theta0 = 429.000, theta1 = 93.446, 차분 = 0.0097
    
  • 162쪽, 그림 5-3을 다음 그림으로 대체

    162쪽 그래프

  • 168쪽, 첫 번째 줄

    $ y_0^{(i)} $ 부분을 각각

    ==>

    $ x_0^{(i)} $ 부분을 각각

  • 176쪽, 상단의 images1.csv 데이터 중 5번째 줄의 다음 데이터는

    497,472,1
    

    아래 데이터로 수정

    497,372,1
    
  • 178쪽, 예제 코드 5-3-3에서 다음 부분을

    # 웨이트를 학습한다
    for _ in range(epoch):
        for x, y in zip(train_x, train_y):
            if f(x) != y:
                w = w + y * x
                # 로그를 출력한다
                count += 1
                print('{} : w = {}'.format(count, w))
    

    아래 코드로 수정(들여쓰기 수정)

    # 웨이트를 학습한다
    for _ in range(epoch):
        for x, y in zip(train_x, train_y):
            if f(x) != y:
                w = w + y * x
    
        # 로그를 출력한다
        count += 1
        print('{}회째: w = {}'.format(count, w))
    
  • 183쪽, 상단의 images2.csv 데이터 중 밑에서 7번째 줄의 다음 데이터는

    497,472,1
    

    아래 데이터로 수정

    497,372,1
    
  • 187쪽, 예제 코드 5-4-4를 다음 코드로 교체

    >>> x1 = np.linspace(-2, 2, 100)
    >>>
    >>> plt.plot(train_z[train_y == 1, 0], train_z[train_y == 1, 1], 'o')
    >>> plt.plot(train_z[train_y == 0, 0], train_z[train_y == 0, 1], 'x')
    >>> plt.plot(x1, -(theta[0] + theta[1] * x1) / theta[2], linestyle='dashed')
    >>> plt.show()
    
  • 214쪽, 두 번째 수식의 맨 마지막 줄에 아래 내용을 추가

    (A.2.8)