<혼자 공부하는 머신러닝+딥러닝> 에러타 안내

45 views
Skip to first unread message

Haesun Park

unread,
Jan 2, 2021, 11:30:17 PM1/2/21
to 머신러닝/딥러닝 도서 메일링 리스트
안녕하세요. 박해선입니다.

<혼자 공부하는 머신러닝+딥러닝>에 새로 등록된 에러타를 안내해 드립니다.
  • (p87) “시작하기 전에” 절 아래 7번째 줄에서 “250g”을 “150g”으로 정정합니다.
  • (p103) 페이지 아래 쪽 풍선말에서 “테스트 세트의 기준으로 훈련 세트를 변환해야”를 “훈련 세트의 기준으로 테스트 세트를 변환해야”로 정정합니다.(서*교 님)
  • (p100) 마지막 문단 옆에 풍선말을 추가합니다. “브로드캐스팅은 넘파이 배열 사이에서 일어납니다. train_input, mean, std가 모두 넘파이 배열입니다.”
  • (p115) 여기서 잠깐 섹션에서 “1980년대 통계학자이자”를19세기 통계학자이자”로 정정합니다.(서*교 님)
  • (p121) 위에서 3번째 문장에서 “타깃이 예측에 아주 가까워지면 (분모가 0에 가까워지기 때문에)”를 “예측이 타깃에 아주 가까워지면 (분자가 0에 가까워지기 때문에)”로 정정합니다.(서*교 님)
  • (p274) 첫 번째 손코딩과 그 아래 첫 번째 문단을 다음 내용으로 교체합니다.(서*교 님)
히스토그램 기반 그레이디언트 부스팅의 특성 중요도를 계산하기 위해 permutation_importace() 함수를 사용하겠습니다. 이 함수는 특성을 하나씩 랜덤하게 섞어 모델의 성능이 변화하는지 관찰하는 식으로 어떤 특성이 중요한지 계산합니다. 또한 훈련 세트 뿐만 아니라 테스트 세트에도 적용할 수 있고 사이킷런에서 제공하는 추정기 모델에 모두 사용할 수 있습니다.

먼저 히스토그램 기반 그레이디언트 부스팅 모델을 훈련하고 훈련 세트에서 특성 중요도를 계산해 보겠습니다. n_repeats 매개변수는 랜덤하게 섞을 횟수를 지정합니다. 여기서는 10으로 지정하겠습니다. 기본값은 5입니다.

from sklearn.inspection import permutation_importance

hgb.fit(train_input, train_target)
result = permutation_importance(hgb, train_input, train_target, n_repeats=10, random_state=42, n_jobs=-1)
print(result.importances_mean)
[0.08876275 0.23438522 0.08027708]

permutation_importance() 함수가 반환하는 객체는 반복하여 얻은 특성 중요도(importances), 평균(importances_mean), 표준 편차(importances_std)를 담고 있습니다. 평균을 출력해 보면 랜덤 포레스트와 비슷한 비율임을 알 수 있습니다. 이번에는 테스트 세트에서 특성 중요도를 계산해 보겠습니다.

result = permutation_importance(hgb, test_input, test_target, n_repeats=10, random_state=42, n_jobs=-1)
print(result.importances_mean)
[0.05969231 0.20238462 0.049 ]

테스트 세트의 결과를 보면 그레이디언트 부스팅과 비슷하게 조금 더 당도에 집중하고 있다는 것을 알 수 있습니다. 이런 분석을 통해 모델을 실전에 투입했을 때 어떤 특성에 관심을 둘지 예상할 수 있습니다.

새해 복 많이 받으세요!
감사합니다.

Haesun Park

unread,
Jan 6, 2021, 9:34:24 PM1/6/21
to 머신러닝/딥러닝 도서 메일링 리스트
안녕하세요. 박해선입니다.

<혼자 공부하는 머신러닝+딥러닝>에 새로 등록된 에러타를 안내해 드립니다.
  • (p182) 페이지 마지막 문장 “ 번째 클래스에 대한 확률은 1/3=0.3333이고 다섯 번째 클래스에 대한 확률은 2/3=0.6667이 됩니다”를 “다섯 번째 클래스에 대한 확률은 1/3=0.3333이고  번째 클래스에 대한 확률은 2/3=0.6667이 됩니다”로 정정합니다.(s*o 님)
  • (p148) 아래에서 4번째 줄에 “fit_intercept 매개변수를 True로 지정하면 절편을 학습하지 않습니다”를 “fit_intercept 매개변수를 False로 지정하면 절편을 학습하지 않습니다”로 정정합니다.
  • (p141) 아래쪽 손코딩 중 아래에서 2번째 줄에 plt.scatter([50], [1574], marker='^')를 plt.scatter(50, 1574, marker='^')로 수정합니다. 실행 결과는 동일하지만 코드를 읽기 쉽도록 바꾸었습니다.(서*교 님)
  • (p243) <여기서 잠깐> 박스의 첫 번째 줄에 “테스트 세트와 훈련 세트로 떼어 놓습니다”를 “테스트 세트와 검증 세트로 떼어 놓습니다”로 정정합니다.(서*교 님)
  • (p305) 맨 아래에서 3번째 줄 끝에 “labels_ 길이는 샘플 개수“를 “labels_ 배열의 길이는 샘플 개수와 같습니다. 이 배열은“로 수정합니다.(서*교 님)
  • (p159) 맨 아래 노트 끝에 다음 문장을 추가합니다. “특성마다 계산하므로 55개의 평균과 표준 편차가 들어 있습니다.
  • (p355) 맨 아래 2개의 리스트 항목에서 “binary_corssentropy”와 “categorical_corssentropy”를 “binary_crossentropy”와 “categorical_crossentropy”로 정정합니다.(고*진 님)
  • (p356) 아래쪽 그림에서 오른쪽의 원-핫 인코딩 배열에서 첫 번째 원소를 0에서 1로, 두 번째 원소를 1에서 0으로 수정합니다.(고*진 님)
  • (p560) 3-1절 1번 문제 답을 (1)번에서 다음과 같이 (2)번으로 정정합니다. “(2) k-최근접 이웃 회귀는 예측할 샘플에서 가장 가까운 k 개의 주변 샘플을 찾고 이 주변 샘플의 타깃값을 평균하여 예측값을 구합니다“(오*경 님)
  • (p569) 8-1절 확인문제 2번 답에서 두 번째 열의 값이 8, 810이 아니라 8, 1214입니다.(고*진 님)
  • (p471) 맨 아래 코드에서 dense1(hidden)을 dense2(hidden)으로 수정합니다.(고*진 님)
  • 코드와 설명을 맞추기 위해 (p472) 위에서 두 번째 줄에 있는 코드에서 Model(inputs, outputs)를 keras.Model(inputs, outputs)로 바꾸어 주세요. (p473) 두 번째 그림에서 conv_acti = Model(...)을 conv_acti = keras.Model(...)로 바꾸어 주세요.(고*진 님)
  • 코드의 일관성을 위해 (p474) 첫 번째 코드에서 keras.models.Model(...)을 keras.Model(...)로 바꾸어 주세요. 마찬가지로 (p476) 첫 번째 손코딩, (p480) 마지막 줄, (p481) 아래에서 10번째 줄에서 keras.models.Model(...)을 keras.Model(...)로 바꾸어 주세요.
  • (p417) 코드 끝에서 3번째 줄에 plt.save('7_3-07', dpi=300)을 삭제합니다.(채*석 님) 
  • (p474) 첫 번째 코드 블록에 <손코딩> 아이콘을 추가해 주세요.
감사합니다! :)
Reply all
Reply to author
Forward
0 new messages