카테고리 보관물: Data Science

Essential Math for Data Science 번역 완료!

작년 말부터 작업해 오던 <Essential Math for Dat a Science> 번역을 드디어 마쳤습니다! 이 책은 데이터 과학과 머신러닝에 꼭 필요한 수학을 소개하고 익힐 수 있는 책입니다. 벡터, 선형대수학, 미적분, 확률, 통계, 그리고 선형 회귀, 로지스틱 회귀, 신경망 훈련을 위한 경사 하강법까지 한 권에 알차게 담았습니다. 각 장의 내용은 다음을 참고해 주세요.

  • 1장은 오랫동안 잊고(!) 있었던 기본 수학을 다시 곱씹어 봅니다. 정수론, 변수, 함수, 거듭제곱, 로그, 자연 상수, 극한, 미분, 편미분, 연쇄법칙, 적분 등입니다. 다루는 개념이 많지만 꼭 필요한 것만 담고 있기 때문에 지루하지 않게 읽을 수 있습니다. 간간히 수학 공식이 나오지만 오래전(!) 다 배웠던 것들이라.. 콜록.. 파이썬으로 식을 계산하여 결과를 확인할 수 있습니다. 특별히 이 책은 기호 계산을 위해 심파이(sympy)를 사용합니다. 덕분에 결괏값이 깔끔하게 딱 떨어지죠.
  • 2장은 무시무시한 확률을 다룹니다. 먼저 확률과 가능도의 차이를 소개하고 오즈 비를 설명합니다. 그다음 결합 확률과 합 확률을 설명합니다. 그리고 조건부 확률과 베이즈 정리가 나옵니다. 커피를 마시는 사람이 암이 걸릴 확률이란 질문으로 언뜻 복잡하게 보이는 조건부 확률을 (모든 사람이 동의하지는 않을 수 있지만) 아주 쉽게 설명해 줍니다. 마지막으로 여러 가지 상황에서 유용하게 사용할 수 있는 이항 분포와 베타 분포를 설명하고 장을 마칩니다.
  • 3장은 기술 통계와 추론 통계를 다룹니다. 둘 사이의 차이점을 간단히 소개하고 모집단과 편향을 설명합니다. 특히 자기 선택 편향과 생존 편향을 예로 들어 설명합니다(네 생존 편향에는 영국 전투기 이야기가 빠질 수 없죠). 이어서 대표적인 기술 통계인 평균, 중앙값, 모드, 분산, 표준 편차를 소개합니다. 특히 분산과 표준 편차는 모집단과 표본의 경우를 나누어 설명합니다. 그다음 정규 분포를 소개하고 확률 밀도 함수와 누적 분포 함수(CDF), 역 CDF를 파이썬으로 계산하는 방법을 소개합니다. 책을 읽다보면 이런 개념이 어디에 사용되는지도 잘 이해할 수 있습니다. z 점수를 소개하면서 기술 통계를 마치고 추론 통계로 넘어갑니다. 추론 통계의 핵심인 중심 극한 정리, 신뢰 구간, p 값을 차례로 설명합니다. 표본이 늘어날 수록 중심 극한 정리가 어떻게 맞아 떨어지는지 확인할 수 있습니다. 단측 검정과 양측 검정을 활용한 가설 검정을 배우고 마지막으로 t 분포를 소개하는 것으로 장을 마칩니다.
  • 4장은 선형대수학을 다룹니다. 추상적이라 늘 헷갈리는 벡터와 선형 변환에 대해 넘파이를 사용해 차근차근 이해도를 높이는 식으로 글을 전개합니다. 이 과정에서 기저 벡터와 선형 종속에 대해 배울 수 있고, 행렬 곱셈을 익히게 됩니다. 넘파이 dot()과 matmul()의 차이도 엿볼 수 있습니다. 넘파이로 행렬식을 계산하는 방법과 행렬식이 기하학적으로 어떤 의미를 가지는지 알 수 있습니다. 이어서 몇가지 특수 행렬에 대한 소개가 이어집니다. 정방 행렬, 항등 행렬, 역행렬, 대각 행렬, 삼각 행렬, 희소 행렬입니다. 역행렬을 이용하여 연립 방정식의 해를 구하는 방법을 배웁니다. 이때 넘파이와 심파이 둘 다 사용해 이를 구현합니다. 마지막으로 고윳값과 고유 벡터를 설명하고 마칩니다.
  • 5장은 선형 회귀를 다룹니다. 먼저 간단하게 선형 회귀를 소개하고 사이킷런을 사용해 토이 데이터셋에서 회귀 모델을 훈련해 봅니다. 그다음 잔차와 제곱 오차에 대해 설명하고 최적의 직선을 찾기 위한 세가지 방법을 차례대로 나열합니다. 닫힌 형식 방정식, 역행렬, 경사 하강법입니다. 이 장에서는 손실 함수의 도함수를 구해 경사 하강법을 파이썬으로 직접 구현합니다. 그리고 과대적합과 분산에 대해서도 배웁니다. 만드는 것에 그치지 않고 상관계수, 통계적 유의성, 예측 구간 등을 사용해 모델을 평가하는 방법을 배웁니다. 마지막으로 훈련/테스트 세트 분할 방법과 다중 회귀를 소개합니다.
  • 6장은 선형 회귀의 짝궁인 분류 문제를 위한 로지스틱 회귀를 다룹니다. 오즈 비, 로그 오즈, 로지스틱 함수를 설명하고 5장과 마찬가지로 경사 하강법을 사용해 로지스틱 회귀 모델을 최적화하는 방법을 설명하고 구현합니다. 분류 모델을 분석하기 위해 널리 사용하는 오차 행렬, 정밀도, 재현율을 소개하고 ROC 곡선과 AUC 값을 사용해 모델을 평가하는 방법을 설명합니다. 마지막으로 클래스 불균형에 대해서 언급하네요.
  • 7장은 신경망을 다룹니다. 은닉층이 하나인 간단한 피드포워드 신경망을 소개하고 각 노드에서 어떻게 계산이 수행되는지 그림과 함께 설명합니다. 그리고 여러 종류의 활성화 함수를 소개하고 장단점과 일반적으로 사용되는 층을 안내합니다. 랜덤하게 초기화된 신경망으로 일단 정방향 계산을 수행하여 출력 결과를 얻는 방법을 보여줍니다. 그다음 랜덤하게 초기화된 가중치를 최적화하기 위해 역전파를 소개합니다. 이를 위해 연쇄 법칙으로 각 가중치에 대한 손실 함수이 도함수를 구하는 방법을 그림과 함께 자세히 안내합니다. 마지막으로 사이킷런이 다층 퍼셉트론 클래스를 사용하는 예제를 소개합니다. 또한 신경망과 딥러닝의 한계에 대해 이야기하면서 끝을 맺습니다.
  • 8장은 이 책의 나머지 장과 사뭇 다릅니다. 이 장은 데이터 과학자로서 어떻게 커리어를 성장시켜야 하는지 조언이 담겨 있습니다. 또한 기존 시장에 대한 비판적 시각도 읽을 수 있습니다. 먼저 정의할 수 없는(?) 데이터 과학을 다시 정의해 봅니다. 어디까지 데이터 과학의 범주일까요? 그리고 데이터 과학의 간략한 역사를 되짚어 봅니다. 이어서 데이터 과학자로서 자신만의 강점을 기르기 위해 SQL, 프로그래밍, 데이터 시각화에 대해 자세히 안내합니다. 백미는 데이터 과학자의 역할에서 주의해야 할 점을 나열한 부분입니다. 직함은 데이터 과학자인데 불량 IT 팀이 되어 버렸나요? 그렇다면 8장을 꼭 읽으세요!

“혼자 공부하는 머신러닝+딥러닝”, “혼자 공부하는 데이터 분석 with 파이썬” 주피터 노트북 재실행 완료

<혼자 공부하는 머신러닝+딥러닝>의 주피터 노트북과 <혼자 공부하는 데이터 분석 with 파이썬>의 주피터 노트북을 코랩, 사이킷런 1.2.2, 텐서플로 2.14.0, 판다스 1.5.3에서 모두 다시 테스트하여 업데이트했습니다! 코드 실행에 문제가 있거나 궁금한 점이 있으면 언제든지 블로그나 깃허브로 알려 주세요!

Introduction to Computation and Programming Using Python 3rd Edition 번역 완료!

MIT 존 구탁(John Guttag) 교수의 “Introduction to Computation and Programming Using Python 3rd Edition” 책 번역을 드디어 완료했습니다. 이 책은 단순히 파이썬 문법만 다루지 않고 계산적 사고를 돕기 위해 파이썬으로 여러가지 흥미로운 알고리즘을 구현해 보고 머신러닝을 포함해 파이썬 과학 생태계의 여러 측면을 배울 수 있습니다. 다음은 각 장의 내용을 요약한 것입니다.

1장은 계산적 사고와 두 종류의 지식에 대해 설명하는 것으로 시작됩니다. 프로그램 고정식 컴퓨터와 프로그램 내장식 컴퓨터의 차이점을 언급하면서 간단한 프로그래밍 발전 역사를 엿봅니다. 끝으로 프로그래밍 언어의 기본 구조, 문법, 정적 시맨틱, 시맨틱에 대해 설명하면서 어떻게 좋은 프로그램을 만들 수 있는지, 다른 언어와 파이썬 간의 차이점은 무엇인지를 소개하는 것으로 마칩니다.

2장은 파이썬의 기본 요소를 소개합니다. 먼저 간단한 파이썬의 특징과 역사를 살펴보고 아나콘다와 스파이더 IDE를 설치하는 방법을 설명합니다. 그다음 파이썬의 객체와 기본 스칼라 타입에 대해 알아 보고 몇 가지 예를 셸 프롬프트로 실행해 봅니다. 이어서 변수에 대해 설명하고 변수에 객체를 재할당할 때 생기는 미묘한 문제를 설명합니다. 그다음 if 문을 사용한 분기 프로그래밍을 설명합니다. 이와 함께 파이썬 코드를 여러 줄로 나누어 작성하는 방법도 소개합니다. 다음으로 문자열과 인덱싱, 슬라이싱, f-문자열을 설명합니다. 파이썬에서 사용자에게 입력을 받는 방법을 설명하면서 유니코드 인코딩에 대한 소개도 하고 있습니다. 그다음은 반복문입니다. while 문과 for 루프를 사용해 반복이 필요한 문제를 처리하는 방법을 소개합니다. 자연스럽게 range 함수도 소개합니다. 마지막으로 2~1000 사이의 소수의 합을 출력하는 퀴즈로 마무리합니다.

3장은 2장에서 배운 if, for, while 문을 사용해 간단한 프로그램을 작성하는 방법을 배웁니다. 먼저 완전 열거(exhaustive enumeration) 방식으로 제곱근을 구합니다. 이 방식의 단점을 생각해 본 다음 이분 검색(bisection search)으로 제곱근의 근삿값을 찾는 프로그램을 작성합니다. 부동소수점 숫자가 컴퓨터에서 어떻게 표현되는지 알아 보고 float 타입의 변수를 비교 연산자에 사용했을 때 발생할 수 있는 문제를 생각해 봅니다. 이 과정에서 비트, 이진수, 유효 숫자, 정밀도 등에 대해 알게 됩니다. 마지막으로 보편적인 근사 알고리즘인 뉴턴 방법을 사용해 다항식의 근을 찾는 코드를 작성합니다.

4장은 코드의 재사용성을 높이기 위해 함수의 필요성을 언급하고 함수를 정의하고 사용하는 방법을 소개합니다. 3장에서 만들었던 제곱근을 구하는 코드를 함수로 다시 구현해 봅니다. 그다음 위치 인수와 키워드 인수, 가변 길이 인수에 대해 소개합니다. 종종 혼동이 되는 변수의 유효범위에 대해 자세히 설명합니다. 이를 위해 스택 프레임을 설명하고 예를 들어 스택의 생성 소멸 과정을 자세히 안내합니다. 그다음 함수의 사양(specification)에 대해 소개합니다. 특히 추상화를 대해 재미있는 비유로 설명합니다. 지금까지 만든 함수에 독스트링으로 사양을 작성해 봅니다. 그다음 하나의 함수를 여러 개로 쪼개어 보고 함수를 인수나 반환값으로 사용하는 방법을 배웁니다. 이 과정에서 람다 함수를 소개합니다. 마지막으로 객체의 메서드에 간단히 소개하고 마칩니다.

5장은 튜플, 리스트, 레인지, 딕셔너리를 소개합니다. 튜플과 문자열의 비슷한 점과 다른 점을 소개하고 함수 반환 값에 많이 사용하는 복수 할당을 알아 봅니다. 레인지와 반복 가능한 객체에 대해 알아 보고 range 함수를 for 문에 적용해 봅니다. 그다음은 부수 효과로 골치 아플 수 있지만 유용한 객체인 리스트입니다. 이 절에서 리스트 안의 객체와 변수 사이의 바인딩에 대해 조금 더 자세히 알아 봅니다. 이 과정에서 id 함수와 is 연산자를 배웁니다. 또한 매개변수 디폴트 값에 빈 리스트를 넣었을 때 발생할 수 있는 놀라운 일도 살펴 봅니다. 리스트를 복제하기 위해 슬라이싱하는 방법과 copy 모듈을 사용하는 방법을 배웁니다. copy.deepcopy가 생각만큼 deep하지 않다는 사실도 알 수 있습니다. 그다음 파이썬 프로그래머들이 즐겨 사용하는 리스트 내포를 소개합니다. 하지만 두 개 이상 중첩하면 골치 아픕니다. 마지막으로 리스트를 사용해 고차 함수(high-order function)을 구현해보고 내장 고차 함수인 map의 사용법을 배웁니다. 5장은 여기서 끝나지 않고 집합(set)에 대해 소개하고 딕셔너리로 넘어갑니다. 딕셔너리에서 자주 사용되는 메서드를 소개하고 딕셔너리 내포도 다룹니다. 마지막으로 딕셔너리를 사용해 책 암호(book cipher)를 구현하는 간단한 예제로 마무리합니다!

6장은 재귀와 전역변수를 다룹니다. 먼저 재귀 예제의 헬로 월드인 팩토리얼을 반복문을 사용해 만든 것과 재귀를 사용해 만든 것을 비교하여 봅니다. 그다음 피보나치 수열을 재귀를 사용해 만들어 봅니다(사실 피보나치 수열은 피보나치가 만든 것이 아니군요!). 재귀를 사용하지 않고 더 효율적으로 피보나치 수열을 만들 수도 있습니다(이건 번역서 깃허브에 담겨 있습니다). 숫자가 아닌 문제에도 재귀를 사용할 수 있습니다. 예를 들면 팰린드롬(palindrome)이죠. 팰린드롬을 구현하면서 분할 정복에 대해 살짝 소개합니다. 이에 대해서는 12장에서 다시 알아 봅니다. 마지막으로 전역 변수는 일반적으로 사용하지 않도록 권장하지만 꼭 필요한 경우가 있기 때문에 간략히 소개합니다.

계속 읽기

“혼자 공부하는 데이터 분석 with 파이썬”이 출간되었습니다!

파이썬을 활용한 초절정 데이터 분석 입문서 <혼자 공부하는 데이터 분석 with 파이썬>이 출간되었습니다!

이 책은 파이썬 데이터 과학 생태계의 핵심 라이브러리인 판다스, 넘파이, 맷플롯립, 사이파이, 사이킷런을 사용하여 데이터 분석에 필요한 기초 지식을 쌓을 수 있도록 돕습니다. 또한 뷰티플수프, 리퀘스트 같은 유용한 다른 패키지도 함께 배울 수 있죠.

데이터 수집, 정제, 분석, 시각화, 검증 그리고 모델링까지 이 분야의 기술이 궁금하다면 바로 이 책으로 시작하세요!

동영상 강의도 함께 들으시면 책을 완독하는데 도움이 되실거에요! 🙂

한빛미디어의 혼공단에 참여해서 같이 공부하시면 더욱 좋습니다! 🙂

“머신러닝 파워드 애플리케이션”이 곧 출간될 예정입니다!

여름 내 작업했던 <머신러닝 파워드 애플리케이션>이 곧 출간됩니다. 아마도 다음 주 부터 온라인 서점에서 예약 판매가 시작될 예정입니다.

이 책은 아마존 베스트 셀러인 <Building Machine Learning Powered Applications>의 번역서입니다. 많은 머신러닝 책이 알고리즘 설명에 집중하고 있다보니 상대적으로 머신러닝 애플리케이션을 만드는데 도움이 되는 자료는 찾기 힘듭니다. 이 책은 이런 부분의 간극을 채우기 위한 좋은 시도입니다. 문제 정의, 데이터셋 찾기, 모델 구축, 디버깅, 배포에 이르기까지 실전에서 고려해야 할 좋은 가이드와 피해야 할 위험 요소를 잘 설명하고 있습니다. 특히 이 분야 리더들과의 인터뷰를 함께 싣고 있어서 설명이 조금 더 피부에 와 닿는 것 같습니다.

저자 에마뉘엘 아메장이 특별히 한국어판을 위한 서문을 보내 주었습니다. 책에 에마뉘엘의 사진과 함께 실을 예정인데요. 맛보기로 에마뉘엘이 쓴 서문을 공개합니다! ㅎ

많은 관심 부탁드립니다! 😀

konlpy와 soynlp를 사용한 네이버 영화 리뷰 감성 분류

한글 데이터를 사용한 감성 분류 예제로는 네이버 영화 리뷰 데이터셋(https://github.com/e9t/nsmc)이 유명하죠. 파이썬에서 konlpysoynlp를 사용하여 네이버 영화 리뷰 데이터셋을 다룬 예제가 필요하신가요? “머신 러닝 교과서 2판”에 관련된 예제를 실을 예정입니다. 하지만 미리 맛보지 않을 이유는 없겠죠? Enjoy! 🙂

https://github.com/rickiepark/python-machine-learning-book-3rd-edition/blob/master/ch08/naver_movie_review.ipynb

* 참 konlpy 예제는 “(개정판)파이썬 라이브러리를 활용한 머신러닝” 책에도 있습니다! ㅎ

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

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

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

SciPy 2017

파이썬 과학 컴퓨팅 컨퍼런스인 SciPy 2017이 텍사스주 오스틴에서 지난 10~16일에 열렸습니다. 올해에도 풍성한 토크튜토리얼 동영상이 유투브에 공개되었습니다. 이 중에 눈에 띄는 몇 개를 골라 보았습니다.

이 외에도 다양한 주제에 대한 여러 동영상이 많이 올라와 있습니다. 전체 리스트를 확인해 보세요.

토론토 대학의 CSCC11’s Lecture Note

토론토 대학의 강좌인 CSCC11: Introduction to Machine Learning and Data Mining의 2016년 가을 강의 노트가 온라인에 공개되어 있습니다. 아쉽게도 영상이 공개되지는 않습니다만 강의 노트를 볼 수 있어 다행입니다. 이 강의 노트는 모두 합치면 130여 페이지에 달하며 한 파일로 합친 것은 여기에서 다운 받을 수 있습니다.