★★★★★ 좋은 내용, 멋진번역이네요(s9055038 님)
★★★★★ 머신러닝 전문가의 참고도서!(kjooh0220 님)
♥♥♥♥ 데이터사이언스 전처리 실무를 다루는 끝판왕!(na**mjjang 님)
‘파이썬을 활용한 머신러닝 쿡북’은 크리스 알본Chris Albon이 쓴 아마존 베스트셀러 ‘Machine Learning with Python Cookbook’의 번역서입니다.
이 책은 넘파이, 판다스, 사이킷런, 케라스 등을 사용한 머신러닝 핵심 레시피를 담고 있습니다. 짧은 레시피에서 부족한 부분은 덧붙임 섹션에 보완했습니다. 이 책에서 크리스만의 간결한 문장과 깔끔한 코드를 맛볼 수 있습니다. 어떤 작업을 하려는데 갑자기 메서드가 떠오르지 않을 때를 대비하여 책장에 꼭 들여 놓으세요! 🙂
- 온라인/오프라인 서점에서 판매중입니다. [교보문고] [Yes24]
- 508페이지, 컬러:
33,000원 –> 29,700원, 전자책: 26,400원 - 이 책에 실린 코드는 깃허브에 있습니다.
- 책의 코드는 케라스 2.2.4를 기준으로 하지만 깃허브는 최신 텐서플로 2.x을 기반으로 업데이트했습니다.
- 이 책의 코드는 numpy 1.16.2, scikit-learn 0.21.2, 0.22.0, 0.23.0 pandas 0.24.2, TensorFlow 2.2.0, 2.3.0(또는 keras 2.2.4), 2.6.0에서 테스트 되었습니다.
이 페이지에서 책의 에러타와 라이브러리 버전 변경에 따른 바뀐 점들을 계속 업데이트 하겠습니다. 이 책에 대해 궁금한 점이나 오류가 있으면 이 페이지 맨 아래 ‘Your Inputs’에 자유롭게 글을 써 주세요. 또 제 이메일을 통해서 알려 주셔도 되고 구글 그룹스 머신러닝/딥러닝 도서 Q&A에 글을 올려 주셔도 좋습니다.
감사합니다! 🙂
Outputs (aka. errata)
- 1~5: 2쇄에 반영되었습니다.
- (p60) 두 번째 코드 블럭의 주석에서 “랜덤하게 10번을 뽑습니다”를 “랜덤하게 5번을 뽑습니다”로 정정합니다.(이*찬 님)
- (p191) 레시피 7.4의 해결 섹션에 있는 코드 중에서 주석 “다섯 개의 날짜를 만듭니다”를 “150개의 날짜를 만듭니다”로 정정합니다.
- (p364) 두 번째 줄에서 “레시피 13.3 참조”를 “레시피 14.3 참조”로 정정합니다.(이*찬 님)
- (p456) 케라스 2.3 버전부터는
compile()
메서드의metrics
매개변수에 쓴 문자열이 그대로history
객체의 키 값이 됩니다. 케라스 2.3 버전 이상을 쓴다면 456페이지 아래쪽 코드 블럭의 첫 번째, 두 번째 줄에서history.history["acc"]
와history.history["val_acc"]
를history.history["accuracy"]
와history.history["val_accuracy"]
로 바꾸어 주세요.(이*찬 님) - (p93) ‘설명’ 단락의 첫 줄에서
value_unique
를value_counts
로 정정합니다.(정*민 님) - (p151) 13번째 줄에서
OneHot Encoder
를OneHotEncoder
로 정정합니다. - (p136) 페이지 중간의 코드 중에서
Binarizer(18)
을Binarizer(threshold=18)
로 변경합니다. 사이킷런 0.23버전부터 이 매개변수가 0.25 버전에서 키워드 매개변수로 변경된다는 경고가 출력됩니다. - (p422~423) p422 코드 중에서
KMeans(n_clusters=3, random_state=0, n_jobs=-1)
에 있는n_jobs=-1
을 삭제합니다. KMeans는 사이킷런 0.23 버전부터 OpenMP 기반으로 바뀌어 기본적으로 가능한 모든 코어를 활용합니다. p423에 8번째 줄의 “이렇게 하기 위해 n_jobs=-1로 설정합니다“를 “사이킷런 0.23버전부터 KMeans 클래스는 기본적으로 가능한 모든 코어를 사용합니다“로 변경합니다. - (p458)
from keras.callbacks import EarlyStopping, ModelCheckpoint
를from keras import regularizer
로 바꾸고, 렐루 활성화 함수를 사용하는 2개의Dense
층을 추가하는 코드에 규제 매개변수kernel_regularizer=regularizers.l2(0.01)
를 추가합니다.(서*교 님) - (p459)
fit()
메서드 코드에서epochs=3
으로 바꾸고callbacks=callbacks
매개변수를 삭제합니다.(서*교 님) - (p203) 아래에서 4번째 줄에 “가장 우측 상단의 픽셀 강도는 140입니다”를 “가장 좌측 상단의 픽셀 강도는 140입니다”로 정정합니다.(이*훈 님)
- (p75, 79, 81, 85, 86, 88, 91, 93, 95, 97, 99, 100, 102, 107, 108, 110) 타이타닉 데이터를 다운로드하는
https://tinyurl.com/titanic_csv
주소에 문제가 생겨서https://bit.ly/titanic_csv_data
로 바꿉니다. - (p177) 덧붙임의 첫 번째 문단 끝에 다음 주석을 추가합니다. “…설치할 수 있습니다.<주석>옮긴이_ 최신 버전의
tweepy
패키지가 설치될 경우konlpy
에서StreamListener
가 없다는 에러가 발생하므로 3.10버전을 설치해 주세요.pip install tweepy==3.10
</주석> - 사이킷런 1.0에서
get_feature_names()
메서드를 가진 변환기에get_feature_names_out()
메서드가 추가되었고get_feature_names()
는 deprecated 되어 1.2 버전에서 삭제될 예정입니다. 따라서 (p128) 마지막 줄, (p129) 1번째 줄, (p156) 위에서 15, 17번째 줄, (p179) 마지막 줄, (180) 2번째 줄, (p493) 아래에서 2번째 줄에서get_feature_names
를get_feature_names_out
으로 수정합니다. - (p229) 위에서 3번째 줄에서
corner
의 값을 정수로 변환하기 위해corner[0].astype('int')
로 수정합니다. - (p252) 9.4절 [해결]의 첫 번째 문장 끝에 다음 주석을 추가합니다. “… 차원을 축소합니다.<주석>옮긴이_ 기본값인
init=None
일 때n_components
가n_samples
나n_features
보다 작으면init='nndsvd'
가 됩니다. 사이킷런 1.1버전부터 이 값이'nndsvda'
로 바뀔 예정입니다.</주석> - (p252) 아래에서 9번째 줄에서
NMF
객체를 만들 때 반복횟수를 늘려주기 위해max_iter
매개변수를 추가합니다.nmf = NMF(n_components=10, max_iter=1000, random_state=1)
- (p283) 11.2절 [해결]의 첫 번째 문장 끝에 다음 주석을 추가합니다. “…모델을 만듭니다.<주석>옮긴이_ 보스턴 주택가격 데이터셋의 특성에는 흑인 인구 비율이 들어 있어 요즘 시대에 적절치 않다는 의견이 많았습니다. 사이킷런 1.0 버전에서
load_boston()
함수가 deprecated 되었고 1.2 버전에서 삭제될 예정입니다.</주석> - 로지스틱 회귀 객체를 만들 때 반복횟수를 늘려주기 위해 (p300) 위에서 15번째 줄, (p311) 위에서 5번째 줄에
max_iter
매개변수를 추가합니다.classifier = LogisticRegression(max_iter=1000)
- (p312) 위에서 4번째 줄에 0 나눗셈 경고를 피하기 위해 다음처럼
zero_division
매개변수를 지정합니다.print(classification_report(target_test, target_predicted, labels=[0,1,2,3], zero_division=0))
- 사이킷런 0.22 버전에서
solver
매개변수의 기본값이'liblinear'
에서'lbfgs'
로 변경되었습니다.'lbfgs'
는'l2'
페널티만 지원합니다. 예제에서'l1'
,'l2'
페널티를 그리드서치로 탐색하기 위해solver='liblinear'
로 지정합니다. 또 반복 횟수를 늘려주기 위해max_iter=1000
을 추가합니다. (p318) 위에서 13번째 줄, (p320) 아래에서 3번째 줄, (p323) 위에서 15번째 줄, (p325) 아래에서 7번째 줄, (p327) 아래에서 8번째 줄, (p329) 위에서 11번째 줄에서LogisticRegression()
을LogisticRegression(solver='liblinear', max_iter=1000)
으로 바꿉니다. - (p331) 위에서 8번째 줄에 반복 횟수를 늘려 주기 위해 max_iter 변수를 추가합니다.
logit = linear_model.LogisticRegressionCV(max_iter=1000, Cs=100)
- (p332) 사이킷런 1.0에서 매개변수 변화에 따른 경고가 발생하지 않으므로 아래에서 4번째 줄을 다음처럼 수정합니다.
logistic = linear_model.LogisticRegression(max_iter=1000)
- 사이킷런 1.0에서 매개변수 변화에 따른 경고가 발생하지 않으므로 위에서 (p333) 5번째 줄에
iid=False
, 7번째 줄에cv=3
, 아래에서 4번째 줄에iid=False
, (p334) 위에서 8번째 줄에cv=3
을 삭제합니다. - (p335) 위에서 2 번째 줄 끝에서 시작되는 문장, 아래에서 3번째 줄에 있는 문장, 마지막 줄에 있는 문장인 “경고를 출력하지 않기 위해 … 로 지정합니다”를 삭제합니다.
- (p355) 결정 트리의
criterion
매개변수 값인mae
가 사이킷런 1.0에서 deprecated되었고 1.2 버전에서 삭제될 예정입니다(mse
도 마찬가지). 대신'absolute_error'
를 사용합니다. 위에서 6번째 줄을decisiontree_mae = DecisionTreeRegressor(criterion="absolute_error", random_state=0)
으로 수정합니다. - (p374) 사이킷런 1.0에서 히스토그램 기반 부스팅이
experimental
모듈 아래에서 벗어났습니다. 따라서 위에서 8번째 줄 끝에서 시작하는 문장부터 12번째 줄까지 다음 내용을 삭제합니다.
“이 클래스들은 실험적이기 때문에 명시적으로 사용한다는 것을 선언해야 합니다.
# 히스토그램 기반의 그레이디언트 부스팅을 활성화하고 라이브러리를 임포트합니다.from sklearn.experimental import enable_hist_gradient_boosting
“ - (p397) 아래에서 2번째 줄에
compute_class_weight
함수에 키워드 매개변수를 추가합니다.compute_class_weight('balanced', classes=[0,1], y=target)
- (p98) 주석 2번을 삭제합니다. 아래에서 8번째 줄에 다음처럼 주석을 추가합니다. “바로 수정합니다.<주석>옮긴이_
inplece=True
로 지정하면 새로운 데이터프레임을 만들어 호출 객체에 재할당하며 성능상에 큰 잇점이 없습니다”</주석>” - (p327) 위에서 7번째 줄에 “만는 특성은”을 “만든 특성을”로 정정합니다.(이*곤 님)