[핸즈온 머신러닝 2판] 86p, crc를 이용한 테스트셋 분할

52 views
Skip to first unread message

mungchi

unread,
Oct 9, 2022, 9:13:19 AM10/9/22
to 머신러닝/딥러닝 도서 Q&A
원문코드입니다.

def train_set_check( identifier,  test_ratio ):
    return crc32( np.int64( identifier )) & 0xffffffff < test_ratio * 2 ** 32


편의상 "test_ratio * 2 ** 32"를 "test_ratio" 라고 칭하겠습니다.

전체 데이터셋이 추가 혹은 수정 되더라도 crc값을 이용해서 기존 테스트셋에 사용되었던 데이터는 여전히 테스트셋으로만 배분되게끔 한다는 내용입니다.

궁금한 부분은 crc32() 의 리턴값이 랜덤..하진 않겠지만 쉽게 예측하기 힘든 32비트 숫자일텐데, 막연하게 "test_ratio"보다 작은지 아닌지로 판단해서 테스트셋을 나누는 게 바람직한지 입니다.
과장해서 예를 들자면, 주어진 데이터의 crc32() 리턴값이 모조리 "test_ratio"보다 큰 값이라면 테스트셋에는 아무런 데이터도 배분되지 않을테니까요.

그런데 막상 저렇게 해보니 테스트셋에 정확하게 test_ratio만큼 배분이 되더군요 신기하게도;;

제가 모르는 crc기법의 특성이 있는 걸까요..?


ps. 어떻게 검색을 하다가 여기까지 흘러왔는데, 지금까지 제가 봐왔던 상당수의 딥러닝/머신러닝 서적을 작가님께서 다 번역을 하셨더군요. 심지어 아직 못 본 책도 한 무더기..
정말 잘 보고 있습니다. 감사합니다.

Haesun Park

unread,
Oct 9, 2022, 9:38:41 AM10/9/22
to mungchi, 머신러닝/딥러닝 도서 Q&A
안녕하세요. 박해선입니다.
crc32 함수는 해시 함수와 비슷한 역할을 합니다.
어떤 데이터의 crc32 값이 모두 test_ratio*2**32 보다 큰 값이 나올 가능성은 매우 희박합니다.
이 함수에 대한 더 자세한 내용은 온라인을 참고하세요.
감사합니다!

2022년 10월 9일 (일) 오후 10:13, mungchi <mungc...@gmail.com>님이 작성:
--
이 메일은 Google 그룹스 '머신러닝/딥러닝 도서 Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ml-dl-book-qn...@googlegroups.com에 이메일을 보내세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/ml-dl-book-qna/4eb4c968-8ac7-42c4-8738-69e2ee76af0en%40googlegroups.com을(를) 방문하세요.
Reply all
Reply to author
Forward
0 new messages