201강은 하나의 분포를 쟀습니다. 이제 두 변수를 함께 잽니다.
를 알고 나서 에 남은 불확실성이 조건부 엔트로피이고, 줄어든 양이 상호정보량입니다.
상관계수와 달리 직선이 아닌 관계도 잡아냅니다. 175강 문제 2에서 "상관 이 독립이 아니다"라고 했던 자리를 이 양이 채웁니다.
그런데 공짜가 아닙니다. 칸을 몇 개로 나누느냐와 표본이 몇 개냐가 값을 크게 바꾸며, 그 함정이 이 강의의 절반입니다.
문제. 세 양을 정의합니다.
(1) 무엇을 재는지 정리하세요.
(2) 네 결합분포로 계산하세요.
(3) 부등식을 확인하세요.
생각의 실마리. 두 변수를 함께 재면 새로운 양이 셋 생깁니다. 셋이 사슬 규칙 하나로 묶입니다.
풀이. (1) 정리합니다.
| 무엇 | 무엇을 재나 | 식 |
|---|---|---|
| 결합 엔트로피 | 둘을 함께 아는 데 드는 양 | |
| 조건부 엔트로피 | 를 안 뒤 에 남은 양 | |
| 상호정보량 | 가 에 대해 말해 주는 양 |
(2) 네 결합분포로 계산합니다.
| 무엇 | 상호정보량 | ||||
|---|---|---|---|---|---|
| 완전 독립 | |||||
| 약한 의존 | |||||
| 강한 의존 | |||||
| 완전 일치 |
독립이면 상호정보량이 이고 결합이 두 엔트로피의 합입니다.
완전히 같으면 상호정보량이 와 같고 남은 불확실성이 입니다.
가운데 둘은 그 사이입니다. 의존이 셀수록 상호정보량이 큽니다.
(3) 부등식을 확인합니다. 무작위 결합분포를 만 개 만들어 봅니다.
| 무엇 | 확인할 것 | 가장 나쁜 경우 | 성립 |
|---|---|---|---|
| 결합은 합 이하 | 예 | ||
| 결합은 각각 이상 | 예 | ||
| 상호정보량은 이상 | 예 | ||
| 결합은 이상 | 예 |
만 번을 무작위로 만들어도 네 부등식이 모두 지켜집니다.
첫째 줄과 셋째 줄이 같은 값입니다. 이므로 같은 사실을 두 번 적은 것입니다.
상호정보량이 이상인 것이 203강 KL 발산의 비음성과 같은 사실입니다.
이 문제에서 배우는 것. 상호정보량은 세 가지 다른 얼굴을 가집니다. "줄어든 불확실성"이고, "결합과 독립의 차이"이고, 203강에서는 "결합분포와 독립분포 사이의 KL 발산"입니다. 셋이 같은 값이므로 어느 각도에서 봐도 되지만, 문제를 푸는 각도가 그때그때 다릅니다. 특성 선택에서는 첫째, 독립성 검정에서는 둘째, 변분추론에서는 셋째로 봅니다.
바로 확인 1.
확인 1-1. 사슬 규칙을 쓰세요.
답. 입니다.
확인 1-2. 검산에서 네 결합분포의 상호정보량을 쓰세요.
답. , , , 입니다.
확인 1-3. 검산에서 강한 의존의 조건부 엔트로피를 쓰세요.
답. 입니다.
문제. 상관계수와 견줍니다.
(1) 네 관계를 만들어 둘을 재세요.
(2) 칸 개수를 바꿔 보세요.
(3) 표본 크기를 바꿔 보세요.
생각의 실마리. 상관계수는 직선 관계만 봅니다. 상호정보량은 그런 제약이 없습니다.
풀이. (1) 네 관계를 만들어 봅니다.
| 관계 | 상관계수 | 상호정보량 비트 | 판정 |
|---|---|---|---|
| 직선 | 둘 다 잡음 | ||
| 포물선 y=x^ | 상관이 못 잡음 | ||
| 원 위의 점 | 상관이 못 잡음 | ||
| 아무 관계 없음 | 관계 없음 |
포물선과 원은 상관이 근처인데 상호정보량이 큽니다.
원 위의 점은 상관 인데 상호정보량이 로 가장 큽니다. 를 알면 가 두 값으로 좁혀지기 때문입니다.
175강 문제 2에서 상관 이 독립이 아니라고 한 것이 이것입니다.
(2) 그런데 상호정보량도 공짜가 아닙니다. 칸을 몇 개로 나누느냐가 값을 바꿉니다.
| 칸 개수 | 독립인 자료 | 포물선 자료 | 차이 |
|---|---|---|---|
칸을 늘리면 독립인 자료에서도 상호정보량이 커집니다. 가 이 됩니다.
201강 문제 5의 치우침이 여기서 그대로 나타납니다. 칸이 늘면 칸당 표본이 줄고, 그만큼 없는 의존이 보입니다.
그래서 두 변수의 상호정보량을 견줄 때 칸 개수를 맞춰야 합니다.
(3) 칸 개수를 로 고정하고 표본 크기를 바꿔 봅니다.
| 표본 크기 | 독립인 자료의 상호정보량 | 참값 |
|---|---|---|
표본이 작으면 없는 의존이 보입니다. 칸에 개뿐이면 대부분의 칸이 비고, 찬 칸끼리 우연히 맞물립니다.
는 문제 1의 "강한 의존"보다도 큰 값입니다.
표본이 늘면 으로 갑니다. 칸 개수와 표본 크기를 함께 봐야 합니다.
이 문제에서 배우는 것. "상호정보량이 크다"는 보고를 그대로 믿으면 안 됩니다. 위 표에서 관계가 전혀 없는 두 변수가 비트를 냈는데, 그것은 자료가 아니라 칸과 표본의 비율이 만든 값입니다. 대응은 셋입니다. 칸 개수를 표본에 맞춰 정하거나, 201강 심화 의 치우침 보정을 쓰거나, 라벨을 섞어 다시 계산한 값과 견주는 것입니다. 셋째가 가장 안전하며 179강 문제 의 순열검정과 같은 발상입니다.
바로 확인 2.
확인 2-1. 검산에서 원 위의 점의 상관계수와 상호정보량을 쓰세요.
답. 과 입니다.
확인 2-2. 검산에서 칸 개와 개일 때 독립인 자료의 상호정보량을 쓰세요.
답. 와 입니다.
확인 2-3. 검산에서 표본 일 때 독립인 자료의 상호정보량을 쓰세요.
답. 이며 참값은 입니다.
문제. 변수를 셋으로 늘립니다.
(1) 사슬 규칙의 순서를 바꿔 보세요.
(2) 조건을 걸어 보세요.
(3) 대칭성을 확인하세요.
생각의 실마리. 변수가 셋이면 사슬 규칙이 길어집니다. 어느 순서로 풀어도 총량이 같아야 합니다.
풀이. (1) 순서를 바꿔 봅니다.
| 어떤 순서로 | 세 항의 합 | |
|---|---|---|
| 다음 다음 | ||
| 다음 다음 | ||
| 다음 다음 |
순서와 무관하게 같습니다. 어느 길로 가도 총량은 하나입니다.
(2) 조건을 걸어 봅니다. 조건을 걸면 상호정보량이 늘 수도 줄 수도 있습니다.
| 어떤 구조 | 어느 쪽이 큰가 | ||
|---|---|---|---|
| 공통 원인 | 조건 안 걸 때 | ||
| 공통 결과 | 조건 걸 때 |
공통 원인을 통제하면 관계가 사라집니다. 이 이 되며, 177강 문제 3의 교란입니다.
공통 결과를 통제하면 없던 관계가 생깁니다. 이 가 되며, 177강 문제 3의 충돌부입니다.
둘째 줄이 극단적입니다. 이므로 를 알면 가 를 완전히 결정합니다.
(3) 대칭성을 확인합니다.
| 무엇 | 차이 | ||
|---|---|---|---|
| 어떤 결합분포 | |||
| 조건부 엔트로피 |
상호정보량은 완전히 대칭이고 조건부 엔트로피는 아닙니다.
191강의 인과가 정보만으로 안 나오는 이유가 이 대칭입니다. 가 를 설명하는 양과 가 를 설명하는 양이 같으므로, 어느 쪽이 원인인지는 정보량이 말해 주지 않습니다.
이 문제에서 배우는 것. 조건부 독립이 인과 그래프의 언어입니다. 위 두 줄이 정확히 191강의 교란과 충돌부인데, 여기서는 그것이 자료에서 확인 가능한 조건부 독립 관계로 나타났습니다. 그래서 여러 변수의 조건부 독립을 모두 조사하면 가능한 인과 구조를 좁힐 수 있고, 그것이 인과 발견 알고리즘입니다. 다만 좁힐 뿐 정하지는 못합니다. 대칭성 때문에 방향이 남고, 193강에서 본 안 잰 교란이 여전히 남습니다.
바로 확인 3.
확인 3-1. 세 변수의 사슬 규칙을 쓰세요.
답. 입니다.
확인 3-2. 검산에서 공통 원인과 공통 결과의 두 상호정보량을 쓰세요.
답. 과 , 과 입니다.
확인 3-3. 상호정보량으로 인과 방향을 못 정하는 이유를 쓰세요.
답. 완전히 대칭이라 와 가 같기 때문입니다.
문제. 특성을 고릅니다.
(1) 목표와의 상호정보량을 재세요.
(2) 변수끼리의 중복을 보세요.
(3) 기준을 세워 골라 보세요.
생각의 실마리. 목표를 잘 설명하는 변수를 고르고 싶습니다. 상호정보량이 그 자를 줍니다.
풀이. (1) 네 개의 변수를 만들어 목표와의 상호정보량을 봅니다.
| 변수 | 목표와의 상호정보량 | 정확도 | 판정 |
|---|---|---|---|
| 쓸모 있음 | 고름 | ||
| 약함 | 버림 | ||
| 무관 | 버림 | ||
| 쓸모 있음의 복사본 | 고름 |
상호정보량 순으로 고르면 넷째 줄도 함께 뽑힙니다.
그런데 그것은 첫째 줄과 같은 변수입니다. 새 정보가 없습니다.
(2) 변수끼리의 중복을 봅니다.
| 무엇을 함께 쓰나 | 합친 상호정보량 | 각각의 합 | 중복 |
|---|---|---|---|
| 쓸모 있음과 복사본 | |||
| 쓸모 있음과 약함 | |||
| 쓸모 있음과 무관 |
복사본을 더해도 합친 값이 로 안 늘어납니다. 중복이 그대로 손해입니다.
약한 변수를 더하면 로 조금 늘어납니다. 새 정보가 있기 때문입니다.
셋째 줄의 중복이 음수입니다. 무관한 변수도 목표와 함께 보면 아주 조금 도움이 될 수 있으며, 이것을 시너지라 합니다.
(3) 기준을 세워 골라 봅니다.
| 고르는 기준 | 고른 변수 | 합친 상호정보량 |
|---|---|---|
| 상호정보량 큰 순 둘 | 쓸모 있음 및 복사본 | |
| 관련에서 중복을 뺀 순 | 쓸모 있음 및 약함 |
중복을 빼고 고르면 더 많은 정보를 담은 쌍이 뽑힙니다.
228강 특성공학에서 이 기준을 다시 씁니다.
이 문제에서 배우는 것. 개별 점수로 상위 개를 뽑는 방식이 특성 선택의 가장 흔한 실수입니다. 위 표에서 상위 둘이 사실 같은 변수 하나였고, 실무의 자료에는 거의 같은 열이 수십 개씩 들어 있습니다. 그런데 중복을 빼는 계산은 변수 쌍마다 필요하므로 변수가 많으면 비쌉니다. 그래서 실무에서는 상관이 높은 열을 먼저 묶어 대표를 뽑거나, 189강의 라소처럼 모형이 알아서 고르게 합니다. 189강 문제 3에서 본 선택 후 추론의 문제가 여기서도 그대로 따라옵니다.
바로 확인 4.
확인 4-1. 검산에서 네 변수의 목표와의 상호정보량을 쓰세요.
답. , , , 입니다.
확인 4-2. 검산에서 복사본을 더했을 때의 합친 상호정보량과 중복을 쓰세요.
답. 과 입니다.
확인 4-3. 검산에서 두 기준이 고른 쌍의 합친 상호정보량을 쓰세요.
답. 과 입니다.
문제. 함정을 정리합니다.
(1) 무엇이 문제인지 정리하세요.
(2) 정규화를 해 보세요.
(3) 연속 변수를 잘라 보세요.
생각의 실마리. 상호정보량은 비교할 때 쓰는 양인데, 비교가 성립하려면 조건이 맞아야 합니다.
풀이. (1) 함정을 정리합니다.
| 무엇 | 왜 문제인가 |
|---|---|
| 칸 개수가 다름 | 많을수록 크게 나옴 |
| 가짓수가 다름 | 강 문제 의 치우침 |
| 표본이 작음 | 없는 의존이 보임 |
| 연속 변수를 그냥 자름 | 자르는 자리가 값을 바꿈 |
| 정규화를 안 함 | 변수마다 상한이 다름 |
다섯째 줄이 자주 빠집니다. 상호정보량의 상한이 두 엔트로피의 최솟값입니다.
(2) 정규화를 해 봅니다. 목표가 가지인 문제에서 를 키워 갑니다.
| 가짓수 | 상호정보량 | 상한 | 정규화한 값 | 맞힌 비율 |
|---|---|---|---|---|
맞힌 비율은 넷 다 근처인데 상호정보량은 에서 로 계속 커집니다.
상한이 로 함께 커지기 때문입니다.
상한으로 나누면 에서 으로 훨씬 가까워집니다. 그래야 견줄 수 있습니다.
가짓수가 큰 변수가 왜 부당하게 유리한지도 봅니다. 목표와 아무 관계 없는 변수입니다.
| 가짓수 | 표본 | 표본 | 참값 |
|---|---|---|---|
표본 에 가짓수 면 관계가 없는데도 을 냅니다.
정규화로는 안 고쳐집니다. 상한이 아니라 추정 치우침이 원인이기 때문입니다.
201강 문제 5의 밀러-매도 보정이나 순열 검정이 필요합니다.
(3) 연속 변수를 잘라 봅니다.
| 어떻게 자르나 | 상호정보량 | 칸 개수 |
|---|---|---|
| 같은 폭 칸 | ||
| 같은 개수 칸 | ||
| 같은 개수 칸 | ||
| 같은 개수 칸 |
같은 개수로 자르면 칸마다 표본이 고르게 들어갑니다. 같은 칸인데 가 가 됩니다.
칸을 늘리면 값이 계속 커집니다. 어디서 멈출지는 정해진 답이 없습니다.
그래서 절대값보다 같은 조건에서의 순위를 봅니다.
정리하면 이 양이 쓰이는 자리는 다음과 같습니다.
| 무엇 | 어디서 쓰이는가 |
|---|---|
| 정보 이득 | 강 의사결정나무의 분할 |
| 상호정보량 기반 선택 | 강 특성공학 |
| 조건부 독립 | 강 인과 그래프 |
| 정보 병목 | 표현 학습의 목표 |
| KL 발산 | 강에서 일반화 |
이 문제에서 배우는 것. 상호정보량은 절대량이 아니라 비교량으로 써야 합니다. 위의 세 표가 모두 같은 이야기인데, 칸 개수도 가짓수도 자르는 방식도 값을 바꾸므로 "비트"라는 숫자 자체에는 뜻이 거의 없습니다. 뜻이 있는 것은 같은 조건에서 잰 두 값의 순서이며, 그마저도 가짓수가 다르면 무너집니다. 그래서 실무의 특성 선택은 상호정보량 순위 + 순열 기준선 + 정규화를 함께 씁니다.
바로 확인 5.
확인 5-1. 상호정보량의 상한을 쓰세요.
답. 두 엔트로피 중 작은 쪽입니다.
확인 5-2. 검산에서 가짓수 일 때의 상호정보량과 정규화한 값을 쓰세요.
답. 와 입니다.
확인 5-3. 검산에서 표본 에 가짓수 인 무관 변수의 상호정보량을 쓰세요.
답. 이며 참값은 입니다.
| 무엇 | 식 |
|---|---|
| 결합 엔트로피 | |
| 조건부 엔트로피 | |
| 상호정보량 | |
| 사슬 규칙 | |
| 정규화 |
| 성질 | 내용 |
|---|---|
| 비음성 | 이며 이면 독립 |
| 대칭 | |
| 상한 | |
| 조건은 줄일 수도 늘릴 수도 | 교란이면 줄고 충돌부면 늚 |
| 조건을 걸면 | 어떤 구조 |
|---|---|
| 의존이 사라짐 | 공통 원인 |
| 의존이 생김 | 공통 결과 |
| 그대로 | 무관 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 칸 개수를 안 맞춥니다 | 많을수록 크게 나옵니다 |
| 가짓수가 다른 변수를 견줍니다 | 정규화하고 치우침도 봅니다 |
| 작은 표본에서 값을 믿습니다 | 순열 기준선과 견줍니다 |
| 개별 점수 상위 개를 뽑습니다 | 중복을 뺍니다 |
| 상호정보량으로 인과를 말합니다 | 대칭이라 방향이 없습니다 |
문제 6. 사슬 규칙을 쓰세요.
답. 입니다.
문제 7. 검산에서 네 결합분포의 상호정보량을 쓰세요.
답. , , , 입니다.
문제 8. 검산에서 강한 의존의 조건부 엔트로피를 쓰세요.
답. 입니다.
문제 9. 검산에서 원 위의 점의 상관계수와 상호정보량을 쓰세요.
답. 과 입니다.
문제 10. 검산에서 칸 개와 개일 때 독립인 자료의 상호정보량을 쓰세요.
답. 와 입니다.
문제 11. 검산에서 표본 일 때 독립인 자료의 상호정보량을 쓰세요.
답. 이며 참값은 입니다.
문제 12. 세 변수의 사슬 규칙을 쓰고 순서가 결과를 바꾸는지 쓰세요.
답. 이며 순서를 바꿔도 로 같습니다.
문제 13. 검산에서 공통 원인과 공통 결과의 두 상호정보량을 쓰세요.
답. 과 , 과 입니다.
문제 14. 상호정보량으로 인과 방향을 못 정하는 이유를 쓰세요.
답. 완전히 대칭이라 와 가 같기 때문입니다.
문제 15. 검산에서 복사본을 더했을 때의 합친 상호정보량과 중복을 쓰세요.
답. 과 입니다.
문제 16. 검산에서 두 기준이 고른 쌍의 합친 상호정보량을 쓰세요.
답. 과 입니다.
문제 17. 검산에서 가짓수 일 때의 상호정보량과 정규화한 값을 쓰세요.
답. 와 입니다.
문제 18. 검산에서 표본 에 가짓수 인 무관 변수의 상호정보량을 쓰세요.
답. 이며 참값은 입니다.
심화 1. 정보 다이어그램을 정리하세요.
세 양을 겹친 원으로 그리면 관계가 한눈에 보입니다.
| 영역 | 무엇 |
|---|---|
| 왼쪽만 | |
| 겹친 곳 | |
| 오른쪽만 | |
| 전체 |
변수가 셋이면 가운데 영역이 음수가 될 수 있습니다.
문제 3의 공통 결과가 그 예입니다. 인데 이므로 가운데가 입니다.
그래서 셋 이상에서는 다이어그램이 그림으로서의 뜻을 잃습니다.
심화 2. 데이터 처리 부등식을 정리하세요.
| 무엇 | 뜻 |
|---|---|
| 마르코프 사슬 | 가 를 통해서만 와 이어짐 |
| 결론 | 처리로 정보가 늘지 않음 |
| 등호 | 가 충분통계량일 때 |
신경망의 층을 지날 때마다 입력에 대한 정보가 줄어들거나 유지됩니다.
"특성공학으로 정보를 만든다"는 말이 틀린 이유입니다. 만드는 것이 아니라 쓰기 좋게 옮기는 것입니다.
149강의 충분통계량이 등호 조건입니다.
심화 3. 정보 병목을 정리하세요.
| 무엇 | 뜻 |
|---|---|
| 압축된 표현 | |
| 첫 항 | 입력을 얼마나 버렸나 |
| 둘째 항 | 목표를 얼마나 남겼나 |
| 둘의 맞바꿈 |
입력에서 목표와 무관한 것을 버리고 관련된 것만 남기는 것이 목표입니다.
165강 문제 2의 편향과 분산 맞바꿈이 정보의 언어로 다시 적힌 것입니다.
깊은 신경망이 학습 중에 이 곡선을 따라간다는 주장이 있는데 논쟁 중입니다.
심화 4. 연속 변수의 상호정보량 추정을 정리하세요.
| 방법 | 어떻게 |
|---|---|
| 칸으로 나누기 | 문제 5의 방식 |
| 최근접이웃 | 이웃 거리로 밀도를 추정 |
| 커널 밀도 | 강의 커널 |
| 신경망 추정 | 하한을 최대화 |
둘째 줄이 실무의 표준입니다. 칸을 안 나누므로 차원이 커져도 덜 무너집니다.
넷째 줄은 최근 방법인데 표본이 적으면 하한이 헐거워집니다.
어느 방법이든 차원이 커지면 어렵습니다. 강의 차원의 저주가 여기서도 나타납니다.
심화 5. 상호정보량과 검정의 관계를 정리하세요.
두 범주형 변수의 독립성 검정이 상호정보량과 이어져 있습니다.
| 무엇 | 뜻 |
|---|---|
| 통계량 | 우도비 검정 통계량 |
| 자유도 | |
| 분포 | 카이제곱 |
강의 카이제곱 독립성 검정과 같은 자리입니다.
그래서 상호정보량이 얼마나 커야 유의한지 답할 수 있습니다. 자유도가 크면 문턱도 커지며, 그것이 문제 의 가짓수 문제를 정량으로 설명합니다.
표본이 작으면 카이제곱 근사가 나쁩니다. 강 문제 와 같은 한계입니다.
심화 6. 이 강의가 남긴 문제를 정리하세요.
두 변수의 관계를 쟀는데 두 분포의 거리는 아직입니다.
| 무엇을 못 했나 | 어디서 |
|---|---|
| 모형이 자료와 얼마나 다른가 | 강 |
| 분류 손실이 왜 그 모양인가 | 강 |
| 근사 분포를 어떻게 고르는가 | 강 심화 |
상호정보량이 그 특수한 경우입니다. 결합분포와 "독립이라면 이랬을 분포" 사이의 KL 발산이 곧 이며, 그래서 문제 1의 비음성이 KL의 비음성에서 따라 나옵니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 결합 엔트로피 | 둘을 함께 아는 데 드는 양입니다 | |
| 조건부 엔트로피 | 를 안 뒤 남은 양입니다 | |
| 상호정보량 | 줄어든 불확실성입니다 | |
| 조건부 상호정보량 | 를 안 상태에서의 값입니다 | |
| 사슬 규칙 | chain rule | 결합을 조건부의 합으로 풉니다 |
| 정보 이득 | information gain | 분할 전후의 엔트로피 차이입니다 |
| 정규화 상호정보량 | NMI | 상한으로 나눈 값입니다 |
| 데이터 처리 부등식 | DPI | 처리로 정보가 늘지 않습니다 |
| 정보 병목 | information bottleneck | 압축과 예측의 맞바꿈입니다 |
| 시너지 | synergy | 함께 봐야 드러나는 정보입니다 |
다음은 203강 KL 발산입니다. 이 강의가 두 변수의 관계를 쟀습니다.
문제 1에서 상호정보량이 이상임을 무작위 만 번으로 확인했는데, 그 사실의 근거가 KL 발산의 비음성입니다. 203강은 그것을 증명하고, 왜 거리가 아닌지와 어느 방향으로 재느냐가 근사를 어떻게 바꾸는지를 다룹니다.
import numpy as np
rng = np.random.default_rng(20261009)
def pw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return str(s) + " " * max(k, 0)
def rw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return " " * max(k, 0) + str(s)
def H(p, base=2.0):
p = np.asarray(p, dtype=float).ravel()
p = p[p > 0]
return float(-(p * (np.log(p) / np.log(base))).sum()) + 0.0
def Hx(J):
return H(J.sum(axis=1))
def Hy(J):
return H(J.sum(axis=0))
def Hxy(J):
return H(J)
def MI(J):
return Hx(J) + Hy(J) - Hxy(J)
# --- 문제 1: 두 변수를 함께 재기 ---------------------------------------
print(" 201강은 하나의 분포를 쟀습니다")
print(" 두 변수를 함께 재면 새로운 양이 셋 생깁니다")
print(" %s %s %s"
% (pw("무엇", 20), rw("무엇을 재나", 30), rw("식", 26)))
for a, b, c in [("결합 엔트로피", "둘을 함께 아는 데 드는 양", "H(X,Y)"),
("조건부 엔트로피", "X 를 안 뒤 Y 에 남은 양", "H(X,Y) 빼기 H(X)"),
("상호정보량", "X 가 Y 에 대해 말해 주는 양", "H(Y) 빼기 H(Y|X)")]:
print(" %s %s %s" % (pw(a, 20), rw(b, 30), rw(c, 26)))
print(" 셋이 사슬 규칙 하나로 묶입니다. H(X,Y) = H(X) + H(Y|X) 입니다")
print(" 네 가지 결합분포로 확인합니다")
cases = [
("완전 독립", np.array([[0.25, 0.25], [0.25, 0.25]])),
("약한 의존", np.array([[0.35, 0.15], [0.15, 0.35]])),
("강한 의존", np.array([[0.45, 0.05], [0.05, 0.45]])),
("완전 일치", np.array([[0.5, 0.0], [0.0, 0.5]])),
]
print(" %s %s %s %s %s %s"
% (pw("무엇", 16), rw("H(X)", 10), rw("H(Y)", 10), rw("H(X,Y)", 12),
rw("H(Y|X)", 12), rw("상호정보량", 14)))
for nm, J in cases:
print(" %s %10.6f %10.6f %12.6f %12.6f %14.6f"
% (pw(nm, 16), Hx(J), Hy(J), Hxy(J), Hxy(J) - Hx(J), MI(J)))
print(" 독립이면 상호정보량이 0 이고 결합이 두 엔트로피의 합입니다")
print(" 완전히 같으면 상호정보량이 H(X) 와 같고 남은 불확실성이 0 입니다")
print(" 가운데 둘은 그 사이입니다. 의존이 셀수록 상호정보량이 큽니다")
print(" 세 양의 관계를 부등식으로 확인합니다")
print(" %s %s %s %s"
% (pw("무엇", 24), rw("확인할 것", 26), rw("가장 나쁜 경우", 16),
rw("성립", 10)))
worst = []
for _ in range(200000):
J = rng.random((3, 4))
J = J / J.sum()
worst.append((Hxy(J) - Hx(J) - Hy(J), Hx(J) - Hxy(J),
-MI(J), Hy(J) - Hxy(J)))
w = np.array(worst)
for nm, cond, v in [("결합은 합 이하", "H(X,Y) 빼기 H(X) 더하기 H(Y)", w[:, 0].max()),
("결합은 각각 이상", "H(X) 빼기 H(X,Y)", w[:, 1].max()),
("상호정보량은 0 이상", "0 빼기 I", w[:, 2].max()),
("결합은 Y 이상", "H(Y) 빼기 H(X,Y)", w[:, 3].max())]:
print(" %s %s %16.6f %s"
% (pw(nm, 24), rw(cond, 26), v, rw("예" if v <= 1e-12 else "아니오", 10)))
print(" 20 만 번을 무작위로 만들어도 네 부등식이 모두 지켜집니다")
print(" 상호정보량이 0 이상인 것이 203강 KL 발산의 비음성과 같은 사실입니다")
# --- 문제 2: 상관이 못 잡는 것 -----------------------------------------
print(" 상관계수와 상호정보량이 무엇을 다르게 보는지 봅니다")
N = 400000
def mi_bin(x, y, bins=24):
hx = np.histogram2d(x, y, bins=bins)[0]
J = hx / hx.sum()
return MI(J)
print(" 네 가지 관계를 만들어 둘을 함께 잽니다")
print(" %s %s %s %s"
% (pw("관계", 26), rw("상관계수", 14), rw("상호정보량 비트", 20),
rw("판정", 16)))
u = rng.uniform(-1, 1, N)
e = rng.normal(0, 0.1, N)
rels = [("직선 y = x", u, u + e),
("포물선 y = x 제곱", u, u ** 2 + e),
("원 위의 점", None, None),
("아무 관계 없음", u, rng.normal(0, 1, N))]
th = rng.uniform(0, 2 * np.pi, N)
rels[2] = ("원 위의 점", np.cos(th), np.sin(th))
for nm, a, b in rels:
r = float(np.corrcoef(a, b)[0, 1])
m = mi_bin(a, b)
print(" %s %14.6f %20.6f %s"
% (pw(nm, 26), r, m,
rw("상관이 못 잡음" if abs(r) < 0.1 and m > 0.3 else
("둘 다 잡음" if abs(r) > 0.5 else "관계 없음"), 16)))
print(" 포물선과 원은 상관이 0 근처인데 상호정보량이 큽니다")
print(" 상관은 직선 관계만 보고 상호정보량은 모든 관계를 봅니다")
print(" 175강 문제 2 에서 상관 0 이 독립이 아니라고 한 것이 이것입니다")
print(" 그런데 상호정보량도 공짜가 아닙니다")
print(" 칸을 몇 개로 나누느냐가 값을 바꿉니다")
print(" %s %s %s %s"
% (pw("칸 개수", 12), rw("독립인 자료", 18), rw("포물선 자료", 18),
rw("차이", 14)))
a0 = rng.uniform(-1, 1, N)
b0 = rng.normal(0, 1, N)
for bins in [4, 12, 24, 60, 150]:
m0 = mi_bin(a0, b0, bins)
m1 = mi_bin(u, u ** 2 + e, bins)
print(" %s %18.6f %18.6f %14.6f"
% (pw("%d" % bins, 12), m0, m1, m1 - m0))
print(" 칸을 늘리면 독립인 자료에서도 상호정보량이 커집니다")
print(" 201강 문제 5 의 치우침이 여기서 그대로 나타납니다")
print(" 그래서 두 변수의 상호정보량을 견줄 때 칸 개수를 맞춰야 합니다")
print(" 칸 개수를 고정하고 표본 크기를 바꿔 봅니다")
print(" %s %s %s"
% (pw("표본 크기", 14), rw("독립인 자료의 상호정보량", 28),
rw("참값", 12)))
for n in [200, 1000, 10000, 200000]:
aa = rng.uniform(-1, 1, n)
bb = rng.normal(0, 1, n)
print(" %s %28.6f %12.1f"
% (pw("%d" % n, 14), mi_bin(aa, bb, 24), 0.0))
print(" 표본이 작으면 없는 의존이 보입니다. 24 곱하기 24 칸에 200 개뿐입니다")
print(" 표본이 늘면 0 으로 갑니다. 칸 개수와 표본 크기를 함께 봐야 합니다")
# --- 문제 3: 사슬 규칙과 여러 변수 -------------------------------------
print(" 변수가 셋 이상이면 사슬 규칙이 길어집니다")
print(" H(X,Y,Z) = H(X) + H(Y|X) + H(Z|X,Y) 입니다")
print(" 순서를 바꿔도 합은 같습니다. 확인해 봅니다")
P = rng.random((3, 3, 3))
P = P / P.sum()
def Hm(P, axes):
q = P.sum(axis=tuple(i for i in range(P.ndim) if i not in axes))
return H(q)
print(" %s %s %s"
% (pw("어떤 순서로", 26), rw("세 항의 합", 18), rw("H(X,Y,Z)", 16)))
orders = [(0, 1, 2), (1, 0, 2), (2, 1, 0)]
names = {0: "X", 1: "Y", 2: "Z"}
for o in orders:
s = Hm(P, [o[0]])
s += Hm(P, [o[0], o[1]]) - Hm(P, [o[0]])
s += H(P) - Hm(P, [o[0], o[1]])
print(" %s %18.6f %16.6f"
% (pw("%s 다음 %s 다음 %s" % (names[o[0]], names[o[1]], names[o[2]]), 26),
s, H(P)))
print(" 순서와 무관하게 같습니다. 어느 길로 가도 총량은 하나입니다")
print(" 조건을 걸면 상호정보량이 늘 수도 줄 수도 있습니다")
print(" %s %s %s %s"
% (pw("어떤 구조", 26), rw("I(X;Y)", 14), rw("I(X;Y|Z)", 16),
rw("어느 쪽이 큰가", 18)))
n3 = 400000
z = (rng.random(n3) < 0.5).astype(int)
x1 = (rng.random(n3) < np.where(z == 1, 0.8, 0.2)).astype(int)
y1 = (rng.random(n3) < np.where(z == 1, 0.8, 0.2)).astype(int)
x2 = (rng.random(n3) < 0.5).astype(int)
y2 = (rng.random(n3) < 0.5).astype(int)
z2 = (x2 ^ y2)
def joint2(a, b):
J = np.zeros((2, 2))
np.add.at(J, (a, b), 1.0)
return J / J.sum()
def cond_mi(a, b, c):
tot = 0.0
for v in [0, 1]:
m = c == v
w = float(m.mean())
if w > 0:
tot += w * MI(joint2(a[m], b[m]))
return tot
for nm, a, b, c in [("공통 원인 Z", x1, y1, z), ("공통 결과 Z", x2, y2, z2)]:
i1 = MI(joint2(a, b))
i2 = cond_mi(a, b, c)
print(" %s %14.6f %16.6f %s"
% (pw(nm, 26), i1, i2,
rw("조건 안 걸 때" if i1 > i2 else "조건 걸 때", 18)))
print(" 공통 원인을 통제하면 관계가 사라집니다. 177강 문제 3 의 교란입니다")
print(" 공통 결과를 통제하면 없던 관계가 생깁니다. 177강 문제 3 의 충돌부입니다")
print(" 상호정보량으로도 인과 방향은 알 수 없습니다. 대칭이기 때문입니다")
print(" 대칭이라는 것을 확인합니다")
print(" %s %s %s %s"
% (pw("무엇", 20), rw("I(X;Y)", 14), rw("I(Y;X)", 14), rw("차이", 14)))
J = np.array([[0.4, 0.1], [0.2, 0.3]])
print(" %s %14.6f %14.6f %14.6f"
% (pw("어떤 결합분포", 20), MI(J), MI(J.T), MI(J) - MI(J.T)))
print(" %s %14.6f %14.6f %14.6f"
% (pw("조건부 엔트로피", 20), Hxy(J) - Hx(J), Hxy(J) - Hy(J),
(Hxy(J) - Hx(J)) - (Hxy(J) - Hy(J))))
print(" 상호정보량은 완전히 대칭이고 조건부 엔트로피는 아닙니다")
print(" 191강의 인과가 정보만으로 안 나오는 이유가 이 대칭입니다")
# --- 문제 4: 특성 고르기에 쓰기 -----------------------------------------
print(" 상호정보량으로 쓸모 있는 변수를 고릅니다")
n4 = 200000
y = (rng.random(n4) < 0.5).astype(int)
f_use = (rng.random(n4) < np.where(y == 1, 0.85, 0.15)).astype(int)
f_weak = (rng.random(n4) < np.where(y == 1, 0.55, 0.45)).astype(int)
f_none = (rng.random(n4) < 0.5).astype(int)
f_copy = f_use.copy()
print(" 네 개의 변수를 만들어 목표와의 상호정보량을 봅니다")
print(" %s %s %s %s"
% (pw("변수", 22), rw("목표와의 상호정보량", 24), rw("정확도", 12),
rw("판정", 14)))
for nm, f in [("쓸모 있음", f_use), ("약함", f_weak), ("무관", f_none),
("쓸모 있음의 복사본", f_copy)]:
m = MI(joint2(f, y))
acc = max(float((f == y).mean()), float((f != y).mean()))
print(" %s %24.6f %12.6f %s"
% (pw(nm, 22), m, acc,
rw("고름" if m > 0.02 else "버림", 14)))
print(" 상호정보량 순으로 고르면 넷째 줄도 함께 뽑힙니다")
print(" 그런데 그것은 첫째 줄과 같은 변수입니다. 새 정보가 없습니다")
print(" 변수끼리의 중복을 봐야 합니다")
print(" %s %s %s %s"
% (pw("무엇을 함께 쓰나", 26), rw("합친 상호정보량", 20),
rw("각각의 합", 16), rw("중복", 12)))
def joint3(a, b, c):
J = np.zeros((2, 2, 2))
np.add.at(J, (a, b, c), 1.0)
return J / J.sum()
def mi_pair_target(a, b, t):
J = joint3(a, b, t)
Jab = J.reshape(4, 2)
return MI(Jab)
for nm, a, b in [("쓸모 있음과 복사본", f_use, f_copy),
("쓸모 있음과 약함", f_use, f_weak),
("쓸모 있음과 무관", f_use, f_none)]:
both = mi_pair_target(a, b, y)
each = MI(joint2(a, y)) + MI(joint2(b, y))
print(" %s %20.6f %16.6f %12.6f"
% (pw(nm, 26), both, each, each - both))
print(" 복사본을 더해도 합친 값이 안 늘어납니다. 중복이 그대로 손해입니다")
print(" 약한 변수를 더하면 조금 늘어납니다. 새 정보가 있기 때문입니다")
print(" 그래서 각각의 상호정보량만 보고 고르면 안 됩니다")
print(" 최소 중복 최대 관련 기준으로 골라 봅니다")
print(" %s %s %s"
% (pw("고르는 기준", 30), rw("고른 변수", 26), rw("합친 상호정보량", 20)))
cand = [("쓸모 있음", f_use), ("약함", f_weak), ("무관", f_none),
("복사본", f_copy)]
mis = [MI(joint2(f, y)) for _, f in cand]
top2 = sorted(range(4), key=lambda i: -mis[i])[:2]
print(" %s %s %20.6f"
% (pw("상호정보량 큰 순 둘", 30),
rw("%s 및 %s" % (cand[top2[0]][0], cand[top2[1]][0]), 26),
mi_pair_target(cand[top2[0]][1], cand[top2[1]][1], y)))
best, bi = None, None
for i in range(4):
if i == top2[0]:
continue
v = mi_pair_target(cand[top2[0]][1], cand[i][1], y)
red = MI(joint2(cand[top2[0]][1], cand[i][1]))
score = mis[i] - red
if best is None or score > best:
best, bi = score, i
print(" %s %s %20.6f"
% (pw("관련에서 중복을 뺀 순", 30),
rw("%s 및 %s" % (cand[top2[0]][0], cand[bi][0]), 26),
mi_pair_target(cand[top2[0]][1], cand[bi][1], y)))
print(" 중복을 빼고 고르면 더 많은 정보를 담은 쌍이 뽑힙니다")
print(" 228강 특성공학에서 이 기준을 다시 씁니다")
# --- 문제 5: 실무의 함정 ------------------------------------------------
print(" 실무에서 상호정보량을 쓸 때의 함정을 정리합니다")
print(" %s %s"
% (pw("무엇", 26), rw("왜 문제인가", 30)))
for a, b in [("칸 개수가 다름", "많을수록 크게 나옴"),
("가짓수가 다름", "201강 문제 5 의 치우침"),
("표본이 작음", "없는 의존이 보임"),
("연속 변수를 그냥 자름", "자르는 자리가 값을 바꿈"),
("정규화를 안 함", "변수마다 상한이 다름")]:
print(" %s %s" % (pw(a, 26), rw(b, 30)))
print(" 다섯째 줄이 자주 빠집니다. 상호정보량의 상한이 두 엔트로피의 최솟값입니다")
print(" 정규화한 상호정보량을 봅니다")
print(" 목표가 K 가지인 문제에서 K 를 키워 가며 봅니다")
print(" %s %s %s %s %s"
% (pw("가짓수 K", 14), rw("상호정보량", 14), rw("상한", 12),
rw("정규화한 값", 16), rw("맞힌 비율", 12)))
n5 = 200000
for K in [2, 4, 16, 64]:
yk = rng.integers(0, K, n5)
fk = np.where(rng.random(n5) < 0.7, yk, rng.integers(0, K, n5))
J = np.zeros((K, K))
np.add.at(J, (fk, yk), 1.0)
J = J / J.sum()
m = MI(J)
up = min(H(J.sum(axis=1)), H(J.sum(axis=0)))
print(" %s %14.6f %12.6f %16.6f %12.6f"
% (pw("%d" % K, 14), m, up, m / up, float((fk == yk).mean())))
print(" 맞힌 비율은 넷 다 0.7 근처인데 상호정보량은 계속 커집니다")
print(" 상한이 log2 K 로 함께 커지기 때문입니다")
print(" 상한으로 나누면 네 값이 비슷해집니다. 그래야 견줄 수 있습니다")
print(" 가짓수가 큰 변수가 왜 부당하게 유리한지 봅니다")
print(" 목표와 아무 관계 없는 변수의 상호정보량을 잽니다")
print(" %s %s %s %s"
% (pw("가짓수 K", 14), rw("표본 2000", 16), rw("표본 200000", 18),
rw("참값", 10)))
y6 = rng.integers(0, 2, 200000)
for K in [2, 8, 64, 512]:
f6 = rng.integers(0, K, 200000)
vals = []
for n in [2000, 200000]:
J = np.zeros((K, 2))
np.add.at(J, (f6[:n], y6[:n]), 1.0)
J = J / J.sum()
vals.append(MI(J))
print(" %s %16.6f %18.6f %10.1f"
% (pw("%d" % K, 14), vals[0], vals[1], 0.0))
print(" 표본 2000 에 가짓수 512 면 관계가 없는데도 0.2 를 넘습니다")
print(" 정규화로는 안 고쳐집니다. 상한이 아니라 추정 치우침이 원인입니다")
print(" 201강 문제 5 의 밀러-매도 보정이나 순열 검정이 필요합니다")
print(" 연속 변수를 자르는 방법을 견줍니다")
n6 = 200000
xc = rng.normal(0, 1, n6)
yc = (rng.random(n6) < 1.0 / (1.0 + np.exp(-1.5 * xc))).astype(int)
print(" 연속 x 와 이진 y 사이의 상호정보량을 여러 방법으로 잽니다")
print(" %s %s %s"
% (pw("어떻게 자르나", 26), rw("상호정보량", 16), rw("칸 개수", 12)))
for nm, edges in [("같은 폭 10 칸", np.linspace(xc.min(), xc.max(), 11)),
("같은 개수 10 칸", np.quantile(xc, np.linspace(0, 1, 11))),
("같은 개수 50 칸", np.quantile(xc, np.linspace(0, 1, 51))),
("같은 개수 200 칸", np.quantile(xc, np.linspace(0, 1, 201)))]:
b = np.clip(np.searchsorted(edges, xc, side="right") - 1, 0, len(edges) - 2)
K = len(edges) - 1
J = np.zeros((K, 2))
np.add.at(J, (b, yc), 1.0)
J = J / J.sum()
print(" %s %16.6f %12d" % (pw(nm, 26), MI(J), K))
print(" 같은 개수로 자르면 칸마다 표본이 고르게 들어갑니다")
print(" 칸을 늘리면 값이 계속 커집니다. 어디서 멈출지는 정해진 답이 없습니다")
print(" 그래서 절대값보다 같은 조건에서의 순위를 봅니다")
print(" 정리하고 다음으로 넘어갑니다")
print(" %s %s" % (pw("무엇", 26), rw("어디서 쓰이는가", 30)))
for a, b in [("정보 이득", "217강 의사결정나무의 분할"),
("상호정보량 기반 선택", "228강 특성공학"),
("조건부 독립", "191강 인과 그래프"),
("정보 병목", "표현 학습의 목표"),
("KL 발산", "203강에서 일반화")]:
print(" %s %s" % (pw(a, 26), rw(b, 30)))
print(" 202강은 두 변수의 관계를 쟀습니다. 203강은 두 분포의 거리를 잽니다")
# 201강은 하나의 분포를 쟀습니다
# 두 변수를 함께 재면 새로운 양이 셋 생깁니다
# 무엇 무엇을 재나 식
# 결합 엔트로피 둘을 함께 아는 데 드는 양 H(X,Y)
# 조건부 엔트로피 X 를 안 뒤 Y 에 남은 양 H(X,Y) 빼기 H(X)
# 상호정보량 X 가 Y 에 대해 말해 주는 양 H(Y) 빼기 H(Y|X)
# 셋이 사슬 규칙 하나로 묶입니다. H(X,Y) = H(X) + H(Y|X) 입니다
# 네 가지 결합분포로 확인합니다
# 무엇 H(X) H(Y) H(X,Y) H(Y|X) 상호정보량
# 완전 독립 1.000000 1.000000 2.000000 1.000000 0.000000
# 약한 의존 1.000000 1.000000 1.881291 0.881291 0.118709
# 강한 의존 1.000000 1.000000 1.468996 0.468996 0.531004
# 완전 일치 1.000000 1.000000 1.000000 0.000000 1.000000
# 독립이면 상호정보량이 0 이고 결합이 두 엔트로피의 합입니다
# 완전히 같으면 상호정보량이 H(X) 와 같고 남은 불확실성이 0 입니다
# 가운데 둘은 그 사이입니다. 의존이 셀수록 상호정보량이 큽니다
# 세 양의 관계를 부등식으로 확인합니다
# 무엇 확인할 것 가장 나쁜 경우 성립
# 결합은 합 이하 H(X,Y) 빼기 H(X) 더하기 H(Y) -0.000971 예
# 결합은 각각 이상 H(X) 빼기 H(X,Y) -0.939797 예
# 상호정보량은 0 이상 0 빼기 I -0.000971 예
# 결합은 Y 이상 H(Y) 빼기 H(X,Y) -0.710508 예
# 20 만 번을 무작위로 만들어도 네 부등식이 모두 지켜집니다
# 상호정보량이 0 이상인 것이 203강 KL 발산의 비음성과 같은 사실입니다
# 상관계수와 상호정보량이 무엇을 다르게 보는지 봅니다
# 네 가지 관계를 만들어 둘을 함께 잽니다
# 관계 상관계수 상호정보량 비트 판정
# 직선 y = x 0.985347 2.301464 둘 다 잡음
# 포물선 y = x 제곱 0.001489 1.412306 상관이 못 잡음
# 원 위의 점 -0.000106 2.368928 상관이 못 잡음
# 아무 관계 없음 0.001867 0.000859 관계 없음
# 포물선과 원은 상관이 0 근처인데 상호정보량이 큽니다
# 상관은 직선 관계만 보고 상호정보량은 모든 관계를 봅니다
# 175강 문제 2 에서 상관 0 이 독립이 아니라고 한 것이 이것입니다
# 그런데 상호정보량도 공짜가 아닙니다
# 칸을 몇 개로 나누느냐가 값을 바꿉니다
# 칸 개수 독립인 자료 포물선 자료 차이
# 4 0.000019 0.506018 0.505999
# 12 0.000239 1.239308 1.239069
# 24 0.000934 1.412306 1.411373
# 60 0.005791 1.477727 1.471937
# 150 0.032691 1.502512 1.469821
# 칸을 늘리면 독립인 자료에서도 상호정보량이 커집니다
# 201강 문제 5 의 치우침이 여기서 그대로 나타납니다
# 그래서 두 변수의 상호정보량을 견줄 때 칸 개수를 맞춰야 합니다
# 칸 개수를 고정하고 표본 크기를 바꿔 봅니다
# 표본 크기 독립인 자료의 상호정보량 참값
# 200 1.335154 0.0
# 1000 0.360828 0.0
# 10000 0.038748 0.0
# 200000 0.001785 0.0
# 표본이 작으면 없는 의존이 보입니다. 24 곱하기 24 칸에 200 개뿐입니다
# 표본이 늘면 0 으로 갑니다. 칸 개수와 표본 크기를 함께 봐야 합니다
# 변수가 셋 이상이면 사슬 규칙이 길어집니다
# H(X,Y,Z) = H(X) + H(Y|X) + H(Z|X,Y) 입니다
# 순서를 바꿔도 합은 같습니다. 확인해 봅니다
# 어떤 순서로 세 항의 합 H(X,Y,Z)
# X 다음 Y 다음 Z 4.555057 4.555057
# Y 다음 X 다음 Z 4.555057 4.555057
# Z 다음 Y 다음 X 4.555057 4.555057
# 순서와 무관하게 같습니다. 어느 길로 가도 총량은 하나입니다
# 조건을 걸면 상호정보량이 늘 수도 줄 수도 있습니다
# 어떤 구조 I(X;Y) I(X;Y|Z) 어느 쪽이 큰가
# 공통 원인 Z 0.094453 0.000011 조건 안 걸 때
# 공통 결과 Z 0.000000 0.999999 조건 걸 때
# 공통 원인을 통제하면 관계가 사라집니다. 177강 문제 3 의 교란입니다
# 공통 결과를 통제하면 없던 관계가 생깁니다. 177강 문제 3 의 충돌부입니다
# 상호정보량으로도 인과 방향은 알 수 없습니다. 대칭이기 때문입니다
# 대칭이라는 것을 확인합니다
# 무엇 I(X;Y) I(Y;X) 차이
# 어떤 결합분포 0.124511 0.124511 0.000000
# 조건부 엔트로피 0.846439 0.875489 -0.029049
# 상호정보량은 완전히 대칭이고 조건부 엔트로피는 아닙니다
# 191강의 인과가 정보만으로 안 나오는 이유가 이 대칭입니다
# 상호정보량으로 쓸모 있는 변수를 고릅니다
# 네 개의 변수를 만들어 목표와의 상호정보량을 봅니다
# 변수 목표와의 상호정보량 정확도 판정
# 쓸모 있음 0.388887 0.849490 고름
# 약함 0.006306 0.546715 버림
# 무관 0.000008 0.501660 버림
# 쓸모 있음의 복사본 0.388887 0.849490 고름
# 상호정보량 순으로 고르면 넷째 줄도 함께 뽑힙니다
# 그런데 그것은 첫째 줄과 같은 변수입니다. 새 정보가 없습니다
# 변수끼리의 중복을 봐야 합니다
# 무엇을 함께 쓰나 합친 상호정보량 각각의 합 중복
# 쓸모 있음과 복사본 0.388887 0.777773 0.388887
# 쓸모 있음과 약함 0.392099 0.395193 0.003094
# 쓸모 있음과 무관 0.388897 0.388895 -0.000002
# 복사본을 더해도 합친 값이 안 늘어납니다. 중복이 그대로 손해입니다
# 약한 변수를 더하면 조금 늘어납니다. 새 정보가 있기 때문입니다
# 그래서 각각의 상호정보량만 보고 고르면 안 됩니다
# 최소 중복 최대 관련 기준으로 골라 봅니다
# 고르는 기준 고른 변수 합친 상호정보량
# 상호정보량 큰 순 둘 쓸모 있음 및 복사본 0.388887
# 관련에서 중복을 뺀 순 쓸모 있음 및 약함 0.392099
# 중복을 빼고 고르면 더 많은 정보를 담은 쌍이 뽑힙니다
# 228강 특성공학에서 이 기준을 다시 씁니다
# 실무에서 상호정보량을 쓸 때의 함정을 정리합니다
# 무엇 왜 문제인가
# 칸 개수가 다름 많을수록 크게 나옴
# 가짓수가 다름 201강 문제 5 의 치우침
# 표본이 작음 없는 의존이 보임
# 연속 변수를 그냥 자름 자르는 자리가 값을 바꿈
# 정규화를 안 함 변수마다 상한이 다름
# 다섯째 줄이 자주 빠집니다. 상호정보량의 상한이 두 엔트로피의 최솟값입니다
# 정규화한 상호정보량을 봅니다
# 목표가 K 가지인 문제에서 K 를 키워 가며 봅니다
# 가짓수 K 상호정보량 상한 정규화한 값 맞힌 비율
# 2 0.387961 0.999994 0.387963 0.849120
# 4 0.871795 1.999999 0.435898 0.774280
# 16 2.050313 3.999959 0.512584 0.719770
# 64 3.376064 5.999769 0.562699 0.704940
# 맞힌 비율은 넷 다 0.7 근처인데 상호정보량은 계속 커집니다
# 상한이 log2 K 로 함께 커지기 때문입니다
# 상한으로 나누면 네 값이 비슷해집니다. 그래야 견줄 수 있습니다
# 가짓수가 큰 변수가 왜 부당하게 유리한지 봅니다
# 목표와 아무 관계 없는 변수의 상호정보량을 잽니다
# 가짓수 K 표본 2000 표본 200000 참값
# 2 0.000007 0.000000 0.0
# 8 0.002996 0.000024 0.0
# 64 0.024847 0.000223 0.0
# 512 0.214030 0.001743 0.0
# 표본 2000 에 가짓수 512 면 관계가 없는데도 0.2 를 넘습니다
# 정규화로는 안 고쳐집니다. 상한이 아니라 추정 치우침이 원인입니다
# 201강 문제 5 의 밀러-매도 보정이나 순열 검정이 필요합니다
# 연속 변수를 자르는 방법을 견줍니다
# 연속 x 와 이진 y 사이의 상호정보량을 여러 방법으로 잽니다
# 어떻게 자르나 상호정보량 칸 개수
# 같은 폭 10 칸 0.222274 10
# 같은 개수 10 칸 0.233711 10
# 같은 개수 50 칸 0.238093 50
# 같은 개수 200 칸 0.238887 200
# 같은 개수로 자르면 칸마다 표본이 고르게 들어갑니다
# 칸을 늘리면 값이 계속 커집니다. 어디서 멈출지는 정해진 답이 없습니다
# 그래서 절대값보다 같은 조건에서의 순위를 봅니다
# 정리하고 다음으로 넘어갑니다
# 무엇 어디서 쓰이는가
# 정보 이득 217강 의사결정나무의 분할
# 상호정보량 기반 선택 228강 특성공학
# 조건부 독립 191강 인과 그래프
# 정보 병목 표현 학습의 목표
# KL 발산 203강에서 일반화
# 202강은 두 변수의 관계를 쟀습니다. 203강은 두 분포의 거리를 잽니다