<jupyter_start><jupyter_text>정보 이론(Information theory)<jupyter_code>import numpy as np
### 8개의 기호(예 : 1~8 또는 A/B/C/D/E/F/G/H 또는 월화수목금토일8 등)를 압축할 떄 필요한 비트 수
np.log2(8)<jupyter_output><empty_output><jupyter_text>월화수목금토일 : 7개의 요일을 압축할 때 필요한 비트 수<jupyter_code>np.log2(7)<jupyter_output><empty_output><jupyter_text>N개의 문자의 빈도값(확률)이 다를 때문자 예 : A~Z (ABCD : 90%, E~Z : 10%)<jupyter_code>4 * 0.225 * np.log2(1./0.225) + 22 * 0.0045 * np.log2(1./0.0045)<jupyter_output><empty_output><jupyter_text>개를 좋아하는 Bob의 엔트로피는    50% : dog, 25% : cat, 12.5% : fish, 12.5% : bird<jupyter_code>entropy_Bob_code = 0.5 * np.log2(1./0.5) + 0.25 * np.log2(1./0.25) + 0.125 * np.log2(1./0.125) + 0.125 * np.log2(1./0.125)
print(entropy_Bob_code)<jupyter_output>1.75<jupyter_text>고양이를 좋아하는 Alice의 엔트로피는12.5% : dog, 50% : cat, 25% : fish, 12.5% : bird<jupyter_code>entropy_Alice_code = 0.125 * np.log2(1./0.125) + 0.5 * np.log2(1./0.5) + 0.25 * np.log2(1./0.25) + 0.125 * np.log2(1./0.125)
print(entropy_Alice_code)<jupyter_output>1.75<jupyter_text>Bob과 Alice의 엔트로피는 같다?<jupyter_code>np.equal(entropy_Bob_code, entropy_Alice_code)<jupyter_output><empty_output><jupyter_text>Alice가 나와 대화를 나눴다. 그런데, Bob의 코드값으로 나눴다면?    cross-entropy라고 한다.<jupyter_code>entropy_Alice_by_Bob_code = 0.125 * np.log2(1./0.5) + 0.5 * np.log2(1./0.25) + 0.25 * np.log2(1./0.125) + 0.125 * np.log2(1./0.125)
print(entropy_Alice_by_Bob_code)<jupyter_output>2.25<jupyter_text>Bob이 나와 대화를 나눴다. 그런데, Alice의 코드값으로 나눴다면?<jupyter_code>entropy_Bob_by_Alice_code = 0.5 * np.log2(1./0.125) + 0.25 * np.log2(1./0.5) + 0.125 * np.log2(1./0.25) + 0.125 * np.log2(1./0.125)
print(entropy_Bob_by_Alice_code)<jupyter_output>2.375<jupyter_text>Bob과 Alice의 크로스-엔트로피는 같다?<jupyter_code>np.equal(entropy_Bob_by_Alice_code, entropy_Alice_by_Bob_code)<jupyter_output><empty_output><jupyter_text>Alice의 cross-entropy 값과 Bob의 entropy 값의 차이를 KL divergence(Kullback-Leibler divergence)라고 한다. 서로간의 값이 다르기 때문에 distance가 아닌 divergence라고 한다.<jupyter_code>KL_divergence_Alice_by_Bob_code = entropy_Alice_by_Bob_code - entropy_Bob_code
print(KL_divergence_Alice_by_Bob_code)<jupyter_output>0.5<jupyter_text>Bob의 cross-entropy 값과 Alice의 entropy 값의 차이<jupyter_code>KL_divergence_Bob_by_Alice_code = entropy_Bob_by_Alice_code - entropy_Alice_code
print(KL_divergence_Bob_by_Alice_code)<jupyter_output>0.625<jupyter_text>Bob과 Alice의 KLdivergence는 같다?<jupyter_code>np.equal(KL_divergence_Bob_by_Alice_code, KL_divergence_Alice_by_Bob_code)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14660743134087237, 'fraction_numerical': 0.08602584814216478, 'mean_word_length': 6.242690058479532, 'pattern_counts': {'":': 0, '<': 43, '<?xml version=': 0, '>': 43, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '532791', 'license': 'MIT', 'n_tokens_mistral': 1496, 'n_tokens_neox': 1478, 'n_words': 157, 'path': 'code/InformationTherory.ipynb', 'repo_name': 'zeran4/justdoit', 'size': '2476'}