204강에서 가정과 손실의 대응표만 봤습니다. 이제 그것을 유도합니다.
이것을 지수족이라 하고, 정규·베르누이·포아송·지수·다항이 모두 이 꼴입니다. 한 번 이렇게 적으면 손실도 기울기도 한 번에 나옵니다.
그리고 정규화가 사전분포와 같다는 것까지 여기서 밝혀집니다. 116강의 벌점과 148강의 베이즈가 이 강의에서 만납니다.
문제. 하나의 모양으로 적습니다.
(1) 다섯 분포를 지수족으로 적으세요.
(2) 로그분할함수의 도함수가 평균인지 확인하세요.
(3) 이계도함수가 분산인지 확인하세요.
생각의 실마리. 서로 달라 보이는 분포들이 같은 뼈대를 가집니다. 그 뼈대를 찾으면 한 번만 계산하면 됩니다.
풀이. (1) 다섯 분포입니다.
| 분포 | 자연 모수 | 충분통계량 | 로그분할 |
|---|---|---|---|
| 정규 분산 | 평균 | ||
| 베르누이 | 로그 오즈 | ||
| 포아송 | e^ | ||
| 지수 | 음의 비율 | ||
| 다항 | 로짓 벡터 | 원핫 | \log\sum e^ |
를 한 번 미분하면 평균이고 두 번 미분하면 분산입니다.
(2) 도함수가 평균인지 확인합니다.
| 분포 | 의 도함수 | 실제 평균 | 차이 | |
|---|---|---|---|---|
| 정규 분산 | ||||
| 베르누이 | ||||
| 포아송 |
수치 미분과 이론 평균이 소수점 아래 여덟 자리까지 같습니다.
(3) 이계도함수가 분산인지 확인합니다.
| 분포 | 의 계도함수 | 실제 분산 | 차이 | |
|---|---|---|---|---|
| 정규 분산 | ||||
| 베르누이 | ||||
| 포아송 |
분산도 맞습니다. 차이는 수치 미분의 오차입니다.
이 하나의 사실에서 손실과 기울기가 다 나옵니다.
이 문제에서 배우는 것. 라는 한 줄이 이 단원 전체의 열쇠입니다. 음의 로그우도를 로 미분하면 가 되고, 그것이 곧 **"예측한 평균에서 관측을 뺀 것"**입니다. 문제 3에서 세 문제의 기울기가 같은 모양인 이유가 이것이며, 204강 심화 1에서 시그모이드의 미분이 상쇄되던 것도 같은 사실의 특수한 경우입니다. 한 번 유도하면 모든 지수족에 적용됩니다.
바로 확인 1.
확인 1-1. 지수족의 일반형을 쓰세요.
답. 입니다.
확인 1-2. 의 일계와 이계도함수가 무엇인지 쓰세요.
답. 평균과 분산입니다.
확인 1-3. 검산에서 베르누이의 일 때 평균과 분산을 쓰세요.
답. 과 입니다.
문제. 음의 로그우도를 전개합니다.
(1) 네 분포에서 손실을 꺼내세요.
(2) 정규에서 제곱오차가 나오는지 확인하세요.
(3) 분산이 자리마다 다르면 어떻게 되는지 보세요.
생각의 실마리. 전개하면 낯익은 식이 나옵니다.
풀이. (1) 네 분포입니다.
| 분포 | 음의 로그우도 | 모수와 무관한 부분 |
|---|---|---|
| 정규 | 더하기 상수 | \log\sqrt |
| 베르누이 | 없음 | |
| 포아송 | 더하기 상수 | |
| 지수 | 없음 |
상수 항은 최소화에 영향을 안 줍니다. 그래서 떼고 씁니다.
(2) 정규에서 확인합니다.
| 가정한 평균 | 음의 로그우도 합 | 제곱오차 합의 절반 | 차이 |
|---|---|---|---|
차이가 로 일정합니다. 그것이 상수 항이며, 상수가 붙어도 최소가 되는 자리는 같습니다.
분산도 함께 추정하면 달라집니다.
| 무엇을 추정 | 평균 | 분산 | 음의 로그우도 |
|---|---|---|---|
| 평균만 분산은 로 둠 | |||
| 둘 다 추정 | |||
| 분산을 두 배로 잘못 둠 |
분산을 함께 추정하면 우도가 에서 로 커집니다.
그런데 평균의 추정값은 으로 안 바뀝니다. 분산이 곱해진 상수이기 때문입니다.
(3) 분산이 자리마다 다르면 이야기가 달라집니다. 참 계수는 과 이고 잡음의 크기가 에 비례합니다.
| 무엇으로 | 절편 | 기울기 | 참값과의 거리 |
|---|---|---|---|
| 그냥 제곱오차 | |||
| 분산으로 나눈 가중 |
가중 제곱오차가 정규 가정의 음의 로그우도입니다. 거리가 에서 로 줄어듭니다.
분산을 아는 자리에서는 그것으로 나눠야 합니다. 188강 문제 3의 이분산이 여기서 손실의 문제로 다시 나타납니다.
이 문제에서 배우는 것. "제곱오차를 쓴다"는 말에는 "모든 관측의 잡음 크기가 같다"는 가정이 숨어 있습니다. 그 가정이 깨지면 계수는 여전히 불편이지만 효율을 잃습니다. 188강에서는 표준오차만 고치면 된다고 했는데, 여기서는 추정값 자체를 개선할 수 있다는 것이 다릅니다. 분산을 알면 가중하고, 모르면 188강의 강건 표준오차를 쓰거나 이 강의 문제 3의 일반화 선형모형으로 분산 구조를 모형에 넣습니다.
바로 확인 2.
확인 2-1. 검산에서 음의 로그우도와 제곱오차의 차이를 쓰세요.
답. 로 일정하며 그것이 상수 항입니다.
확인 2-2. 검산에서 분산을 함께 추정할 때와 로 둘 때의 음의 로그우도를 쓰세요.
답. 와 입니다.
확인 2-3. 검산에서 가중 제곱오차와 그냥 제곱오차의 참값과의 거리를 쓰세요.
답. 과 입니다.
문제. 여러 문제를 하나로 묶습니다.
(1) 문제와 연결함수를 짝지으세요.
(2) 기울기가 같은 모양인지 확인하세요.
(3) 잘못 고르면 어떻게 되는지 보세요.
생각의 실마리. 선형 예측자에 연결함수를 씌우면 여러 문제가 하나가 됩니다.
풀이. (1) 짝지웁니다.
| 문제 | 의 분포 | 정준 연결함수 | 무엇을 예측 |
|---|---|---|---|
| 회귀 | 정규 | 항등 | 평균 |
| 이진 분류 | 베르누이 | 로짓 | 확률 |
| 개수 세기 | 포아송 | 로그 | 비율 |
| 대기 시간 | 감마 | 역수 또는 로그 | 평균 |
| 다중 분류 | 다항 | 소프트맥스 | 확률 벡터 |
정준 연결함수를 쓰면 기울기가 언제나 같은 모양이 됩니다.
(2) 확인합니다.
| 문제 | 기울기 |
|---|---|
| 정규와 항등 | (예측 관측) 의 평균 |
| 베르누이와 로짓 | (예측 확률 관측) 의 평균 |
| 포아송과 로그 | (예측 비율 관측) 의 평균 |
셋 다 예측에서 관측을 뺀 것에 를 곱합니다. 세 자료를 만들어 같은 갱신식으로 풀어 봅니다.
| 문제 | 절편 | 기울기 | 참값과의 거리 |
|---|---|---|---|
| 정규와 항등 | |||
| 베르누이와 로짓 | |||
| 포아송과 로그 |
같은 코드에서 를 만드는 줄 하나만 바꿨습니다.
셋 다 참값 과 근처로 갑니다. 이것이 일반화 선형모형이 하나의 틀인 이유입니다.
(3) 잘못 고르면 어떻게 되는지 봅니다. 개수 자료에 정규를 가정해 봅니다.
| 무엇으로 맞추나 | 절편 | 기울기 | 음수 예측 비율 |
|---|---|---|---|
| 포아송과 로그 | |||
| 정규와 항등 |
정규를 가정하면 예측이 음수가 되는 비율이 입니다. 열 번에 한 번꼴입니다.
개수는 음수가 될 수 없으므로 그 자체로 틀린 모형입니다.
연결함수는 예측이 가질 수 있는 값의 범위를 맞추는 장치입니다.
이 문제에서 배우는 것. 연결함수가 분산 구조까지 함께 정합니다. 포아송에서는 이므로 평균이 크면 분산도 큽니다. 그래서 로그 연결함수를 쓰면 문제 2의 가중이 자동으로 들어가고, 따로 가중치를 계산할 필요가 없습니다. 반대로 개수 자료에 정규를 가정하면 평균과 무관하게 분산이 일정하다고 두는 셈이라 두 번 틀립니다. 예측 범위와 분산 구조가 함께 어긋납니다.
바로 확인 3.
확인 3-1. 정준 연결함수를 쓰면 기울기가 어떤 모양인지 쓰세요.
답. 예측에서 관측을 뺀 것에 를 곱한 것의 평균입니다.
확인 3-2. 검산에서 세 문제의 참값과의 거리를 쓰세요.
답. , , 입니다.
확인 3-3. 검산에서 개수 자료에 정규를 가정했을 때의 음수 예측 비율을 쓰세요.
답. 입니다.
문제. 벌점의 정체를 밝힙니다.
(1) 벌점과 사전분포를 짝지으세요.
(2) 릿지와 최대사후가 같은지 확인하세요.
(3) 라소가 을 만드는 것을 보세요.
생각의 실마리. 벌점을 더하는 것이 사전분포를 두는 것과 같습니다.
풀이. (1) 짝지웁니다.
| 어떤 벌점 | 어떤 사전분포 | 최대사후가 무엇이 되나 |
|---|---|---|
| L2 제곱 | 정규 | 릿지 |
| L1 절댓값 | 라플라스 | 라소 |
| 없음 | 균등 | 최대우도 |
| L2와 L1 섞음 | 둘의 곱 | 엘라스틱넷 |
116강의 정규화와 148강의 베이즈가 여기서 만납니다.
(2) 같은 값이 나오는지 확인합니다. 표본 에 변수 개이고 참 계수는 앞 셋만 이 아닙니다.
| 사전분포의 표준편차 | 그에 해당하는 | 릿지 해와의 차이 | 판정 |
|---|---|---|---|
| 같음 | |||
| 같음 | |||
| 같음 | |||
| 같음 |
최대사후 추정과 릿지가 완전히 같습니다.
사전분포가 좁을수록 가 커집니다. 더 강하게 으로 당깁니다.
(3) 라소가 을 만드는 것을 봅니다.
| 이 된 계수 수 | 참 중 맞힌 수 | 참 비 중 살린 수 | |
|---|---|---|---|
를 키우면 계수가 정확히 이 됩니다. 릿지는 그러지 않습니다.
라플라스 사전분포가 에서 뾰족하기 때문입니다.
과 에서 참 다섯 개를 정확히 맞히고 참 비 셋을 다 살립니다.
에서는 참인 계수까지 으로 만듭니다. 211강에서 고르는 법을 봅니다.
이 문제에서 배우는 것. "정규화를 얼마나 걸까"가 "계수가 얼마나 클 것 같은가"와 같은 물음입니다. 이므로, 잡음이 크면 더 강하게 당기고 계수가 클 것 같으면 덜 당깁니다. 그런데 실무에서 를 안다고 말할 수 있는 경우는 드물어서 교차검증으로 를 고릅니다. 즉 사전분포를 자료로 정하는 셈이고, 그것을 경험적 베이즈라 합니다. 148강 문제 5의 "사전분포를 어디서 가져오는가"라는 물음이 여기서 실용적인 답을 얻습니다.
바로 확인 4.
확인 4-1. L2와 L1 벌점에 대응하는 사전분포를 쓰세요.
답. 정규와 라플라스입니다.
확인 4-2. 검산에서 가 일 때의 를 쓰세요.
답. 입니다.
확인 4-3. 검산에서 라소의 가 과 일 때 이 된 계수 수를 쓰세요.
답. 개와 개입니다.
문제. 한계를 확인합니다.
(1) 무엇을 하면 깨지는지 정리하세요.
(2) 손실을 자르면 어떻게 되는지 보세요.
(3) 확률로 읽을 수 있는지 확인하세요.
생각의 실마리. 손실이 언제나 어떤 우도에 대응하는 것은 아닙니다.
풀이. (1) 정리합니다.
| 무엇을 하면 | 무엇이 깨지나 |
|---|---|
| 클래스 가중치를 줌 | 우도가 아닌 것을 최대화 |
| 표본을 다시 뽑음 | 분포를 바꿔 버림 |
| 손실을 잘라 냄 | 대응하는 분포가 없음 |
| 여러 손실을 섞음 | 하나의 우도가 아님 |
| 초점 손실 | 확률이 보정을 잃음 |
204강 문제 5의 보정 문제가 여기서 이유를 얻습니다.
(2) 손실을 잘라 봅니다. 개 중 개에 큰 잡음을 넣었고 참 계수는 과 입니다.
| 무엇으로 | 절편 | 기울기 | 참값과의 거리 |
|---|---|---|---|
| 제곱오차 | |||
| 후버 | |||
| 후버 |
후버가 제곱오차보다 참값에 가깝습니다. 이 가 됩니다.
그런데 후버에 정확히 대응하는 흔한 분포가 없습니다. 가운데는 정규이고 밖은 라플라스인 분포를 만들면 되지만 잘 안 씁니다.
대응이 없어도 쓸 수 있습니다. 다만 확률로는 해석하지 않습니다.
(3) 확률로 읽을 수 있는지 확인합니다.
| 무엇으로 맞추나 | 예측 확률 평균 | 실제 양성 비율 | 차이 |
|---|---|---|---|
| 보통 우도 | |||
| 양성 가중 | |||
| 양성 가중 |
보통 우도로 맞추면 예측 확률의 평균이 실제 비율과 소수점 여섯 자리까지 같습니다.
가중치를 주면 그 성질이 깨집니다. 우도가 아니기 때문입니다.
이것이 최대우도의 성질이지 분류기의 성질이 아니라는 것을 보여 줍니다.
정리하면 이 강의가 준 것은 다음과 같습니다.
| 무엇을 얻었나 | 어디서 쓰이나 |
|---|---|
| 지수족의 한 틀 | 여러 손실을 한 번에 |
| 의 미분이 평균 | 기울기가 늘 같은 모양 |
| 정준 연결함수 | 예측 범위를 맞춤 |
| 벌점이 사전분포 | 강 정규화 |
| 대응이 깨지는 자리 | 확률 해석의 한계 |
이 문제에서 배우는 것. "예측 확률의 평균이 실제 비율과 같다"는 것이 최대우도가 공짜로 주는 보증입니다. 절편이 있는 로지스틱 회귀에서 절편에 대한 기울기가 이 되는 조건이 정확히 그 등식이며, 그래서 모형이 아무리 나빠도 전체 평균은 맞습니다. 가중치를 주는 순간 그 조건이 다른 식이 되고 보증이 사라집니다. 226강에서 보정을 다룰 때 이 사실이 기준선이 되며, "보정이 깨졌다"는 판정은 이 등식이 안 맞는다는 뜻입니다.
바로 확인 5.
확인 5-1. 후버 손실에 대응하는 분포가 있는지 쓰세요.
답. 흔한 분포로는 없으며 그래서 확률로 해석하지 않습니다.
확인 5-2. 검산에서 제곱오차와 후버 의 참값과의 거리를 쓰세요.
답. 과 입니다.
확인 5-3. 검산에서 세 방식의 예측 확률 평균을 쓰세요.
답. , , 이며 실제 비율은 입니다.
| 분포 | 정준 연결함수 | 손실 |
|---|---|---|
| 정규 | 항등 | 제곱오차 |
| 베르누이 | 로짓 | 이진 교차엔트로피 |
| 포아송 | 로그 | 포아송 손실 |
| 감마 | 역수 또는 로그 | 감마 손실 |
| 다항 | 소프트맥스 | 소프트맥스 교차엔트로피 |
| 무엇 | 식 |
|---|---|
| 지수족 | h(y)e^ |
| 평균 | |
| 분산 | |
| 기울기 | 의 평균 |
| 릿지의 | \sigma^{2}/\tau^ |
| 벌점 | 사전분포 | 결과 |
|---|---|---|
| L2 | 정규 | 계수를 줄임 |
| L1 | 라플라스 | 계수를 으로 |
| 없음 | 균등 | 최대우도 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 개수 자료에 정규를 씁니다 | 음수 예측이 나옵니다 |
| 이분산인데 그냥 제곱오차 | 분산으로 나눠 가중합니다 |
| 가중치 준 확률을 그대로 씁니다 | 보정이 깨집니다 |
| 후버를 확률로 해석합니다 | 대응하는 분포가 없습니다 |
| 벌점을 임의로 정합니다 | 사전분포를 정하는 일입니다 |
문제 6. 지수족의 일반형을 쓰세요.
답. 입니다.
문제 7. 의 일계와 이계도함수가 무엇인지 쓰세요.
답. 평균과 분산입니다.
문제 8. 검산에서 베르누이의 일 때 평균과 분산을 쓰세요.
답. 과 입니다.
문제 9. 검산에서 음의 로그우도와 제곱오차의 차이를 쓰세요.
답. 로 일정하며 그것이 상수 항입니다.
문제 10. 검산에서 분산을 함께 추정할 때와 로 둘 때의 음의 로그우도를 쓰세요.
답. 와 입니다.
문제 11. 검산에서 가중 제곱오차와 그냥 제곱오차의 참값과의 거리를 쓰세요.
답. 과 입니다.
문제 12. 정준 연결함수를 쓰면 기울기가 어떤 모양인지 쓰세요.
답. 예측에서 관측을 뺀 것에 를 곱한 것의 평균입니다.
문제 13. 검산에서 세 문제의 참값과의 거리를 쓰세요.
답. , , 입니다.
문제 14. 검산에서 개수 자료에 정규를 가정했을 때의 음수 예측 비율을 쓰세요.
답. 입니다.
문제 15. 릿지의 를 사전분포로 쓰세요.
답. 잡음 분산을 사전분포 분산으로 나눈 값입니다.
문제 16. 검산에서 라소의 가 과 일 때 이 된 계수 수를 쓰세요.
답. 개와 개입니다.
문제 17. 검산에서 제곱오차와 후버 의 참값과의 거리를 쓰세요.
답. 과 입니다.
문제 18. 검산에서 세 방식의 예측 확률 평균을 쓰세요.
답. , , 입니다.
심화 1. 정준 연결함수가 왜 특별한지 정리하세요.
| 성질 | 정준일 때 | 아닐 때 |
|---|---|---|
| 기울기 | 연결함수 미분이 곱해짐 | |
| 헤세 행렬 | 관측과 무관 | 관측에 딸림 |
| 볼록성 | 보장됨 | 보장 안 됨 |
| 충분통계량 | 자연스럽게 나옴 | 아님 |
셋째 줄이 205강 문제 2의 이야기입니다. 정준이 아니면 비볼록이 될 수 있습니다.
둘째 줄 때문에 뉴턴 방법이 안정적입니다. 190강의 IRLS가 이 성질에 기댑니다.
그래도 정준이 아닌 연결함수를 쓸 때가 있습니다. 프로빗이나 로그로그가 그 예이며, 해석이 더 자연스러울 때 씁니다.
심화 2. 분산함수와 준우도를 정리하세요.
분포를 다 정하지 않고 평균과 분산의 관계만 정해도 됩니다.
| 무엇 | 뜻 |
|---|---|
| 분산함수 | 로 분산이 평균에 어떻게 딸리는지 |
| 준우도 | 그것만으로 만든 목적함수 |
| 과산포 | 실제 분산이 보다 큼 |
포아송은 인데 실제 개수 자료는 그보다 흩어져 있는 일이 많습니다.
그때 음이항분포를 쓰거나 과산포 모수를 하나 더 둡니다.
준우도는 분포를 안 정해도 계수 추정이 일치성을 갖습니다. 표준오차만 고치면 되며, 188강 문제 4의 강건 표준오차와 같은 발상입니다.
심화 3. 최대사후와 완전 베이즈의 차이를 정리하세요.
| 무엇 | 무엇을 내놓나 |
|---|---|
| 최대우도 | 점 추정 하나 |
| 최대사후 | 사후분포의 봉우리 |
| 완전 베이즈 | 사후분포 전체 |
최대사후는 사후분포를 하나의 점으로 요약합니다. 그 요약이 좋은지는 분포의 모양에 달렸습니다.
사후분포가 치우쳐 있으면 봉우리가 평균과 크게 다릅니다. 라소의 경우가 그렇고, 그래서 라소 해가 이라는 것이 "그 계수가 이다"라는 뜻이 아닙니다.
완전 베이즈는 예측 분포를 주므로 불확실성이 함께 나옵니다. 대신 계산이 비쌉니다.
심화 4. 로지스틱 회귀의 완전 분리를 정리하세요.
자료가 선형으로 완전히 나뉘면 최대우도 해가 발산합니다.
| 무엇 | 왜 |
|---|---|
| 계수 | 무한대로 감 |
| 우도 | 에 수렴 |
| 확률 | 이나 로 |
204강 문제 3의 라벨 평활이 한 대응입니다.
정규화가 더 흔한 대응입니다. 사전분포가 계수를 유한하게 붙잡습니다.
표본이 적고 변수가 많으면 자주 일어납니다. 계수가 규모로 나오면 이것을 의심합니다.
심화 5. 손실과 분포의 대응을 뒤집어 쓰는 법을 정리하세요.
| 손실 | 대응하는 분포 |
|---|---|
| 제곱오차 | 정규 |
| 절대오차 | 라플라스 |
| 분위 손실 | 비대칭 라플라스 |
| 후버 | 인위적으로 만들어야 함 |
| 힌지 | 없음 |
넷째와 다섯째 줄이 대응이 없는 예입니다.
대응이 있으면 좋은 점은 예측 구간을 바로 얻는 것입니다. 손실만 있으면 구간은 따로 만들어야 합니다.
199강 심화 2의 분위 예측이 셋째 줄입니다. 분위 손실을 여러 로 풀면 구간이 나옵니다.
심화 6. 이 강의가 남긴 문제를 정리하세요.
손실이 어디서 오는지는 밝혔는데 실제로 푸는 것은 아직입니다.
| 무엇을 못 했나 | 어디서 |
|---|---|
| 닫힌 해가 있는가 | 강 |
| 반복으로 어떻게 푸는가 | 강 |
| 여러 갈래로 어떻게 넓히는가 | 강 |
정규방정식과 정사영과 계산 안정성까지 한 번에 다룹니다. 강의 정사영과 강의 수치 안정성이 여기서 다시 쓰이며, 왜 정규방정식을 직접 풀면 안 되는지가 그 자리에서 밝혀집니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 지수족 | exponential family | 하나의 모양으로 적히는 분포들입니다 |
| 자연 모수 | 지수 안의 모수입니다 | |
| 충분통계량 | 자료에서 필요한 요약입니다 | |
| 로그분할함수 | 미분하면 평균과 분산이 나옵니다 | |
| GLM | 일반화 선형모형 | 선형 예측자에 연결함수를 씌웁니다 |
| 정준 연결함수 | canonical link | 기울기를 가장 단순하게 만듭니다 |
| 최대사후 | MAP | 사후분포의 봉우리입니다 |
| 사전분포 | prior | 자료를 보기 전의 믿음입니다 |
| 분산함수 | variance function | 분산이 평균에 딸리는 모양입니다 |
| 과산포 | overdispersion | 실제 분산이 가정보다 큽니다 |
| 완전 분리 | complete separation | 계수가 발산하는 자리입니다 |
다음은 207강 선형회귀를 처음부터 유도하기입니다. 이 강의가 손실이 어디서 오는지 밝혔습니다.
정규방정식을 세우고, 그것이 강의 정사영과 같은 것임을 보이고, 왜 정규방정식을 직접 풀면 안 되는지를 강의 조건수로 설명합니다. 그리고 QR 분해와 특이값 분해로 안정적으로 푸는 법까지 갑니다.
import numpy as np
rng = np.random.default_rng(20261013)
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 sig(z):
return 1.0 / (1.0 + np.exp(-np.clip(z, -500, 500)))
# --- 문제 1: 지수족이라는 하나의 틀 ------------------------------------
print(" 204강에서 가정과 손실의 대응표만 봤습니다. 이제 유도합니다")
print(" 다섯 분포가 하나의 모양으로 적힙니다. 이것을 지수족이라 합니다")
print(" p(y) = h(y) exp(eta T(y) 빼기 A(eta)) 꼴입니다")
print(" %s %s %s %s"
% (pw("분포", 14), rw("자연 모수 eta", 22), rw("충분통계량 T(y)", 18),
rw("로그분할 A(eta)", 22)))
for a, b, c, d in [("정규 분산 1", "평균 mu", "y", "eta 제곱 나누기 2"),
("베르누이", "로그 오즈", "y", "log(1 더하기 e^eta)"),
("포아송", "log 람다", "y", "e^eta"),
("지수", "음의 비율", "y", "음의 log(음의 eta)"),
("다항", "로짓 벡터", "원핫", "log 합 e^eta")]:
print(" %s %s %s %s" % (pw(a, 14), rw(b, 22), rw(c, 18), rw(d, 22)))
print(" A 를 한 번 미분하면 평균이고 두 번 미분하면 분산입니다")
print(" 실제로 그런지 확인합니다")
print(" %s %s %s %s %s"
% (pw("분포", 16), rw("eta", 12), rw("A 의 도함수", 16),
rw("실제 평균", 14), rw("차이", 14)))
h = 1e-5
cases = [("정규 분산 1", lambda e: e * e / 2.0, 0.7, lambda e: e),
("베르누이", lambda e: np.log(1 + np.exp(e)), 0.4, lambda e: sig(e)),
("포아송", lambda e: np.exp(e), -0.3, lambda e: np.exp(e))]
for nm, A, e0, mean_fn in cases:
d1 = (A(e0 + h) - A(e0 - h)) / (2 * h)
print(" %s %12.4f %16.6f %14.6f %14.10f"
% (pw(nm, 16), e0, d1, mean_fn(e0), d1 - mean_fn(e0) + 0.0))
print(" 수치 미분과 이론 평균이 소수점 아래 여덟 자리까지 같습니다")
print(" %s %s %s %s %s"
% (pw("분포", 16), rw("eta", 12), rw("A 의 2 계도함수", 18),
rw("실제 분산", 14), rw("차이", 14)))
for nm, A, e0, mean_fn in cases:
d2 = (A(e0 + h) - 2 * A(e0) + A(e0 - h)) / (h * h)
if nm == "정규 분산 1":
var = 1.0
elif nm == "베르누이":
var = float(sig(e0) * (1 - sig(e0)))
else:
var = float(np.exp(e0))
print(" %s %12.4f %18.6f %14.6f %14.8f"
% (pw(nm, 16), e0, d2, var, d2 - var + 0.0))
print(" 분산도 맞습니다. 이 하나의 사실에서 손실과 기울기가 다 나옵니다")
# --- 문제 2: 손실을 직접 꺼냅니다 ---------------------------------------
print(" 음의 로그우도를 전개하면 낯익은 식이 나옵니다")
print(" %s %s %s"
% (pw("분포", 16), rw("음의 로그우도", 34), rw("모수와 무관한 부분", 22)))
for a, b, c in [("정규", "(y 빼기 mu) 제곱 나누기 2 더하기 상수", "log 루트 2 pi"),
("베르누이", "빼기 y log p 빼기 (1-y) log(1-p)", "없음"),
("포아송", "람다 빼기 y log 람다 더하기 상수", "log y 계승"),
("지수", "log 평균 더하기 y 나누기 평균", "없음")]:
print(" %s %s %s" % (pw(a, 16), rw(b, 34), rw(c, 22)))
print(" 상수 항은 최소화에 영향을 안 줍니다. 그래서 떼고 씁니다")
print(" 정규에서 제곱오차가 나오는 것을 수치로 확인합니다")
n2 = 5000
mu_true = 1.3
y2 = rng.normal(mu_true, 1.0, n2)
print(" %s %s %s %s"
% (pw("가정한 평균", 14), rw("음의 로그우도 합", 22),
rw("제곱오차 합의 절반", 22), rw("차이", 18)))
const = n2 * 0.5 * np.log(2 * np.pi)
for mu in [0.5, 1.0, 1.3, 1.8]:
nll = float(np.sum(0.5 * (y2 - mu) ** 2)) + const
sq = float(np.sum(0.5 * (y2 - mu) ** 2))
print(" %s %22.4f %22.4f %18.4f"
% (pw("%.1f" % mu, 14), nll, sq, nll - sq))
print(" 차이가 %.4f 로 일정합니다. 그것이 상수 항입니다" % const)
print(" 상수가 붙어도 최소가 되는 자리는 같습니다")
print(" 분산도 함께 추정하면 달라집니다")
print(" %s %s %s %s"
% (pw("무엇을 추정", 22), rw("평균", 14), rw("분산", 14), rw("음의 로그우도", 20)))
mh = float(y2.mean())
vh = float(np.mean((y2 - mh) ** 2))
for nm, m_, v_ in [("평균만 분산은 1 로 둠", mh, 1.0),
("둘 다 추정", mh, vh),
("분산을 두 배로 잘못 둠", mh, 2.0 * vh)]:
nll = float(np.sum(0.5 * np.log(2 * np.pi * v_)
+ (y2 - m_) ** 2 / (2 * v_)))
print(" %s %14.6f %14.6f %20.4f" % (pw(nm, 22), m_, v_, nll))
print(" 분산을 함께 추정하면 우도가 더 커집니다")
print(" 그런데 평균의 추정값은 안 바뀝니다. 분산이 곱해진 상수이기 때문입니다")
print(" 가중치가 자리마다 다르면 이야기가 달라집니다. 188강 문제 3 입니다")
print(" 분산이 자리마다 다르면 가중 제곱오차가 나옵니다")
n3 = 4000
x3 = rng.uniform(0.2, 3.0, n3)
sd3 = 0.3 * x3
y3 = 2.0 + 1.5 * x3 + rng.normal(0, 1, n3) * sd3
A3 = np.stack([np.ones(n3), x3], axis=1)
b_ols, *_ = np.linalg.lstsq(A3, y3, rcond=None)
W = 1.0 / (sd3 ** 2)
b_wls = np.linalg.solve(A3.T @ (W[:, None] * A3), A3.T @ (W * y3))
print(" 참 계수는 2.0 과 1.5 이고 잡음의 크기가 x 에 비례합니다")
print(" %s %s %s %s"
% (pw("무엇으로", 24), rw("절편", 14), rw("기울기", 14), rw("참값과의 거리", 18)))
for nm, b in [("그냥 제곱오차", b_ols), ("분산으로 나눈 가중", b_wls)]:
print(" %s %14.6f %14.6f %18.6f"
% (pw(nm, 24), b[0], b[1], float(np.hypot(b[0] - 2.0, b[1] - 1.5))))
print(" 가중 제곱오차가 정규 가정의 음의 로그우도입니다")
print(" 분산을 아는 자리에서는 그것으로 나눠야 합니다")
# --- 문제 3: 일반화 선형모형 -------------------------------------------
print(" 선형 예측자에 연결함수를 씌우면 여러 문제가 하나가 됩니다")
print(" %s %s %s %s"
% (pw("문제", 16), rw("y 의 분포", 14), rw("정준 연결함수", 18),
rw("무엇을 예측", 16)))
for a, b, c, d in [("회귀", "정규", "항등", "평균"),
("이진 분류", "베르누이", "로짓", "확률"),
("개수 세기", "포아송", "로그", "비율"),
("대기 시간", "감마", "역수 또는 로그", "평균"),
("다중 분류", "다항", "소프트맥스", "확률 벡터")]:
print(" %s %s %s %s" % (pw(a, 16), rw(b, 14), rw(c, 18), rw(d, 16)))
print(" 정준 연결함수를 쓰면 기울기가 언제나 같은 모양이 됩니다")
print(" 세 문제의 기울기가 같은 모양인지 확인합니다")
print(" %s %s"
% (pw("문제", 20), rw("기울기", 40)))
for a, b in [("정규와 항등", "(예측 빼기 관측) 곱하기 x 의 평균"),
("베르누이와 로짓", "(예측 확률 빼기 관측) 곱하기 x 의 평균"),
("포아송과 로그", "(예측 비율 빼기 관측) 곱하기 x 의 평균")]:
print(" %s %s" % (pw(a, 20), rw(b, 40)))
print(" 셋 다 예측에서 관측을 뺀 것에 x 를 곱합니다")
n4 = 3000
x4 = rng.normal(0, 1, n4)
X4 = np.stack([np.ones(n4), x4], axis=1)
w_true = np.array([0.3, 0.8])
y_norm = X4 @ w_true + rng.normal(0, 1, n4)
y_bern = (rng.random(n4) < sig(X4 @ w_true)).astype(float)
y_pois = rng.poisson(np.exp(X4 @ w_true))
print(" 세 자료를 만들어 같은 갱신식으로 풀어 봅니다")
def irls(X, y, kind, steps=4000, lr=0.2):
w = np.zeros(X.shape[1])
for _ in range(steps):
z = X @ w
if kind == "norm":
mu = z
elif kind == "bern":
mu = sig(z)
else:
mu = np.exp(np.clip(z, -30, 30))
w -= lr * (X.T @ (mu - y)) / len(y)
return w
print(" %s %s %s %s"
% (pw("문제", 20), rw("절편", 14), rw("기울기", 14), rw("참값과의 거리", 18)))
for nm, y_, kind in [("정규와 항등", y_norm, "norm"),
("베르누이와 로짓", y_bern, "bern"),
("포아송과 로그", y_pois, "pois")]:
w = irls(X4, y_, kind)
print(" %s %14.6f %14.6f %18.6f"
% (pw(nm, 20), w[0], w[1],
float(np.hypot(w[0] - 0.3, w[1] - 0.8))))
print(" 같은 코드에서 mu 를 만드는 줄 하나만 바꿨습니다")
print(" 셋 다 참값 0.3 과 0.8 근처로 갑니다")
print(" 이것이 일반화 선형모형이 하나의 틀인 이유입니다")
print(" 연결함수를 잘못 고르면 어떻게 되는지 봅니다")
print(" 개수 자료에 정규를 가정해 보고 견줍니다")
print(" %s %s %s %s"
% (pw("무엇으로 맞추나", 26), rw("절편", 12), rw("기울기", 12),
rw("음수 예측 비율", 18)))
w_ok = irls(X4, y_pois, "pois")
A = np.stack([np.ones(n4), x4], axis=1)
w_bad, *_ = np.linalg.lstsq(A, y_pois.astype(float), rcond=None)
for nm, w, kind in [("포아송과 로그", w_ok, "pois"), ("정규와 항등", w_bad, "norm")]:
if kind == "pois":
pred = np.exp(np.clip(X4 @ w, -30, 30))
else:
pred = X4 @ w
print(" %s %12.6f %12.6f %18.6f"
% (pw(nm, 26), w[0], w[1], float((pred < 0).mean())))
print(" 정규를 가정하면 예측이 음수가 되는 자리가 생깁니다")
print(" 개수는 음수가 될 수 없으므로 그 자체로 틀린 모형입니다")
print(" 연결함수는 예측이 가질 수 있는 값의 범위를 맞추는 장치입니다")
# --- 문제 4: 정규화가 사전분포입니다 -------------------------------------
print(" 벌점을 더하는 것이 사전분포를 두는 것과 같습니다")
print(" %s %s %s"
% (pw("어떤 벌점", 20), rw("어떤 사전분포", 22), rw("최대사후가 무엇이 되나", 26)))
for a, b, c in [("L2 제곱", "정규", "릿지"),
("L1 절댓값", "라플라스", "라소"),
("없음", "균등", "최대우도"),
("L2 와 L1 섞음", "둘의 곱", "엘라스틱넷")]:
print(" %s %s %s" % (pw(a, 20), rw(b, 22), rw(c, 26)))
print(" 116강의 정규화와 148강의 베이즈가 여기서 만납니다")
print(" 같은 값이 나오는지 확인합니다")
n5 = 60
p5 = 8
X5 = rng.normal(0, 1, (n5, p5))
w5 = np.array([2.0, -1.5, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0])
y5 = X5 @ w5 + rng.normal(0, 1.0, n5)
print(" 표본 60 에 변수 8 개입니다. 참 계수는 앞 셋만 0 이 아닙니다")
print(" %s %s %s %s"
% (pw("사전분포의 표준편차", 24), rw("그에 해당하는 lambda", 24),
rw("릿지 해와의 차이", 20), rw("판정", 12)))
sigma_noise = 1.0
for tau in [10.0, 1.0, 0.5, 0.2]:
lam = (sigma_noise ** 2) / (tau ** 2)
ridge = np.linalg.solve(X5.T @ X5 + lam * np.eye(p5), X5.T @ y5)
post = np.linalg.solve(X5.T @ X5 / sigma_noise ** 2 + np.eye(p5) / tau ** 2,
X5.T @ y5 / sigma_noise ** 2)
d = float(np.max(np.abs(ridge - post)))
print(" %s %24.4f %20.2e %s"
% (pw("%.1f" % tau, 24), lam, d,
rw("같음" if d < 1e-10 else "다름", 12)))
print(" 최대사후 추정과 릿지가 완전히 같습니다")
print(" 사전분포가 좁을수록 lambda 가 커집니다. 더 강하게 0 으로 당깁니다")
print(" 라소가 0 을 만드는 것을 봅니다")
def lasso(X, y, lam, steps=8000, lr=0.01):
w = np.zeros(X.shape[1])
for _ in range(steps):
g = X.T @ (X @ w - y) / len(y)
w = w - lr * g
w = np.sign(w) * np.maximum(np.abs(w) - lr * lam, 0.0)
return w
print(" %s %s %s %s"
% (pw("lambda", 12), rw("0 이 된 계수 수", 18), rw("참 0 중 맞힌 수", 20),
rw("참 비 0 중 살린 수", 22)))
for lam in [0.0, 0.05, 0.2, 0.8, 3.0]:
w = lasso(X5, y5, lam)
zeros = np.abs(w) < 1e-8
print(" %s %18d %20d %22d"
% (pw("%.2f" % lam, 12), int(zeros.sum()),
int((zeros & (w5 == 0)).sum()), int((~zeros & (w5 != 0)).sum())))
print(" lambda 를 키우면 계수가 정확히 0 이 됩니다. 릿지는 그러지 않습니다")
print(" 라플라스 사전분포가 0 에서 뾰족하기 때문입니다")
print(" lambda 3.0 에서는 참인 계수까지 0 으로 만듭니다. 211강에서 고르는 법을 봅니다")
# --- 문제 5: 대응이 깨지는 자리 -----------------------------------------
print(" 대응이 늘 성립하는 것은 아닙니다")
print(" %s %s"
% (pw("무엇을 하면", 26), rw("무엇이 깨지나", 30)))
for a, b in [("클래스 가중치를 줌", "우도가 아닌 것을 최대화"),
("표본을 다시 뽑음", "분포를 바꿔 버림"),
("손실을 잘라 냄", "대응하는 분포가 없음"),
("여러 손실을 섞음", "하나의 우도가 아님"),
("초점 손실", "확률이 보정을 잃음")]:
print(" %s %s" % (pw(a, 26), rw(b, 30)))
print(" 204강 문제 5 의 보정 문제가 여기서 이유를 얻습니다")
print(" 손실을 자르면 무엇이 달라지는지 봅니다")
n6 = 3000
x6 = rng.normal(0, 1, n6)
y6 = 2.0 + 1.5 * x6 + rng.normal(0, 1.0, n6)
y6[:60] += rng.normal(0, 12, 60)
A6 = np.stack([np.ones(n6), x6], axis=1)
def huber(X, y, delta, steps=3000, lr=0.3):
w = np.zeros(2)
for _ in range(steps):
r = X @ w - y
g = np.where(np.abs(r) <= delta, r, delta * np.sign(r))
w -= lr * (X.T @ g) / len(y)
return w
b_ls, *_ = np.linalg.lstsq(A6, y6, rcond=None)
print(" 3000 개 중 60 개에 큰 잡음을 넣었습니다. 참 계수는 2.0 과 1.5 입니다")
print(" %s %s %s %s"
% (pw("무엇으로", 22), rw("절편", 14), rw("기울기", 14), rw("참값과의 거리", 18)))
rows = [("제곱오차", b_ls)]
for d in [3.0, 1.0]:
rows.append(("후버 delta %.1f" % d, huber(A6, y6, d)))
for nm, b in rows:
print(" %s %14.6f %14.6f %18.6f"
% (pw(nm, 22), b[0], b[1], float(np.hypot(b[0] - 2.0, b[1] - 1.5))))
print(" 후버가 제곱오차보다 참값에 가깝습니다")
print(" 그런데 후버에 정확히 대응하는 흔한 분포가 없습니다")
print(" 가운데는 정규이고 밖은 라플라스인 분포를 만들면 되지만 잘 안 씁니다")
print(" 대응이 없어도 쓸 수 있습니다. 다만 확률로는 해석하지 않습니다")
print(" 확률로 읽을 수 있는지 확인합니다")
n7 = 30000
x7 = rng.normal(0, 1, (n7, 2))
w7 = np.array([1.2, -0.8])
y7 = (rng.random(n7) < sig(x7 @ w7 - 1.0)).astype(float)
A7 = np.concatenate([np.ones((n7, 1)), x7], axis=1)
def fit_logit(A, y, weight_pos=1.0, steps=800, lr=0.5):
b = np.zeros(A.shape[1])
wt = np.where(y == 1, weight_pos, 1.0)
for _ in range(steps):
q = sig(A @ b)
b -= lr * (A.T @ (wt * (q - y))) / wt.sum()
return b
print(" %s %s %s %s"
% (pw("무엇으로 맞추나", 24), rw("예측 확률 평균", 18),
rw("실제 양성 비율", 18), rw("차이", 14)))
for nm, wp in [("보통 우도", 1.0), ("양성 가중 5", 5.0),
("양성 가중 20", 20.0)]:
b = fit_logit(A7, y7, wp)
q = sig(A7 @ b)
print(" %s %18.6f %18.6f %14.6f"
% (pw(nm, 24), float(q.mean()), float(y7.mean()),
float(q.mean() - y7.mean())))
print(" 보통 우도로 맞추면 예측 확률의 평균이 실제 비율과 같습니다")
print(" 가중치를 주면 그 성질이 깨집니다. 우도가 아니기 때문입니다")
print(" 이것이 최대우도의 성질이지 분류기의 성질이 아니라는 것을 보여 줍니다")
print(" 정리합니다")
print(" %s %s"
% (pw("무엇을 얻었나", 26), rw("어디서 쓰이나", 30)))
for a, b in [("지수족의 한 틀", "여러 손실을 한 번에"),
("A 의 미분이 평균", "기울기가 늘 같은 모양"),
("정준 연결함수", "예측 범위를 맞춤"),
("벌점이 사전분포", "211강 정규화"),
("대응이 깨지는 자리", "확률 해석의 한계")]:
print(" %s %s" % (pw(a, 26), rw(b, 30)))
print(" 206강은 손실이 어디서 오는지 밝혔습니다. 207강은 그것을 실제로 풉니다")
# 204강에서 가정과 손실의 대응표만 봤습니다. 이제 유도합니다
# 다섯 분포가 하나의 모양으로 적힙니다. 이것을 지수족이라 합니다
# p(y) = h(y) exp(eta T(y) 빼기 A(eta)) 꼴입니다
# 분포 자연 모수 eta 충분통계량 T(y) 로그분할 A(eta)
# 정규 분산 1 평균 mu y eta 제곱 나누기 2
# 베르누이 로그 오즈 y log(1 더하기 e^eta)
# 포아송 log 람다 y e^eta
# 지수 음의 비율 y 음의 log(음의 eta)
# 다항 로짓 벡터 원핫 log 합 e^eta
# A 를 한 번 미분하면 평균이고 두 번 미분하면 분산입니다
# 실제로 그런지 확인합니다
# 분포 eta A 의 도함수 실제 평균 차이
# 정규 분산 1 0.7000 0.700000 0.700000 -0.0000000000
# 베르누이 0.4000 0.598688 0.598688 0.0000000000
# 포아송 -0.3000 0.740818 0.740818 0.0000000000
# 수치 미분과 이론 평균이 소수점 아래 여덟 자리까지 같습니다
# 분포 eta A 의 2 계도함수 실제 분산 차이
# 정규 분산 1 0.7000 1.000000 1.000000 -0.00000019
# 베르누이 0.4000 0.240261 0.240261 0.00000040
# 포아송 -0.3000 0.740817 0.740818 -0.00000081
# 분산도 맞습니다. 이 하나의 사실에서 손실과 기울기가 다 나옵니다
# 음의 로그우도를 전개하면 낯익은 식이 나옵니다
# 분포 음의 로그우도 모수와 무관한 부분
# 정규 (y 빼기 mu) 제곱 나누기 2 더하기 상수 log 루트 2 pi
# 베르누이 빼기 y log p 빼기 (1-y) log(1-p) 없음
# 포아송 람다 빼기 y log 람다 더하기 상수 log y 계승
# 지수 log 평균 더하기 y 나누기 평균 없음
# 상수 항은 최소화에 영향을 안 줍니다. 그래서 떼고 씁니다
# 정규에서 제곱오차가 나오는 것을 수치로 확인합니다
# 가정한 평균 음의 로그우도 합 제곱오차 합의 절반 차이
# 0.5 8627.8017 4033.1090 4594.6927
# 1.0 7227.8431 2633.1504 4594.6927
# 1.3 6987.8679 2393.1753 4594.6927
# 1.8 7587.9094 2993.2167 4594.6927
# 차이가 4594.6927 로 일정합니다. 그것이 상수 항입니다
# 상수가 붙어도 최소가 되는 자리는 같습니다
# 분산도 함께 추정하면 달라집니다
# 무엇을 추정 평균 분산 음의 로그우도
# 평균만 분산은 1 로 둠 1.309983 1.000000 6987.6188
# 둘 다 추정 1.309983 0.957170 6985.2582
# 분산을 두 배로 잘못 둠 1.309983 1.914341 7468.1261
# 분산을 함께 추정하면 우도가 더 커집니다
# 그런데 평균의 추정값은 안 바뀝니다. 분산이 곱해진 상수이기 때문입니다
# 가중치가 자리마다 다르면 이야기가 달라집니다. 188강 문제 3 입니다
# 분산이 자리마다 다르면 가중 제곱오차가 나옵니다
# 참 계수는 2.0 과 1.5 이고 잡음의 크기가 x 에 비례합니다
# 무엇으로 절편 기울기 참값과의 거리
# 그냥 제곱오차 1.976382 1.517179 0.029205
# 분산으로 나눈 가중 1.999099 1.499982 0.000901
# 가중 제곱오차가 정규 가정의 음의 로그우도입니다
# 분산을 아는 자리에서는 그것으로 나눠야 합니다
# 선형 예측자에 연결함수를 씌우면 여러 문제가 하나가 됩니다
# 문제 y 의 분포 정준 연결함수 무엇을 예측
# 회귀 정규 항등 평균
# 이진 분류 베르누이 로짓 확률
# 개수 세기 포아송 로그 비율
# 대기 시간 감마 역수 또는 로그 평균
# 다중 분류 다항 소프트맥스 확률 벡터
# 정준 연결함수를 쓰면 기울기가 언제나 같은 모양이 됩니다
# 세 문제의 기울기가 같은 모양인지 확인합니다
# 문제 기울기
# 정규와 항등 (예측 빼기 관측) 곱하기 x 의 평균
# 베르누이와 로짓 (예측 확률 빼기 관측) 곱하기 x 의 평균
# 포아송과 로그 (예측 비율 빼기 관측) 곱하기 x 의 평균
# 셋 다 예측에서 관측을 뺀 것에 x 를 곱합니다
# 세 자료를 만들어 같은 갱신식으로 풀어 봅니다
# 문제 절편 기울기 참값과의 거리
# 정규와 항등 0.258193 0.794271 0.042198
# 베르누이와 로짓 0.305762 0.793606 0.008607
# 포아송과 로그 0.294560 0.800669 0.005481
# 같은 코드에서 mu 를 만드는 줄 하나만 바꿨습니다
# 셋 다 참값 0.3 과 0.8 근처로 갑니다
# 이것이 일반화 선형모형이 하나의 틀인 이유입니다
# 연결함수를 잘못 고르면 어떻게 되는지 봅니다
# 개수 자료에 정규를 가정해 보고 견줍니다
# 무엇으로 맞추나 절편 기울기 음수 예측 비율
# 포아송과 로그 0.294560 0.800669 0.000000
# 정규와 항등 1.848961 1.479652 0.104667
# 정규를 가정하면 예측이 음수가 되는 자리가 생깁니다
# 개수는 음수가 될 수 없으므로 그 자체로 틀린 모형입니다
# 연결함수는 예측이 가질 수 있는 값의 범위를 맞추는 장치입니다
# 벌점을 더하는 것이 사전분포를 두는 것과 같습니다
# 어떤 벌점 어떤 사전분포 최대사후가 무엇이 되나
# L2 제곱 정규 릿지
# L1 절댓값 라플라스 라소
# 없음 균등 최대우도
# L2 와 L1 섞음 둘의 곱 엘라스틱넷
# 116강의 정규화와 148강의 베이즈가 여기서 만납니다
# 같은 값이 나오는지 확인합니다
# 표본 60 에 변수 8 개입니다. 참 계수는 앞 셋만 0 이 아닙니다
# 사전분포의 표준편차 그에 해당하는 lambda 릿지 해와의 차이 판정
# 10.0 0.0100 0.00e+00 같음
# 1.0 1.0000 0.00e+00 같음
# 0.5 4.0000 0.00e+00 같음
# 0.2 25.0000 0.00e+00 같음
# 최대사후 추정과 릿지가 완전히 같습니다
# 사전분포가 좁을수록 lambda 가 커집니다. 더 강하게 0 으로 당깁니다
# 라소가 0 을 만드는 것을 봅니다
# lambda 0 이 된 계수 수 참 0 중 맞힌 수 참 비 0 중 살린 수
# 0.00 0 0 3
# 0.05 0 0 3
# 0.20 5 5 3
# 0.80 5 5 3
# 3.00 8 5 0
# lambda 를 키우면 계수가 정확히 0 이 됩니다. 릿지는 그러지 않습니다
# 라플라스 사전분포가 0 에서 뾰족하기 때문입니다
# lambda 3.0 에서는 참인 계수까지 0 으로 만듭니다. 211강에서 고르는 법을 봅니다
# 대응이 늘 성립하는 것은 아닙니다
# 무엇을 하면 무엇이 깨지나
# 클래스 가중치를 줌 우도가 아닌 것을 최대화
# 표본을 다시 뽑음 분포를 바꿔 버림
# 손실을 잘라 냄 대응하는 분포가 없음
# 여러 손실을 섞음 하나의 우도가 아님
# 초점 손실 확률이 보정을 잃음
# 204강 문제 5 의 보정 문제가 여기서 이유를 얻습니다
# 손실을 자르면 무엇이 달라지는지 봅니다
# 3000 개 중 60 개에 큰 잡음을 넣었습니다. 참 계수는 2.0 과 1.5 입니다
# 무엇으로 절편 기울기 참값과의 거리
# 제곱오차 2.013979 1.544678 0.046813
# 후버 delta 3.0 2.007216 1.499350 0.007245
# 후버 delta 1.0 2.007020 1.493128 0.009823
# 후버가 제곱오차보다 참값에 가깝습니다
# 그런데 후버에 정확히 대응하는 흔한 분포가 없습니다
# 가운데는 정규이고 밖은 라플라스인 분포를 만들면 되지만 잘 안 씁니다
# 대응이 없어도 쓸 수 있습니다. 다만 확률로는 해석하지 않습니다
# 확률로 읽을 수 있는지 확인합니다
# 무엇으로 맞추나 예측 확률 평균 실제 양성 비율 차이
# 보통 우도 0.327633 0.327633 0.000000
# 양성 가중 5 0.610534 0.327633 0.282901
# 양성 가중 20 0.816381 0.327633 0.488748
# 보통 우도로 맞추면 예측 확률의 평균이 실제 비율과 같습니다
# 가중치를 주면 그 성질이 깨집니다. 우도가 아니기 때문입니다
# 이것이 최대우도의 성질이지 분류기의 성질이 아니라는 것을 보여 줍니다
# 정리합니다
# 무엇을 얻었나 어디서 쓰이나
# 지수족의 한 틀 여러 손실을 한 번에
# A 의 미분이 평균 기울기가 늘 같은 모양
# 정준 연결함수 예측 범위를 맞춤
# 벌점이 사전분포 211강 정규화
# 대응이 깨지는 자리 확률 해석의 한계
# 206강은 손실이 어디서 오는지 밝혔습니다. 207강은 그것을 실제로 풉니다