본문 바로가기

분류 전체보기

(53)
[확률]조건부 확률부터 Bayes Rule과 Bayes' Theorem 정리 조건부확률 A라는 사건이 일어났을 때 B가 일어날 확률 $$P(B|A) = \frac{P(A\cap B)}{P(A)}$$ Bayes' Rule $P(A\cap B) = P(A|B)P(B) = P(B|A)P(A)$ 이므로 $$P(A|B) = \frac{P(B|A)P(A)}{P(B)}$$ Bayes' Theorem $A_1$ ~ $A_n$사건이 $S$의 partition이라고 한다면 모든 i, j에 대해서 $A_i \cap A_j = \varnothing$ : mutually exclusive(disjoint) $A_1 \cup \cdots \cup A_n = S$를 만족한다. B 사건을 S에서 일어난 사건이라고 하자. 그렇다면 P(B)를 다음을 통해 구할 수 있겠다. $P(B) = \sum_{i=1}^n ..
딥러닝에서 사용하는 가우시안 분포 기초개념 Probability VS Likelihood 주사위의 경우의 수와 같은 이산확률분포에서는 probability = likelihood 이지만 연속확률분포에서는 probability != likelihood 이다. 연속확률분포에서는 면적이 확률이 된다. ex) 강수량이 100mm~ 150mm 일 확률 즉 특정 사건 딱 오늘 비가 115mm 내릴 확률에 대해서는 0이겠다. probability가 될 때 0이지만, likelihood는 y값이다. Likelihood란 지금 얻은 데이터가 이 분포로부터 나왔을 가능도를 뜻한다. Maximum Likelihood Estimation에서 봤던 것처럼, 데이터 샘플에서 후보 분포에 대한 높이(likelihood 기여도)를 다 곱한 것을 이용할 수 있을 것이다. 가우..
분산부터 공분산행렬까지 분산, 공분산, 상관계수, 공분산행렬까지 개념을 살펴보자. Variance 분산 확률변수 X가 평균으로부터 얼마나 퍼져있는가? $$Var(X) = E[(X-\mu)^2]$$ Covariance 공분산 1개의 변수 값이 변화할 때 다른 변수가 어떠한 연관성을 나타내며 변하는지를 측정한다. $$Cov(X, Y) = \sigma_{XY} = E[(X-E(X))(Y-E(Y))] = E(XY) - E(X)E(Y)$$ 여기서 알 수 있는 것은 단 세가지로, $Cov(X, Y) > 0$ : X와 Y가 양의 선형관계이다 $Cov(X, Y) < 0$ : X와 Y가 음의 선형관계이다 $Cov(X, Y) = 0$ : X와 Y가 아무런 선형 상관관계를 갖지 않는다. 이때 확률 변수 X, Y가 독립이면 $Cov(X, Y) = ..
[C]void 포인터에 자료형 할당하기 일반적인 자료형 할당하기 void 포인터는 자유로운 영혼이다. void 포인터를 다른 자료형으로 변환하면 역참조를 할 수 있다. *(할당받은 자료형 *)ptr 역참조란, 포인터형으로 선언된 변수에다가 *를 붙여 값을 얻어낸 과정 #include int main() { int num1 = 10; float num2 = 3.5f; char c1 = 'a'; void *ptr; ptr = &num1; // num1의 메모리 주소를 void 포인터 ptr에 저장 // printf("%d\n", *ptr); // 컴파일 에러 printf("%d\n", *(int *)ptr); // 10: void 포인터를 int 포인터로 변환한 뒤 역참조 ptr = &num2; // num2의 메모리 주소를 void 포인터 pt..
[C] 문자열 포인터와 문자열 배열 정리 C언어에서는 직접적으로 문자열을 처리할 수 없다. C++에서와 같이 string s1 = "Hello"; 와 같이 할 수 없다는 것이다. 그럼 어떻게 해야 할까? 변수에 직접적으로 저장하는 것이 아닌, 포인터를 이용한다. char c1 = 'a'; #include int main(){ char c1 = 'a'; char *s1 = "hello"; char s2[10] = "hello"; char s3[6] = "hello"; char s4[] = "hello"; } s1은 문자열의 시작주솟값을 가지고 있다. 그리고 문자열의 끝은 항상 \0이다. C언어는 문자열이 \0에서 끝이라는 것을 내부적으로 알고 있다. 그래서 printf는 문자열을 출력할 때 문자열을 계속 출력하다가 NULL에서 출력을 끝낸다. 읽..
[C] 구조체 메모리 크기 계산 빠르게 정리 typedef struct 선언 시, 변수 선언에 대한 메모리 공간 크기에 대해서 알아보자. char : 1 byte int : 4 byte double : 8 byte pointer : (32bit) 4 byte, (64bit) 8 byte sizeof 를 통해서 변수의 사이즈를 알 수 있다. typedef struct student { char a; int b; }S; void main() { printf("메모리 크기 = %d/n", sizeof(S)); // 8 } char + int 해서 5 byte일 것 같지만 8 byte이다. 어떠한 연고로? 가장 큰 자료형 크기의 배수로 정렬한다 int 형이 4 byte이고 구조체의 멤버변수 중 제일 크게 차지하기 때문에 4 byte 단위의 메모리를 잡게 ..
DFS 깊이우선탐색 컴퓨터에서 돌아가는 그대로 시각화하기 간선이 다음과 같이 이어져있다고 하고 0에서 시작해보자. { 0 : [1, 2, 3], 1 : [2, 5], 2 : [3, 4, 5, 6], 3 : [4, 6], 4 : [6, 7]} void dfs(int i, int n){ visited_dfs[i]=1; cout
Nyquist Theorem 나이퀴스트 이론 정리 및 Sampling Rate 우리가 샘플하려는 소리의 가장 높은 주파수보다 2배 이상의 sampling rate를 사용하면 정확하게 소리를 만들어낼 수 있다. 1) Band-limited 되어있어야 한다. 2) 샘플링 주파수가 신호의 최대 주파수의 2배 이상이 되어야 한다.(Fs≥2Fmax) 라고 익히 알고 있다. 이 문장들의 의미를 하나하나 살펴보자. 이때 조심해야 할 것은 몇 번을 쪼개냐의 문제가 아니라 2배 이상이면 정확하게 소리를 다시 만들어 낼 수 있다는 것 sampling rate를 높게 잡아 소리를 더 정확하게 담는다... 라는 표현은 틀린 말이다. 이는 nyquisst theorem에서 말하고자 하는 것이 아니다. 2배 이상으로 sampling rate를 잡으면 정확한 복원이 가능하다 라는 이야기를 하고싶은 것이다. ..