Boostcamper's TIL (3)

최현진·2021년 8월 6일
0

boostcamp

목록 보기
3/20

2021/08/04

학습한 내용

AI Math

통계학 기초

통계적 모델링은 적절한 가정에서 확률분포를 추정하는 것이다. 다양한 확률분포들 중에서 어떠한 확률분포를 사용해서 모델링을 하느냐는 중요한 선택일 수 있다.
하지만 데이터의 일부만 관찰해서 모집단의 분포를 알수는 없다. 그래서 근사적으로 분포를 추정할 수 밖에 없다.

모수적(parametric)방법론 - 데이터가 특정 확률분포를 따른다고 가정한 후 분포를 결정

비모수적(nonparametric)방법론 - 특정 확률분포를 가정하지 않고 데이터에 따라 유연하게 모델의 구조와 모수의 개수를 바꾸게 되는것 (모수가 없다는 의미 아님)

확률분포를 가정할 수 있는 방법은 데이터의 전체적인 모양(히스토그램, 값을 갖는 범위)을 통해 가정할 수 있다.
ex) 베르누이, 카테고리, 베타, 감마, 정규, 라플라스, ...

최대가능도 추정법(MLE)
주어진 확률분포를 어떤식으로 가정하느냐에 상관없이 이론적으로 가장 가능성이 높은 파라미터를 추정할 수 있다. 이를 이해하기 위해서 가능도 함수를 먼저 이해해야한다.

가능도(우도) - 확률분포의 모수가, 어떤 확률변수의 표집값과 일관되는 정도를 나타내느 값으로 주어진 표집값에 대한 모수의 가능도는 이 모수를 따르는 분포가 주어진 관측값에 대하야 부여하는 확률

확률변수 X가 모수θ 에 대한 확률분포 Pθ(X)P_{\theta}(X)를 가지며, X가 특정한 값 x로 표집되었을 경우 θ\theta의 가능도 함수L(θx)\mathcal{L}(\theta \mid x)가 정의된다. (모수 θ\theta를 변수로 둔 함수)

L(θx)=P1,θ(X1=x1)P2,θ(X2=x2)Pn,θ(Xn=xn)\mathcal{L}(\theta \mid x)=P_{1, \theta}\left(X_{1}=x_{1}\right) P_{2, \theta}\left(X_{2}=x_{2}\right) \cdots P_{n, \theta}\left(X_{n}=x_{n}\right)

만약 데이터가 독립적으로 추출되었을 경우 로그가능도함수를 갖는다.

logL(θx)=ilogPi,θ(Xi=xi)\log \mathcal{L}(\theta \mid x)=\sum_{i} \log P_{i, \theta}\left(X_{i}=x_{i}\right)

데이터가 많아지면 컴퓨터로 가능도를 계산하는 것은 불가능하다 하지만 데이터가 독립일 경우 로그를 사용하면 곱셈 연산을 로그의 덧셈으로 바꿀 수 있기 때문에 컴퓨터로 연산을 할 수 있다.
또한, 경사하강법으로 가능도를 최적화할 때 연산량을 O(N2)O\left(N^{2}\right) 에서 O(N)O\left(N\right)로 줄일 수 있다.

베이즈 통계학 기초

베이즈 통계학을 알아야하는 이유
새로운 데이터가 중간에 추가 되었을 때 정보를 갱신해야 하는 상황이 있다. 이 때 베이즈 정리를 활용할 수 있는데 먼저 조건부확률의 개념이 필요하다.

조건부확률
P(A|B) = P(A∩B)/P(B)
사건 B가 이미 일어난 상황에서 A가 발생할 확률 (A|B) => "A given B"

베이즈 정리는 이 조건부확률을 사용해서 새로운 데이터를 갱신하는 방법을 알려준다.

베이즈정리
P(B|A) = P(A∩B)/P(A) 이고, P(A∩B) = P(A|B)P(B) 이므로
P(B|A) = P(B)P(A|B)/P(A)

P(B|A): 사후확률 (데이터를 관찰한 후 확률)
P(B): 사전확률
P(A|B): 가능도 (현재 주어진 모수, 이 데이터가 관찰될 확률)
P(A): Evidence (데이터 자체의 분포)

이렇게 정리된 수식을 통해서 민감도(Recall), 오탐율, 정밀도(Precision)를 계산하는 문제를 풀 수 있다.

결과적으로 베이즈 정리를 통해 새로운 데이터가 들어오면 앞에서 계산된 사후확률을 사전확률에 대입해 갱신된 사후확률을 계산할 수 있다.

CNN 기초


코드리뷰

  • 삼항연산자
    Python에서 삼항연산자는 다른 언어에서 사용했던 삼항연산자와 느낌이 조금 달랐다.
#python
a = "일반요금" if age >= 19 else "학생요금"
# 만약 나이(age)가 19세 이상이면 a ="일반요금"
# 그렇지 않으면 a ="학생요금"
//java
String a = (age >=) 19 ? "일반요금" : "학생요금";

Reference

https://ko.wikipedia.org/wiki/%EA%B0%80%EB%8A%A5%EB%8F%84 가능도함수

profile
Boostcamper!

0개의 댓글