Tag Archives: Machine Learning

“머신러닝 파워드 애플리케이션”이 출간되었습니다!

드디어 <머신러닝 파워드 애플리케이션>이 출간되었습니다! 이 책은 아마존 베스트셀러인 Building Machine Learning Powered Applications의 번역서입니다.

이 책에는 머신러닝 제품을 만들기 위해 고려해야할 많은 내용이 포함되어 있습니다. 머신러닝 제품을 만들기 위해 필요한 기술에서 알고리즘이 차지하는 부분은 작습니다. 책을 읽으면서 얼마나 많은 것들을 준비하고 생각해야 하는지 새삼 깨달았습니다. 책을 번역하면서 많은 것을 배웠습니다. 다른 분들에게도 도움이 되었으면 좋겠습니다. 감사합니다! 🙂

  • 온라인/오프라인 서점에서 판매중입니다. [Yes24], [교보문고], [알라딘]
  • 304페이지, 풀 컬러: 27,000원 –> 24,300원
  • 이 책에 실린 코드는 깃허브에 있습니다.

“머신 러닝 교과서 3판”이 출간되었습니다.

세바스찬 라시카Sebastian Raschka와 바히드 미자리리Vahid Mirjalili가 쓴 아마존 베스트셀러 <Python Machine Learning 3rd Ed.>의 번역판인 <머신 러닝 교과서 3판>이 출간되었습니다!

3판은 사이킷런과 텐서플로 최신 버전의 변경 사항을 담았으며 코랩에서 실행할 수 있습니다. 특히 딥러닝 파트는 완전히 새롭게 리뉴얼되어 콘텐츠가 크게 보강되었습니다. 무엇보다도 이번에 새롭게 GAN강화 학습이 추가되어 머신러닝의 끝판왕이라고 부를만합니다!

출간에 맞추어 동영상 강의를 제작해 유튜브에 올리고 있습니다. 혼자 공부하시는 분들에게 도움이 되었으면 좋겠습니다. 궁금한 점이 있다면 블로그나 카카오 오픈채팅(http://bit.ly/tensor-chat)으로 알려 주세요!

온라인/오프라인 서점에서 판매 중입니다! 868페이지, 풀 컬러: 39,600원 [Yes24], [교보문고], [알라딘]

“Do It! 딥러닝 입문” 인프런 강의가 등록되었습니다!

유튜브에 올린 <Do It! 딥러닝 입문> 강의가 인프런(inflearn.com)에 등록되었습니다! 인프런에서 진도를 관리하면 놓치는 강의 없이 재미있게 들을 수 있습니다. 강의를 게재하도록 도와주신 인프런 담당자님에게 감사드립니다! 😀

Scikit-Learn 0.23.0 Release!

사이킷런 0.23.0 버전이 릴리스되었습니다! 0.23.0에서는 드디어 일반 선형 모델(GLM)이 추가되었습니다. PoissonRegressor, GammaRegressor, TweedieRegressor 입니다.

주피터 노트북에서set_config(display='diagram')로 지정하면 추정기를 다이어그램으로 시각화해 줍니다! 와우!

K-평균과 히스토그램 기반 그레이디언트 부스팅이 개선되었습니다. 또한 LassoElasticNet 클래스가 sample_weight 매개변수를 지원합니다.

0.23.0 버전의 주요 변경 사항은 릴리스 하이라이트를 참고하세요. 전체 변경 내용은 릴리스 노트를 참고하세요.

사이킷런 0.23.0은 pipconda 명령으로 설치할 수 있습니다(이 글을 쓰는 시점에는 아직 콘다 패키지가 제공되지 않습니다. 코랩도 아직 0.22.0 버전입니다).

$ pip install --upgrade scikit-learn

$ conda install scikit-learn

(업데이트) KMeans 버그를 수정한 0.23.1 버전이 릴리스되었습니다.

“파이썬을 활용한 머신러닝 쿡북”이 출간되었습니다!

x9791162241950크리스 알본의 ‘Machine Learning with Python Cookbook’을 번역한 <파이썬을 활용한 머신러닝 쿡북>이 출간되었습니다. 200개의 레시피에 머신러닝 작업에 필요한 핵심을 잘 담아 놓았습니다.

508페이지 로 뽑아 주신 한빛미디어 출판사에 감사드립니다. 온라인/오프라인 서점(교보문고, Yes24)에서 판매 중입니다. 절판되기 전에 어서 주문하세요! 🙂

“[개정판] 파이썬 라이브러리를 활용한 머신러닝”이 출간되었습니다!

x9791162241646안드레아스 뮐러Andreas Mueller와 세라 가이도Sarah Guido의 베스트 셀러 “Introduction to Machine Learning with Python“의 번역서인 “파이썬 라이브러리를 활용한 머신러닝“이 개정판으로 새롭게 출간되었습니다!

지난해 10월 원서 저자들이 최신 사이킷런 버전에서 추가된 내용을 반영하여 새롭게 원서를 릴리스했습니다. 원서에서 바뀐 부분을 번역서에 반영하기에는 변경사항이 너무 많아 난처했습니다.

다행히 출판사와 협의하여 새롭게 개정판을 준비할 수 있었습니다. 그동안 많은 독자들에게 사랑을 받았던 책이라 개정판은 특별히 컬러 인쇄가 되었습니다! 여러가지 배려를 아끼지 않은 한빛미디어에 감사드립니다. 시원한 컬러 그래프를 볼 생각을 하니 너무 기쁘네요. 🙂

개정판에 추가, 변경된 내용은 [개정판] 파이썬 라이브러리를 활용한 머신러닝 페이지를 참고하세요. 이 책은 YES24, 교보문고와 같은 온라인 서점과 오프라인 서점에서 판매 중입니다!

Python Machine Learning 2nd Ed. 번역 후기

cover_1

세바스찬 라시카의 Python Machine Learning 2nd Ed. 의 번역과 역자 교정을 마쳤습니다. 작업된 책이 조판으로 넘어가면 늘 아쉽습니다. 이때는 지식보다는 끈기가 더 중요한 것 같습니다. 작업 과정을 되돌아 보며 후기를 남깁니다.

개인적으로 머신 러닝 분야의 실용서 베스트 네 개를 꼽으라면 안드리아스 뮐러와 사라 가이도의 “Introduction to Machine Leaning with Python“, 오렐리앙 제롱의 “Hands-On Machine Learning with Scikit-Learn and TensorFlow“, 프랑소와 숄레의 “Deep Learning with Python“, 세바스찬 라시카의 “Python Machine Learning”입니다. 제가 이 네 권을 모두 번역했다는 사실이 믿기지 않습니다. 사실 가장 먼저 보았던 세바스찬의 책은 1판의 번역서가 이미 다른 곳에서 출간되었기 때문에 2판을 번역할 기회를 얻기 힘들거라 생각했습니다. 정말 큰 행운이 따랐기 때문에 이 책을 번역할 수 있었습니다. 기회를 주신 길벗 출판사에 다시금 감사드립니다.

네 권의 책은 모두 나름대로 저마다 다른 색깔을 가지고 있습니다. 앤디의 책은 머신 러닝 파이프라인 전반의 흐름을 잘 정리하였습니다. 역시 사이킷런의 핵심 개발자답습니다. 오렐리앙의 책은 이론과 코드가 균형을 잘 잡고 있고 머신러닝과 딥러닝 부분을 잘 설명하고 있습니다. 프랑소와의 책은 이론보다 코드를 중심으로 딥러닝 특히 케라스 라이브러리를 중점적으로 다룹니다. 케라스 창시자인 그가 바라보는 딥러닝과 인공지능의 청사진을 엿볼 수도 있습니다.

세바스찬의 책은 이들 중 가장 먼저 아마존 인공지능 분야 베스트셀러가 된 책입니다. 오렐리앙의 책처럼 머신러닝과 딥러닝을 모두 아우르고 있지만 넘파이를 사용해 알고리즘을 밑바닥부터 만들기 시작합니다. 이론과 코드가 잘 안배되어 있고 사이킷런과 텐서플로를 함께 사용합니다. 다른 책에서는 잘 설명되지 않는 선형 판별 분석과 커널 PCA를 자세히 다루고 있습니다. 웹 애플리케이션에 머신러닝 모델을 임베딩하여 배포하는 장은 이 책의 특징 중 하나입니다.

Python Machine Learning 2판이 2017년에 출간되었기 때문에 사용한 라이브러리 버전이 낮습니다. 번역서에서는 사이킷런의 최신 버전 0.20을 기준으로 새롭게 바뀐 점과 중요한 변화를 포함시켰습니다. 딥러닝 챕터를 바꾸는 작업이 어려웠습니다. 작년 말에 텐서플로 2.0 프리뷰가 나왔지만 아직 정보가 부족했고 정식 릴리스 일정을 알 수 없기 때문입니다. 출판사와 협의한 끝에 출간 일정이 조금 늦춰지더라도 텐서플로 2.0을 기준으로 딥러닝 부분을 바꾸기로 결정했습니다. 덕분에 13~16장에 텐서플로 2.0 알파 버전에서 새롭게 바뀐 부분을 반영할 수 있었습니다.

작년 9월부터 작업을 시작했습니다. 다른 일들도 있었지만 너무 오래 걸렸네요. 매년 겨울마다 큰 곤욕을 치르는 것 같습니다. 친절하게도 저자 세바스찬이 직접 에러타로 인해 수정된 pdf와 이미지를 보내주었습니다. 제가 추가로 찾은 에러타는 원서 깃허브에 올렸고 신중하게 판단하여 번역서에 반영하였습니다. 세바스찬이 에러타와 함께 덕담도 건네 왔습니다. “It’s good to know that the translation will be in good hands! :)”.

복잡한 수식과 많은 주석 때문에 고생하셨을 디자이너와 교정자에게 감사드립니다. 편집과 번역 전반의 과정을 잘 안내해 주신 안윤경 님께도 감사드립니다. 부디 많은 사람들에게 사랑받는 책이 되었으면 좋겠습니다. 감사합니다! 😀

Scikit-Learn 0.20.1 Release

사이킷런 0.20.1 버전이 릴리즈되었습니다.  이 버전은 0.20.0의 버그 수정이 주로 담겨있습니다. 0.20.0 버전을 사용하고 있다면 꼭 업데이트하세요. 자세한 수정 내용은 릴리즈 노트를 참고하세요. 사이킷런 0.20.1은 pip와 conda 사용하여 설치할 수 있습니다.
$ pip install --upgrade scikit-learn
$ conda update scikit-learn
<파이썬 라이브러리를 활용한 머신러닝>의 원서 저자인 안드레아스 뮐러가 사이킷런 0.20 버전과 향후 로드맵에 대해 DataEngConf에서 발표를 했습니다. 동영상이 아직 공개되진 않았지만 이전 컨퍼런스 영상이 공개되어 있기 때문에 기대해 봅니다. 일단 슬라이드만이라도 먼저 보시죠! 🙂

[사이킷런 정주행] 1. LinearRegression

선형 회귀

회귀는 연속적인 타깃을 예측하는 알고리즘입니다. 그 중에 선형 회귀Linear Regression가 가장 기본입니다. 선형 회귀는 훈련 데이터에 가장 잘 들어 맞는 선형 방정식

\hat{y}=w_1 \times x_1+w_1 \times x_1+\cdots+w_n \times x_n+b

를 찾는 문제입니다. 여기에서 n은 훈련 데이터에 있는 특성의 수입니다.

편의상 bw_0으로 바꾸어 하나의 벡터 \bold{w}로 나타내겠습니다. \bold{w}에 포함된 w_0에 대응하기 위해 훈련 데이터에 x_0=1을 추가하여 벡터 \bold{x}를 정의합니다. 이제 이 선형 방정식은

\hat{y} =\begin{pmatrix} w_0 & w_1 & \cdots & w_n \end{pmatrix}\cdot\begin{pmatrix} x_0 \\ x_1 \\ \vdots \\ x_n \end{pmatrix} =\bold{w}^T\bold{x}

와 같이 간단히 쓸 수 있습니다. 훈련 샘플이 하나가 아니라 여러개이므로 벡터 \bold{x}를 다음과 같이 행렬로 확장할 수 있습니다. 벡터는 굵은 소문자, 행렬은 굵은 대문자를 사용합니다. 여기에서 m은 훈련 샘플의 수입니다.

\bold{\hat{y}} =\begin{pmatrix}   x_0^1 & x_1^1 & \cdots & x_n^1 \\   x_0^2 & x_1^2 & \cdots & x_n^2 \\   \vdots \\   x_0^m & x_1^m & \cdots & x_n^m \end{pmatrix} \cdot \begin{pmatrix} w_0 \\ w_1 \\ \cdots \\ w_n \end{pmatrix} =\begin{pmatrix}   \bold{x}^1 \\   \bold{x}^2 \\   \vdots \\   \bold{x}^m \end{pmatrix} \cdot \begin{pmatrix} w_0 \\ w_1 \\ \cdots \\ w_n \end{pmatrix} =\bold{X} \bold{w}

얼마나 잘 들어 맞는지를 측정 방법으로는 평균 제곱 오차Mean Square Error, MSE를 사용합니다.

\text{MSE} =\frac{1}{m} (\bold{y}-\bold{\hat{y}})^2 =\frac{1}{m} (\bold{y}-\bold{X}\bold{w})^2

이런 측정 함수를 비용 함수cost function이라고 부릅니다. 선형 회귀의 비용 함수인 평균 제곱 오차를 최소화하는 선형 방정식의 \bold{w}를 찾아야 합니다. 해석적인 방법으로 해를 구할 수 있습니다. 비용 함수를 미분하여 도함수가 0이 되는 점을 찾습니다. 먼저 MSE 비용 함수를 간단한 식으로 표현하겠습니다.

\text{MSE} =\frac{1}{m} (\bold{y}-\bold{X}\bold{w})^2 =\frac{1}{m} (\bold{y}-\bold{X}\bold{w})^T(\bold{y}-\bold{X}\bold{w}) \\ \\ =\frac{1}{m} (\bold{y}^T\bold{y}-\bold{y}^T\bold{X}\bold{w}-\bold{w}^T\bold{X}^T\bold{y}+\bold{w}^T\bold{X}^T\bold{X}\bold{w}) =\frac{1}{m} (\bold{y}^T\bold{y}-2\bold{w}^T\bold{X}^T\bold{y}+\bold{w}^T\bold{X}^T\bold{X}\bold{w})

\frac{1}{m}은 미분 결과에 영향을 미치지 않으므로 제외하고 \bold{w}에 대해 미분합니다.

\frac{\partial}{\partial \bold{w}}\text{MSE} =-2\bold{X}^T\bold{y}+2\bold{X}^T\bold{X}\bold{w}

이 도함수가 0이 되는 \bold{w}는 다음과 같습니다. 이 식을 정규 방정식Normal Equation이라고 합니다.

\bold{w}=(\bold{X}^T\bold{X})^{-1}\bold{X}^T\bold{y}

샘플 데이터

사이킷런에 포함된 샘플 데이터 중 캘리포니아 주택 가격 데이터셋을 사용하겠습니다.

import sklearn
import numpy as np
import matplotlib.pyplot as plt

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_california_housing

fetch_california_housing()함수를 호출하여 사이킷런의 Bunch 클래스 객체를 얻습니다. 캘리포니아 주택가격 데이터셋은 전체 샘플 개수가 20,640개이고 8개의 특성을 가집니다.

housing = fetch_california_housing()
print(housing.data.shape, housing.target.shape)
(20640, 8) (20640,)

train_test_split() 함수를 사용해서 75%는 훈련 세트로 25%는 테스트 세트로 분리합니다. 편의상 그래프로 나타내기 편하도록 하나의 특성만 사용하겠습니다. 사이킷런의 모델은 훈련 데이터가 2차원 배열일 것으로 예상합니다. 따라서 housing.data 에서 하나의 특성만 선택하더라도 2차원 배열이 되도록 넘파이 슬라이싱을 사용했습니다. 여기서는 첫 번째 특성만 사용합니다.

X_train, X_test, y_train, y_test = train_test_split(housing.data[:, 0:1], 
                                                    housing.target, random_state=42)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
(15480, 1) (5160, 1) (15480,) (5160,)
Continue reading

머신러닝 Yearning 01~27

앤드류 응Andrew Ng 박사가 쓰고 있던 머신러닝 Yearning이 잠시 업데이트가 없었습니다. 코세라Courseradeeplearning.ai 강좌 때문이었다고 하네요. 강의 개발을 모두 끝내고 나서 다시 드래프트 버전을 업데이트하고 있습니다. 총 55개의 챕터가 쓰여질 예정인데 현재 27개의 챕터가 완료되었습니다. 아직 못 보신 분 들을 위해 지금까지 업데이트된 PDF를 모아서 블로그에 올려 놓았습니다!(다운로드) 🙂

(업데이트) 28~30장이 릴리즈되었습니다!(Ng_MLY05), 31~32장이 릴리즈되었습니다!(Ng_MLY06), 33-35장이 릴리즈되었습니다!(Ng_MLY07), 36-39장이 릴리즈되었습니다!(Ng_MLY08), 40~43장이 릴리즈되었습니다!(Ng_MLY09), 44~46장이 릴리즈되었습니다!(NG_MLY10), 47~49장이 릴리즈되었습니다!(NG_MLY11), 50~52장이 릴리즈되었습니다!(Ng_MLY12)