경사하강법 구현입니다.

new_value = old_value - learning_rate * old_value

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline


old_value = 10
derivative = [old_value]
# basic example : x^2
y = [old_value ** 2]

learning_rate = 0.01

for i in range(1, 1000):
    # update
    new_value = old_value - learning_rate * old_value
    
    # for plotting
    y.append(new_value ** 2)
    derivative.append(new_value)
    
    old_value = new_value
    
plt.plot(derivative, y)

 

이항분포로 성공, 실패를 다루었다면 3개 이상의 사건에 대한 결과가 나타날때는 어떻게 해야할까요?


3개 이상, 예를 들어, 주사위의 각 면이 나올 경우는 6가지이죠. 


각 분포의 경우에서 보면,


베르누이 분포는 주사위의 k번째 면이 나올 확률

이항 분포는 주사위의 k번째 면이 n번 나올 확률

다항 분포는 주사위의 k, t, m번째 면이 각각 n번 나올 확률


이렇게 다수의 결과를 가지는 경우에는 다항분포를 사용하여야 합니다.


< PMF >

pmf는 약간 중복순열(생각하는 정의가 거의 비슷(?))과 비슷한 모양을 띄어서 생각보다 이해하기가 쉽습니다




< 기댓값과 분산 >


'# 기타 공부한 것들 > math' 카테고리의 다른 글

균등분포(균일분포, Uniform dist)  (0) 2019.02.26
지수분포  (1) 2019.02.22
음이항 분포  (0) 2019.02.01
기하 분포  (1) 2019.01.30
초기하 분포  (0) 2019.01.30

1. is 또는 is not 은 동일한 객체를 가리키냐 아니냐의 차이점을 구별하는 기능이다.

2. 파이썬 2.7과 그 이하 버전에서 나눗셈에 대한 기능을 파이썬 3과 동일한 기능처럼 사용하고 싶다면 아래의 문장을 추가하면 된다.

from __future__ import division

3. 여러줄에 걸친 문자열을 사용하고 싶다면 """ string """ 처럼 3개의 따옴표를 사용하면 된다.

4. 문자열에서 \을 나타내고 싶다면 이스케이프 문자(\)에 \를 그대로 붙이면 된다. ex) '12\\34'

5. \\를 두개 붙이기가 귀찮다면 문자열 앞에 r을 붙이면 된다. ex) r'12\34'

6. 비어있는 사전, 리스트, 튜플은 False로 간주된다. 

7. strftime은 datetime을 문자열로 만들어준다. strptime은 문자열을 datetime객체로 만들어준다.

8. pass문은 블록문을 그대로 뛰어넘게 해준다. 

9. 파이썬3 에서는 xrange가 없다. range가 그 기능을 다 해준다. (이터레이터의 반환 여부)

10. if-else의 삼단표현은 다음과 같다. --> { value = true if condition else false }

11. 'in' 예약어를 사용해서 리스트에 어떤 값이 있는지 검사할 수 있다. { value in list }

12. 리스트를 합칠때는 '+'를 이용한 연산보다 extend를 사용한 연산이 더 빠르다. 

13. dict((v, i) for I, v in enumerate(some_list))

14. 순차 자료형에서 유일한 값만 가지는 정렬된 리스트를 가지고 오는 패턴 : sorted(set('something'))

15. 리스트를 dict의 키로 사용하고 싶다면 tuple로 변환해서 사용하면 된다. 

16. 리스트 컴프리헨션 : [expr for value in collection if condition] --> 대괄호를 {key : ~}로 바꾸면 dict-comp가 된다. 

17. 중첩된 리스트 컴프리헨션의 for은 중첩의 순서에 따라 나열된다.

ex) [name for names in all_data for name in names if condition] -> all_data에 먼저 접근 -> names를 뒤로 가져가 condition에 맞는 name을 반환

18. 커링은 from functors import partial --> func2 = partial(func1, arg1)로 대체할 수 있다. 


Reference

본 내용은 '파이썬 라이브러리를 활용한 데이터 분석' 책을 참조합니다.

이산확률분포 중 하나인 음이항 분포는 기하분포와 상당히 비슷한 특징을 가진다.

기하분포는 n번의 시행에서 1번의 성공과 n-1번의 실패에 대한 확률을 구했다면,

음이항 분포는 n번의 시행(여러번의 베르누이 독립시행)에서 r번 성공할 확률을 구합니다.



< PMF > 

X : n + r   r : 성공횟수    n : 실패횟수

조합에서 -1을 해주는 이유는 기하분포의 특성처럼 음이항분포 또한, 마지막 시행은 무조건 성공이기 때문입니다. 따라서 마지막 성공 이전의 경우만 중복없이 순열처럼 나열하는 경우가 오게 됩니다. 


< 기댓값과 분산 > 

r (성공횟수) 가 1일 경우, 정확히 기하분포와 일치합니다. 따라서 음이항분포는 기하분포의 경우중 하나라고 할 수 있습니다. 

'# 기타 공부한 것들 > math' 카테고리의 다른 글

지수분포  (1) 2019.02.22
다항분포(multinomial distribution)  (0) 2019.02.14
기하 분포  (1) 2019.01.30
초기하 분포  (0) 2019.01.30
이항분포  (0) 2019.01.28

기하분포 또한, 베르누이 분포의 확장판이라고 생각하면 됩니다. 


어떤 이벤트에서 내가 한번 성공하기까지의 확률을 알고싶을 때 사용하고, 이를 기하분포를 따른다고 표현합니다.


각 시행은 독립적이며 k = 1,2,3,....일 떄,





< 기하분포의 무기억성 >


< 기하분포 평균 차이점 >

평균이 (1/p) 일 경우가 있고, (1-p/p)일 경우가 있다. 이렇게 다른 이유는 다음과 같고, 자신이 맞는 상황에 따라 쓰면 된다.



'# 기타 공부한 것들 > math' 카테고리의 다른 글

다항분포(multinomial distribution)  (0) 2019.02.14
음이항 분포  (0) 2019.02.01
초기하 분포  (0) 2019.01.30
이항분포  (0) 2019.01.28
베르누이 분포  (0) 2019.01.26