‘머신 러닝 교과서 with 파이썬, 사이킷런, 텐서플로(개정 3판)’는 세바스찬 라시카Sebastian Raschka와 바히드 미자리리Vahid Mirjalili가 쓴 아마존 베스트셀러 <Python Machine Learning 3rd Edition>의 번역서입니다.
아마존 베스트 셀러 Python Machine Learning이 3판으로 돌아왔습니다! 넘파이로 밑바닥부터 알고리즘을 만들어 보는 것으로 시작하여 사이킷런과 텐서플로를 사용해 머신러닝과 딥러닝의 주요 알고리즘을 총 망라하고 있습니다. 이론은 물론 다양한 예제를 통해 실전 문제를 해결하는 방법을 배울 수 있습니다! 모든 코드는 깃허브에서 주피터 노트북으로 제공하며 코랩을 사용해 실행해 볼 수 있습니다. 이 책을 혼자 공부하시는 독자들을 위해 유튜브 강좌도 진행합니다!
3판에서는 사이킷런과 텐서플로 최신 버전에서 변경된 내용을 많이 포함하고 있습니다. 특히 딥러닝 파트는 합성곱 신경망, 순환 신경망 이외에도 GAN과 강화 학습 장이 추가되어 내용이 크게 보강되었습니다. 자그만치 868 페이지의 두꺼운 책을 풀 컬러로 인쇄해주신 길벗 출판사에게 감사드립니다. 많은 수식과 부족한 번역 때문에 고생하신 편집자, 교정자, 디자이너에게 정말 감사드립니다.
- 온라인/오프라인 서점에서 판매중입니다. [Yes24], [교보문고], [알라딘]
- 868페이지, 컬러:
44,000원 –> 39,600원, 전자책 35,200원 - 이 책에 실린 코드는 깃허브에 있습니다.
- 동영상 강의를 유튜브로 제공합니다.
- 이 책의 코드는 사이킷런 0.24, 1.0 버전, 텐서플로 2.4.0, 2.5.0, 2.6.0, 2.8.2에서 테스트 되었습니다.
이 페이지에서 수집된 에러타를 정리하여 제공합니다. 또 사이킷런이나 텐서플로의 새로운 버전에 맞춰 바뀐 점들을 계속 업데이트 하겠습니다. 이 책에 대해 궁금한 점이나 오류가 있으면 이 페이지 맨 아래 ‘Your Inputs’에 자유롭게 글을 써 주세요. 또 제 이메일을 통해서 알려 주셔도 되고 구글 그룹스 머신러닝/딥러닝 도서 Q&A에 글을 올려 주셔도 좋습니다. 또 카카오톡 오픈 채팅(참여코드: tensor)에 오셔서 문의해 주셔도 좋습니다.
세바스찬이 번역서 표지가 마음에 드는 모양입니다! ㅎ
감사합니다! 🙂
Outputs (aka. errata)
- ~16: 2쇄에 반영되었습니다.
- ~31: 3쇄에 반영되었습니다.
- ~38: 4쇄에 반영되었습니다.
- ~38, 49~58: 5쇄에 반영되었습니다.
- (p54) 위에서 4번째 줄, 7번째 줄에서 를 으로 정정합니다.
- (p61) 6번 주석에서 와 에 있는 위첨자는 샘플의 인덱스를 나타냅니다. 의 위첨자는 경사 하강법 단계를 나타냅니다. 혼돈을 피하기 위해 와 에 있는 위첨자를 빼고 벡터 표현(굵은 글씨)으로 바꿉니다. 또한 첫 번째 줄 끝에 누락된 괄호도 추가하여 다음과 같이 수정합니다. “퍼셉트론 학습 규칙에서 초기 가중치를 0으로 놓으면
와 같습니다. 이렇게 가 가중치 벡터의 크기에만 영향을 미칩니다. 가 0이 아니라면 값의 크기에 따라 방향이 바뀔 수 있습니다.” - (p71) Note에 있는 수식 3번째 줄에서 두 번째 시그마() 기호를 삭제합니다.
- (p40 주석5번, p112 주석 20번) “<핸즈온 머신러닝>(한빛미디어, 2018)”을 “<핸즈온 머신러닝 2판>(한빛미디어, 2020)”으로 수정합니다.
- (p19) 3장 목차에서 “3.3.2 다중 클래스를 위한 로지스틱 회귀 094″를 삭제합니다. 그 아래 목차 번호를 ‘3.3.3’–>’3.3.2′, ‘3.3.4’–>’3.3.3′, ‘3.3.5’–>’3.3.4′, ‘3.3.6’–>’3.3.5′ 로 수정합니다. (p94) “3.3.2 다중 클래스를 위한 로지스틱 회귀 ~ 앞서 언급한 OvR 기법입니다”를 노트로 바꿉니다. (p97) 3.3.3 목차 번호를 3.3.2로 수정합니다. (p100) 3.3.4 목차 번호를 3.3.3으로 수정합니다. (p104) 3.3.5 목차 번호를 3.3.4로 수정합니다. (p106) 3.3.6 목차 번호를 3.3.5로 수정합니다.
- (p97) 2장의 식과 일관성을 유지하기 위해 페이지 맨 아래 제곱 오차합 비용 함수 식을 에서 로 수정합니다.
- (p64) 주석 10번에서 https://github.com/gilbutITbook/080223/tree/master/code/ch02를 https://github.com/gilbutITbook/080223/tree/master/ch02로 정정하고, https://github.com/rickiepark/python-machine-learning-book-3rd-edition/tree/master/code/ch02를 https://github.com/rickiepark/python-machine-learning-book-3rd-edition/tree/master/ch02로 정정합니다.
- (p568) 첫 번째 문단 아래 코드에서
tf.keras.activation.tanh(z)
를tf.keras.activation.relu(z)
로 정정합니다.(지*현 님) - (p167) Note의 첫 번째 코드 블럭의 4번째 줄
X_test_robust = rbs.fit_transform(X_test)
를X_test_robust = rbs.transform(X_test)
로 정정합니다. 세 번째 코드 블럭 4번째 줄X_test_maxabs = mas.fit_transform(X_test)
를X_test_maxabs = mas.transform(X_test)
로 정정합니다. - (p168) 마지막 코드 블럭 바로 윗줄에서 ‘열을 하나 더 추가하고’를 ‘행을 하나 더 추가하고’로 정정합니다.
- (p169) 위에서 2번째 줄에서
print(ex_2f)
를print(l2_norm)
로 정정합니다. - (p154) 페이지 맨 위 “판다스를 사용한 범주형 데이터 인코딩”을 “4.2.1 판다스를 사용한 범주형 데이터 인코딩”로 정정합니다. 페이지 중간에 “4.2.1 순서가 있는 특성 매핑”을 “4.2.2 순서가 있는 특성 매핑”으로 정정합니다. (p155) 페이지 중간에 “4.2.2 클래스 레이블 인코딩”을 “4.2.3 클래스 레이블 인코딩”으로 정정합니다. (p157) 페이지 맨 위 “4.2.3 순서가 없는 특성에 원-핫 인코딩 적용”을 “4.2.4 순서가 없는 특성에 원-핫 인코딩 적용”으로 정정합니다.
- (p179) 2번째 문단 첫 번째 줄에서
itertools.combination
을itertools.combinations
로 정정합니다. - (p191) 2번째 문단 첫 번째 줄에서 “데이터에 있는 특성을 잡아낼 수 있습니다”를 “데이터에 있는 어떤 패턴을 찾을 수 있습니다”로 수정합니다.
- (p195) 4번 주석의 첫 번째 문장 “13개 고윳값의 합은 1입니다”를 삭제합니다.
- (p526) 노트 중간 코드 블럭에서
>>>import tensorflow.experimental.numpy as tnp
라인 아래>>>tnp.experimental_enable_numpy_behavior()
를 추가합니다. - (p214, 215) <그림 5-9>의 앞뒤 문장을 다음처럼 변경합니다. “결과 그래프를 보면 클래스 2의 샘플 하나가 로지스틱 회귀 모델의 결정 경계에 가까이 놓여 있습니다.
<그림 5-9>
규제 강도를 낮추어 로지스틱 회귀 모델이 훈련 데이터셋의 모든 샘플을 더 확실하게 분류하도록 결정 경계를 옮길 수 있습니다.” - (p637) 주석 13번의 마지막 줄에서
https://keras-ko.kr
을https://keras.io
로 수정합니다. - (p157) 넘파이 1.20버전부터 np.int가 deprecated 되었기 때문에 아래에서 7번째 줄에
OrdinalEncoder(dtype=np.int)
를OrdinalEncoder(dtype=int)
로 수정합니다. (p158) 위에서 12번째 줄에 “np.int
로 지정했습니다”를 “int
로 지정했습니다”로 수정합니다. (p159) 위에서 14번째 줄에OrdinalEncoder()
를OrdinalEncoder(dtype=int)
로 수정합니다. - (p236) 아래에서 5번째 줄 끝에 다음 주석을 추가합니다. “구현되어 있습니다.<주석>역주 사이킷런 1.2 버전에서
TSNE
클래스의init
매개변수의 기본값이'random'
에서'pca'
로 바뀔 예정입니다.” - (p271) 사이킷런 1.0 버전에서
plot_confusion_matrix()
가 deprecated 되었고 1.2 버전에서는 삭제될 예정입니다. 위에서 4번째 줄에서from sklearn.metrics import plot_confusion_matrix
를from sklearn.metrics import ConfusionMatrixDisplay
로 수정합니다. 위에서 5번째 줄과 아래에서 4번째 줄에서plot_confusion_matrix(pipe_svc, ...)
를ConfusionMatrixDisplay.from_estimator(pipe_svc, ...)
로 수정합니다. - (p278) 사이킷런 1.0 버전에서
plot_roc_curve()
가 deprecated 되었고 1.2 버전에서는 삭제될 예정입니다. 위에서 6번째 줄에서from sklearn.metrics import plot_roc_curve
를from sklearn.metrics import RocCurveDisplay
로 수정합니다. 위에서 12번째 줄에서plot_roc_curve(pipe_lr, ...)
를RocCurveDisplay.from_estimator(pipe_lr, ...)
로 수정합니다. - (p279) 사이킷런 1.0 버전에서
plot_precision_recall_curve()
가 deprecated 되었고 1.2 버전에서는 삭제될 예정입니다. 위에서 5번째 줄에서from sklearn.metrics import plot_precision_recall_curve
를from sklearn.metrics import PrecisionRecallDisplay
로 수정합니다. 위에서 11번째 줄에서plot_precision_recall_curve(pipe_lr, ...)
를PrecisionRecallDisplay.from_estimator(pipe_lr, ...)
로 수정합니다. - (p328) 사이킷런 1.0에서 히스토그램 기반 부스팅이
experimental
모듈 아래에서 벗어났습니다. 따라서 위에서 7번째 줄에서 시작하는 문장부터 9번째 줄까지 다음 내용을 삭제합니다. “이 클래스는 아직 실험적이기 때문에 사용하기 전에 먼저 활성화해야 합니다.from sklearn.experimental import enable_hist_gradient_boosting
“ - (p329) XGBoost 1.3.0에서 이진 분류 기본 평가 지표가
'error'
에서'logloss'
로 변경되었습니다. 또한 향후 레이블 인코딩을 수행하지 않는다는 경고가 발생합니다. 경고를 없애기 위해 위에서 6번째 줄에XGBClassifier(tree_method='hist', random_state=1)
을XGBClassifier(tree_method='hist', eval_metric='logloss', use_label_encoding=False, random_state=1)
로 수정합니다. - (p415) 아래에서 6번째 줄에
price_std
배열을 2차원으로 바꾸기 위해inverse_transform(price_std)
를inverse_transform(price_std.reshape(-1,1))
로 수정합니다. - (p419) 사이킷런 1.0에서
'absolute_loss'
가 deprecated 되었고 1.2 버전에서 삭제될 예정이기 때문에 대신'absolute_error'
를 사용합니다. 아래에서 4번째 줄에loss='absolute_loss'
를loss='absolute_error'
로 수정합니다. - (p428) 사이킷런 1.0에서
get_feature_names()
메서드를 가진 변환기에get_feature_names_out()
메서드가 추가되었고get_feature_names()
는 deprecated 되어 1.2 버전에서 삭제될 예정입니다. 주석의 끝에서 2번째 줄에get_feature_names()
를get_feature_names_out()
으로 수정합니다. - (p436) 사이킷런 1.0에서
'mse'
가 deprecated 되었고 1.2 버전에서 삭제될 예정이기 때문에 대신'squared_error'
를 사용합니다. 위에서 11번째 줄에criterion='mse'
를criterion='squared_error'
로 수정합니다. - (p308) 아래에서 두 번째 줄에서 ‘여기서 볼 수 있듯이 규제 강도가 가장 낮을 때(C=0.001)’을 ‘여기서 볼 수 있듯이 규제 매개변수가 가장 낮을 때(C=0.001)’로 수정합니다.(이*민 님)
- (p265) 위에서 18번째 줄에 “기본값은
'exhaust'
입니다”를 “기본값은'smallest'
입니다”로 정정합니다. - (p327) 사이킷런 1.0 변경 사항에 맞춰 위에서 7번째 줄에 있는 ‘mse’, ‘mae’를 ‘squared_error’, ‘absolute_error’로 바꿉니다. 8번째 줄에 있는 ‘mse’를 ‘squared_error’로 바꿉니다. 9번째 줄에서 ‘(기본값)를 사용합니다’를 ‘(기본값) 등을 사용합니다’로 바꿉니다. 10번째 줄에서 ‘사이킷런 0.26 버전에서’를 ‘사이킷런 1.1 버전에서’로 바꿉니다.
- (p111) 위에서 5번째 줄에 ‘정규할 수 있습니다’를 ‘정규화할 수 있습니다’로 정정합니다.(최*혁 님)
- (p211) 위에서 1번째 줄에 ‘클래스 내 산포행렬’을 ‘클래스 간의 산포행렬’로 정정합니다.(최*혁 님)
- (p154) 위에서 6번째, 8번째, 12번째, 14번째 줄의 class1을 class2로 바꿉니다. 같은 페이지 위에서 7번째, 13번째 줄의 class2를 class1으로 바꿉니다. (p155) 위에서 4번째, 6번째 줄의 class1을 class2로 바꿉니다. 같은 페이지 위에서 5번째 줄의 class2를 class1으로 바꿉니다.
- (p115) 사이킷런 1.3버전부터
SGDClassifier
의loss
매개변수 중 로지스틱 손실을 의미하는'log'
가'log_loss'
로 바뀔 예정이므로 주석 24번 끝에 다음 문장을 추가합니다. “사이킷런 1.3버전에서loss
매개변수 중'log'
가'log_loss'
로 바뀔 예정입니다.“
(만약 사이킷런 1.3버전을 사용한다면 p115 위에서 6번째 줄, p350 아래에서 2번째 줄, p355 아래에서 2번째 줄, p356 위에서 2번째 줄의'log'
를'log_loss'
로 바꾸어 사용하세요) - (p135)
RandomForestClassifier
의max_features
매개변수 기본값이'auto'
에서'sqrt'
로 바뀔 예정이므로 주석 31번의 첫 번째 문장 끝에 다음을 추가합니다. “(사이킷런 1.3버전에서 기본값이'auto'
에서'sqrt'
로 바뀝니다)“ - (p327)
GradientBoostingClassifier
의loss
매개변수 기본값이 1.3 버전에서'deviance'
에서'log_loss'
로 바뀔 예정이므로 그림 7-12 아래 4번째 줄에서 “로지스틱 회귀를 의미하는'deviance'
,”를 “로지스틱 회귀를 의미하는'deviance'
(사이킷런 1.3버전에서'deviance'
가'log_loss'
로 바뀝니다),”로 바꿉니다. - (p624) 그림 15-2 아래 공식에서 를 로 수정합니다.(이*엽 님)
- (p128) 위에서 2번째 줄, 5번째 줄, 10번째 줄에서
tree
를tree_model
로 정정합니다. (p131) 중앙의 코드 블록에서 3번째 줄에tree
를tree_model
로 정정합니다.(l***i 님) - (p564) 위에서부터 두 번째 수식에서 가장 오른쪽 식의 분자에 있는 두 번째 항 를 로 정정합니다.
- (p102) 위에서 4번째 줄에
X_train[(y_train == 0) | (y_train == 1)]
을X_train_std[(y_train == 0) | (y_train == 1)]
로 수정합니다.(김* 님) - (p606)
auto-mpg.data
를 다운로드할 때get_file()
함수에서 진행 막대를 출력하지 못해 오류를 발생시키는 버그가 있습니다. 이를 피하기 위해 아래 코드를>>> dataset_path = tf.keras.utils.get_file(
... "auto-mpg.data"
... "http://archive.ics.uci.edu/ml/machine-learning"
... "-database/auto-mpg/auto-mpg.data"))
다음과 같이 수정해 주세요.>>> dataset_path = tf.keras.utils.get_file(
... origin="https://archive.ics.uci.edu/static/public/9/auto+mpg.zip",
... extract=True)
>>> dataset_path = dataset_path.replace("auto+mpg.zip", "auto-mpg.data") - (p159) 위에서 14번째 줄에
OrdinalEncoder
를OneHotEncoder
로 수정합니다. - (p780) “가치 함수” 절의 공식에서 를 로 정정합니다.(조*우 님)
- (p273) 첫 줄에서 “정확도(PRE)”를 “정밀도(PRE)”로 수정합니다.
- (p308) 페이지 중간 부분의 코드 블록에서
socres.std() / 2
를scores.std()
로 수정합니다. - (p417) 노트에 있는 코드 중
>>> w = np.zeros(X.shape[1])
가 불필요하므로 삭제합니다.(김* 님) - (p115) 24번 역주의 첫 번째 줄에서 “
max_iter
(에포크 횟수, 기본값 5)”를 “max_iter
(에포크 횟수, 기본값 1000)”로 수정합니다. - (p133) 역주 노트에서
min_impurity_split
항목을 삭제하고 대신 다음을 추가합니다. “min_weight_fraction_leaf
: 리프 노드가 되기 위한 모든 입력 샘플의 가중치 합에 대한 최소 비율을 지정합니다. 기본값은 0입니다. 만약fit()
메서드에서sample_weight
매개변수를 지정하지 않으면 모든 샘플의 가중치는 같습니다.” - (p146) 3번 역주의 두 번째 줄에서 “주어진 데이터프레임 자체를 바꿉니다”를 “df 변수에 다시 매핑합니다”로 수정합니다.
- (p259) 9번 역주의 끝에 다음을 추가합니다. “사이킷런 1.3버전에서
LearningCurveDisplay
클래스와 비슷한ValidationCurveDisplay
클래스가 추가되었습니다. 자세한 내용은 사이킷런 온라인 문서(https://bit.ly/3PPjW7w)를 참고하세요.” - (p271) 역주 노트 1번째 줄에서 “사이킷런 0.22 버전에서 추가된
plot_confusion_matrix()
함수를“을 “ConfusionMatrixDisplay
클래스를“로 수정합니다. 2번째 줄에서 “첫 번째 매개변수로”를 “from_estimator
메서드의 첫 번째 매개변수로”로 수정합니다. 그림 6-11의 제목에서 “plot_confusion_matrix()
함수로“를 “ConfusionMatrixDisplay
클래스로“로 수정합니다. 그림 6-11 아래 첫 번째 문장에서 “plot_confusion_matrix()
함수는“를 “ConfusionMatrixDisplay
클래스는“로 수정합니다. - (p278) 역주 노트 1번째 줄에서 “사이킷런 0.22 버전에서
plot_roc_curve()
함수와plot_precision_recall_curve()
함수“를 “RocCurveDisplay
클래스와PrecisionRecallDisplay
클래스“로 수정합니다. 3번째 줄에서 “plot_roc_curve()
함수에 모델과 테스트 데이터를 전달하면RocCurveDisplay
객체를 반환합니다. 이 객체에는“을 “RocCurveDisplay
객체에는“으로 수정합니다. - (p279) 그림 6-14의 제목에서 “
plot_roc_curve()
함수로“를 “RocCurveDisplay
클래스로“로 수정합니다. 그림 6-14 아래 1번째 줄에서 “plot_roc_curve()
함수를plot_precision_recall_curve()
로“를 “RocCurveDisplay
클래스를PrecisionRecallDisplay
클래스로“로 수정합니다. - (p280) 그림 6-15의 제목에서 “
plot_precision_recall_curve()
함수로“를 “PrecisionRecallDisplay
클래스로“로 수정합니다. - (p314) 위에서 8번째 줄, 15번 역주의 1번째 줄 (p317) 위에서 4번째 줄, 7번째 줄, (p323) 4번째 줄, 10번째 줄, 22번 역주의 1번째 줄, 2번째 줄에서
base_estimator
를estimator
로 수정합니다. - (p612) 페이지 아래쪽 노트 바로 위의 문장 끝에 주석을 추가합니다. “<역주>
BoostedTreesRegressor
클래스를 사용하려면 텐서플로 2.8.x 버전을 사용해야 합니다.” - (p105) 아래에서 6번째 줄에 “당연하지만 열을 모두 더하면”을 “당연하지만 각 행의 열을 모두 더하면”으로 수정합니다.(김*식 님)
- (p271) 위에서 5 번째 줄에
X_text
를X_test
로,y_text
를y_test
로 수정합니다. 그림 6-12 위 3번째 줄에X_text
를X_test
로 수정합니다.(김*식 님)
P102에서
X_train을 사용하는데
label이 petal length [standardized]가 맞나요?
X_train_std를 사용해야 하는것이 아닌지 합니다.
좋아요좋아요
안녕하세요. 아이쿠 X_train_std를 사용하는게 맞습니다. 감사합니다!
좋아요좋아요
안녕하세요. 혹시 오픈카톡 비밀번호가 tensor가 맞을까요? 잘못입력했다고 뜨네요 ㅜ
좋아요좋아요
오픈카톡 비번은 flow 입니다. 감사합니다!
좋아요좋아요