데이터eng 2016. 7. 5. 21:13

통계학의 기본을 곱씹고자 선택한 책. 

현재 6장. 문제를 풀어봄으로써 좀더 생각을 하게 해줌


02 기술통계
2.1 자료의 종류와 구조 17
2.2 표를 이용한 자료정리 20
2.3 그래프를 이용한 자료정리 26
2.4 수치를 이용한 자료정리
연습문제 66

03 확률
3.1 기본개념 75
3.2 확률의 이해 78
3.3 확률의 기본정리 87
3.4 조건부확률 92
3.5 독립사건 104
연습문제 109

04 확률분포
4.1 확률변수 115
4.2 확률분포 117
4.3 기댓값 124
4.4 결합분포와 주변분포 133
4.5 공분산과 상관계수 138
연습문제

05 이항분포와 관련 분포
5.1 베르누이분포 145
5.2 이항분포 147
5.3 초기하분포 152
5.4 포아송분포 156
5.5 기타 이산분포* 159
연습문제 163

06 정규분포
6.1 정규분포의 성질 167
6.2 표준정규분포 169
6.3 정규분포의 계산 173
연습문제 178

07 표집분포
7.1 확률표본과 통계량 183
7.2 표집분포 185
7.3 표본평균의 분포와 중심극한정리 189
7.4 이항분포의 정규근사 192
연습문제 195

08 통계적 추론 개요
8.1 모수적 추론 199
8.2 점추정과 중심축량 201
8.3 구간추정과 이해 203

8.4 가설검정의 개념과 원리 206

'데이터eng' 카테고리의 다른 글

softmax, cross_entropy 에 대하여  (0) 2016.06.05
sigmoid 함수 미분 과정  (1) 2016.05.29
[라그랑제 승수]조건부 최적화 문제 풀기  (0) 2016.01.12
MLE(최우도 추정)에 관해  (0) 2015.12.31
bayes rule  (0) 2015.12.30
//

대표적인 unsupervised learning 중 하나인 kmeans 에 대해여 알아보고, tensorflow를 이용하여 구현한 후 visualize해본다.

ipython notebook 에 코드 후 visualize.

https://github.com/laesunk/tensorflow_practice/blob/master/kmeans_tutorial.ipynb


다음차에 실 데이터를 scaling 하고 적용해본다.

참조 : https://tensorflowkorea.wordpress.com/3-텐서플로우-클러스터링-first-contact-with-tensorflow/

//
데이터eng 2016. 6. 5. 16:43

신경망을 이용한 classification 문제를 풀어보다가 multiclass 에 대한 처리 및 확률기반의 output이 필요하여 그 방법에 대하여 알아보고 정리한다.  Logistic regression 의 내용( cost function, optimize, loss, activation function 등의 개념)을 이용하여 정리하려는데 해당 알고리즘의 설명은 생략? 함...


아래는 일반적인 regression 의 cost function 이다. 데이터(x는 input data, w는 학습 파라미터) 와 실제값(y) 의 차이를 표현한것인데(에러^2 총합의 평균을 최소화한다는 법칙?), 이것을 Gradient Decent 알고리즘을 통하여 optimize(minimize) 하는 것을 반복하게 된다.  



하지만 이 결과값(output)은 input vector의 크기에 따라서 범위가 아주 클수도 작을 수도 있다. 수치 예측을 위한 문제에서 적합한 것이다.  그래서 우리는 분류문제에  출력값을 0 ~ 1 로 내주는 sigmoid 와 같은 특성함수를 사용하게 된다. 

그렇다면 시그모이드를 통과하는 regression 과정은 연산은 아래와 같게 된다.


 


가설함수가 바뀌었으니 최적화를 위해서 cost 함수를 적절하게 바꾸어야한다.(그냥 하게 되면 local minimum에 최약하다. 이부분은 자세한 그래프의 형태가 필요한데 생략. 간단하게는 단순 X^2의 그래프에서 만은 굴곡이 생기는 것으로 이해하면 되겠다.)  그래서 일반적으로  H(x)의 exponential 을 일반화 시키기 위해 log 를 취한다.




위를 그래프로 생각해보면 

y=1일 때는 H(x)=1 이면 cost=0가 되고, H(x)=0이면 cost= 무한대가 된다.( h(x)가 0일 수록 cost가 커지는 형태) 

y=0일 때는 H(x)=0 이면 cost=0가 되고, H(x)=1이면 cost= 무한대가 된다.( h(x)가 1일 수록 cost가 커지는 형태) 

이렇게 log 함수의 단조증가 성질을 이용하여 실제 값과 예측값의 차이에 비례?하는 cost를 만들어낸다.

이러한 cost 함수를 아래와 같이 다시 정의해 볼 수 있다.



위 식에 y=1, y=0을 각각 넣어 정리해보면 위의 분리된 식을 갖을 수 있다. (다만 하나로 표현해놓은것. 나중 살제 로직에서 한번에 cost 함수를 표현해야 하기 때문에)

3차원의 input vector(데이터)를 이용하여 3개의 multiclass 분류를 한다면 아래와 같이 표현이 가능하다(차례로 클래스1,2,3으로 가정). 

아래의 아웃풋을 각각 sigmoid 함수 연산을 통해 0 ~ 1 로 각각의 값을 구할 수 있겠다.




3개의 클래스에 대한 output(score) 이 나올 것인데, 우리는 이것에 대한 원하는 형태가 있다.

각 클래스에 대한 확률 형태( 합은 1, scale 된 수치(0~1) ) 를 원하는데, 여기서 사용되는 것이 softmax이다. 


y = H(x) = Wx 로 볼 수 있겠다.


이렇게 우리는 데이터로부터 각 클래스별 확률로 볼 수 있는 값을 갖을 수 있는 것이다. 그 후 최고 확률 수치를 갖는 것을 one-hot encoding (argmax) 로 찾아내어 분류결과를 낼 수 있다.


학습 시에 어떻게 에러(loss) 를 줄일가?

cross entropy!!

softmax 로 부터 정규화된 값을 통해 실제 정답과 비교하여 에러를 줄이는 것을 해야한다. 이부분에 많이 사용되는 것이 cross entropy라는 것이 있다. y 는 실제 데이터에서 주어진 정답, y^hat 은 모델의 예측값이다.



3 클래스의 분류라고 했을 때 y =[ [1,0,0], [0,1,0], [0,0,1] ] 을 갖을 수 있을 것이다. softmax를 통과한 y^hat 의 one-hot encoding vector와 각원소별 곱을 한다는 의미이다.  

똑같이 0~1 사이의 log 그래프의 무한대와 0 사이의 결과값을 이용하여 error 를 구하고 그 합을 최종 loss 로 취하게 된다.


'데이터eng' 카테고리의 다른 글

통계학 시작  (1) 2016.07.05
sigmoid 함수 미분 과정  (1) 2016.05.29
[라그랑제 승수]조건부 최적화 문제 풀기  (0) 2016.01.12
MLE(최우도 추정)에 관해  (0) 2015.12.31
bayes rule  (0) 2015.12.30
//
데이터eng 2016. 5. 29. 13:03

신경망 activation function으로 ㅅ자주 언급되는 sigmoid함수의 미분 과정이 필요하여 정리해본다.

신경망 학습 과정중에 backpropagation 단계에서 아래 미분된 sigmoid 함수의 값이 요구되어진다.

아래처럼 생겼다. 지수 a 값에 따른 변화이다.


                

                

               

               


아래는 미분 값으 변화이다. 양끝단으로 갈수록 미분값이 0에 수렴하게 되는데,

이러한 사항때문에 나중에 신경망에서 vanishing gradient 문제가 발생하게 된다.


참고 : http://roboticist.tistory.com/494

'데이터eng' 카테고리의 다른 글

통계학 시작  (1) 2016.07.05
softmax, cross_entropy 에 대하여  (0) 2016.06.05
[라그랑제 승수]조건부 최적화 문제 풀기  (0) 2016.01.12
MLE(최우도 추정)에 관해  (0) 2015.12.31
bayes rule  (0) 2015.12.30
//
Recurrent NeuralNetwork for NLP

RNN에 대하여 학습한 내용을 정리 공유 하고자 한다. Recurrent NeuralNetwork 의 줄임말이고, 주로 언어처리에서 많이 쓰이고 있다. 언어라는 것이 단어와 단어사이의 연관성, 즉 시계열성으로 볼 수 있기 때문이다. RNN은 이런 시계열 특성을 반영한 뉴럴넷 모델이다. 여러가지 모델로 만들어 볼 수 있는데. 이번 설명은 언어모델을 이용한 생성(generative model)을만드는 것에 대해 해볼 예정이다. 

RNN기본 구조

이것이 기본 구조이다. 겉보기엔 굉장히 심플? 하다.


X는 주어진 데이터의 한문장에서 분리된 한단어(토큰)이라고 보면 된다. A는 추후 나오지만 activation 단계이고, h는 결과 output이다.

키포인트는 펼쳐진 아래그림에서 볼 수 있다.


첫번째 유닛(X-> A -> h 의 계산 한번을 한 유닛으로 부르겠다.) 이 다음 유닛을 계산할 때 영향을 준다는 것이다. 

가운데 노드(A) 를  hidden state 라고 칭하는데 hidden state의 값이  다음 출력값의 계산에 영향을 주게 된다. 

수식으로 표현하면 아래와 같다.



이전 상태값(t-1) 과 현재 타임스텝(t)의 Input 의 계산결과(activation function) 값이 현재스텝의 상태값(hidden state)이 된다는 내용이다. 모든 스텝에서 같은 activation function 이 적용되기 때문에 저렇게 하나로 무리없이 표현이 가능하다.

좀 더 자세히 보게 되면




activation function 으로 tahn가 사용되었고( 물론 relu등을 사용할 수도 있지만 기본 RNN에서는 tahn을 사용하고 있다.)

뉴럴넷의 핵심은 결국 노드간,레이어간 최적 파라메터(w로 표현) 를 찾는 것이다. RNN에서는 세가지 파라메타가 나오는데, 

첫번째는 input(X)에서 hidden-state(A)사이, 두번째는 hidden-state(A_t-1) 와 다음 hidden-state(A_t) 사이, 세번째는 hidden-state(A)와 output(h) 사이에 존재한다.

해당 weight(W) 는 모든 타임스텝에 동일하게 적용이된다.


실제 데이터에 비유하여 알아본다.

케릭터단위 언어모델을 만들어가는 과정이다.  언어모델이란 보통 해당 단어 다음에 올 단어를 맞추는 것이라 이해하면 된다.) 

"hello" 라는 문장이 input으로 들어오게 되면. RNN input은 ["h","e","l","l","o" ] 가 되게 된다.

그리고 output에 대응되는 것은 ["e"," l "," l "o","end"] 가 된다.  이런 방식을 학습해 나가면서 언어모델을 만들게 된다. 

그럼 어떻게 단어를 벡터화 시킬것인가? 가장 간단한 방법은 사전 기반 one-hot encoding이다. 

이 사전은 데이터로부터 만들어야 한다. 여기서는 [h, e, l, o ] 를 vocabulary set으로 만든다(가정) 

그리고 이 단어를 기반으로 아래의 데이터를 만든다.

h = [1,0,0,0], e = [0,1,0,0], l = [0,0,1,0], o = [0,0,0,1].  이  데이터가 input으로 들어가게 된다. 

이 input은 초기 parameter(W_xh)와 곱 해지는데 아래와 같은 계산을 통해 값을 구한다.  


 


처음 단어(글자)는 이전 state 정보가 없기 때문에 랜덤 혹은 ㅇㅓ떤 다른방법?으로 초기화된 데이터를 이용하거나 이전 정보 없이 그대로 갈 수도 있겠다.

아래 보이는 것처럼 이전 hidden-state의 값이 다음 hidden-state계산에 관여하는 것을 볼 수 있다. 


그 다음은 아래와 같이 ouput을 만들어낸다. 사이즈 역시 해당 W에 의해 결정되는데 우리는 4개의 vocab 을 이용했으므로 사이즈 4의 아웃풋이 각 노드마다 계산되어져 나오게 된다. 


 



그 후 softmax 과정을 거쳐 (가장 큰 값의 인덱스 단어를 예측값으로 취함) 예측 한다. (위 그림은 softmax가 아닌 단순 wx+b 와 같다)

이 후 학습은 BPTT(back propagation through time) 이라고 하는데 기존 neuralnet의 학습(back propagation)과 거의 유사하지만 시간 스텝 파라미터에 대한 미분 과정이 더해진 과정이라고 보면 될 것 같다. 추 후 더 학습하고 정리하기로 한다.


참고 :http://cs224d.stanford.edu/syllabus.html

         https://www.youtube.com/user/hunkims



'데이터eng > Tensorflow:MachineLeaning' 카테고리의 다른 글

K-means 를 tensorflow에서 해보기  (0) 2016.07.03
//
데이터eng 2016. 1. 12. 23:59

일반적인 최적화의 내용(Gradient decent)는 제약조건이 없기때문에 가능한 경우지만 제약조건이 생긴다면 적용치 못한다.

이런 상태에서 최적해(optimization)를 구하기 위해서 라그랑제승수라는 방법을 사용한다.

라그랑제 함수는 아래와 같이 정의 할 수 있다.


제약조건이 아래와 같을때

목적함수(objective function)  의 최소값을 구하는 것이다.


직접적인 예로 해보자.

  라고 했을 때


입력 파라미터 세타와 람다(라그랑제 승수에 대해 편미분을 해서 방정식을 풀어 각 값을 구한다.





'데이터eng' 카테고리의 다른 글

softmax, cross_entropy 에 대하여  (0) 2016.06.05
sigmoid 함수 미분 과정  (1) 2016.05.29
MLE(최우도 추정)에 관해  (0) 2015.12.31
bayes rule  (0) 2015.12.30
선형회귀 linear regression  (0) 2015.08.22
//
데이터eng 2015. 12. 31. 15:51


우도는 데이터 분포(평균, 분산)를 가정하고, 해당 데이터를 관측할 확률이 얼마이냐는 것이다.

주어진 데이터에서 데이터의 관측 확률(우도)을 최대화 시키는 mean, sigma 값을 찾아내는 작업을 최우도추정이라고 하는데 이를 통해 데이터를 분류(classification) 하는 과정에 대해 알아본다.

bayes rule 에 대해서는 아래와 같다. 

정규분포를 가정하고 Discriminant function g(x)을 재정의 한다.


아래와 같이 테이터 셋이 주어졌을때

 x 가 y 에 속하면  1, 아닐 경우 0으로 분류한다.

위 데이터셋의 log likelihood 를 구해보면 아래와 같은데, 여기서 최우도 추정 방식을 사용하겠다.


최대를 만들어주는 값 세타를 구해본다. 극값(최대값)을 구하기위하여 일반적으로 적용되는 미분=0 방식을 사용한다. 

위 식을   에 대해 각각 편미분 하여 아래 값을 구해준다.

결국 결과값들을 해석해보자면 해당 클래스C에 대한 데이터의 분포 확률(likelihood)는 위의 평균, 분산 값일때 최대로 이루어진다는것이다. 

추정된 값들은 클래스 C에 대한 산술평균, 분산 값이다. prior(c)에 대한 값도 역시 전체 데이터에 대비한 비율인 것.

그리고 다시 discriminant function 을 아래와 같이 구할 수 있다.

위 식을 가지고 classification 에 이용하도록 한다.

1) BINARY CLASSIFICATION

binary classification 에서는 각각의 값을 비교하여 분별하기 보다 둘의 차이를 구해 양수냐 음수냐를 따져서, 양수일 경우 class1, 음수일 경우 class2 로 분별한다.

variance, prior 값을 갖고, u1= -2, u2=2 인 분포를 보고 생각해보자.

위의 식에 대입하고 계산해보면 

g(x) = -4x 라는 결과를 얻게 되는데 X가 음수 일 경우는 +, 양수일 경우는 - 를 보이게 된다. 결국 x 각 양수일 경우 class2 가 된다.

둘의 가운데 있는 0인 곳에서 discrimant boundary를 형성하고 있다.


아래 차트는 prior(사전) 확률의 값에 차이를 보인다. 

p(1) = 0.8, p(2) = 0.2 라고 가정한다.  

discriminant boundary 가 약간 오른쪽으로 움직인것을 볼 수 있다. 이것은 prior 확률의 차이 때문인데 class1의 prior가 더 높기 때문이다. 





'데이터eng' 카테고리의 다른 글

softmax, cross_entropy 에 대하여  (0) 2016.06.05
sigmoid 함수 미분 과정  (1) 2016.05.29
[라그랑제 승수]조건부 최적화 문제 풀기  (0) 2016.01.12
bayes rule  (0) 2015.12.30
선형회귀 linear regression  (0) 2015.08.22
//
데이터eng 2015. 12. 30. 23:38

조건부확률로 부터 도출되는 bayes rule이다. 그래서 조건부확률과 약간의 확률함수들의 정리ㄱㅏ 필요하다.

결합확률의  product rule 에 의해서 아래가 도출된다.

여기서 이산확률변수의 조건부확률(conditional PMF) 정의는 아래와 같다.

즉 확률변수 X 가 x이고, Y가 y를 갖을 확률을 구하면 결합 확률질량함수(joint pmf) 가 분자, x의 주변확률(marginal) 이 분모가 된다.

이것을 약간 정리해보면 아래와 같은 식을 얻을 수 있는데 보통 product rule이라고 한다.


그래서 우리는 위의 product rule을 이용하여 아래와 같은 bayes rule을 정리할 수 있다.

이 정리는 데이터로(x)부터 확인가능한 확률을 기반으로  추론(y)이 가능하게 한다는 점이다. (확률을 계산가능하게 된다)

사후 확률은 (우도(likelihood) x 사전확률) 로 구해진다는 것이다. 


계산해보기

암검사의 양성 진단확률과 , 실제 암확진을 받는 케이스를 생각해보자.

실제 유방암에서 확진을 받을 확률은?

X = 암검사 양성 진단, Y = 유방암 확진

가정 

p(x=1|y=1) = 0.8  <=  유방암 확진을 받은 경우 암검사에서 양성 진단을 받을 확률 ( 우리가 알 수 있는 확률)

그럼 환자가 진단 양성을 받았을 때 유방암 확진의 확률은 80% 인가? 

아니다. (이런 것을 base rate fallacy 라고 한다)

여기에 bayes rule 을 적용시켜서 볼 수 있다. 사전 (특정 사건이 일어나기 전의, 여기서는 진단 양성확률, 암환자의 확률)의 확률을 이용하여 사후(암확진)의 확률을 계산해내는것이다.

확률을 구하는 것이다.

위에서 말한 것처럼 두가지 정보가 더 필요하다.

1. 사전확률 (prior) : p(Y=1) = 0.004 (암환자일 확률)

2. false positive rate : p(X=1 | Y=0) = 0.1 ( 암환자가 아닌데도 양성진단을 받을 확률) = 0.1



 

결국 우리가 구해야하는 것은 p(Y=1|X=1) 의 확률이다.



p(Y=0) = 암환자가 아닐 확률이니 prior에서 빼서 알 수 잇다. x-0.004 = P(Y=0) 0.996

p(x=1|y=1) = 0.8 

P(Y=1) = 0.004

p(X=1 | Y=0) = 0.1 

결국 암진단에서 양성을 받고 확진이 될 확률은 0.031 (3%정도) 가 되는 것이다.













//
데이터eng 2015. 8. 22. 00:01



선형회귀를 통한 최적의 해(직선)을 구하는 과정, 

종속변수와, 독립변수의 상관관계를 찾는 분석방법

회귀란 선형모델에서 선형인 직선 모델을 만들어주는 것을 뜻한다. 특히 기존 데이터에서 발견되는 상관관계를 찾아 들어오는 미래의 데이터에 대한 prediction을 한다. 특정 변화에 대한 값 예측등을 할 수 있다.

막상 해보니 아주 정확하게 맞춘다기보다 (물론 데이터 모델이 아주 선형적으로 이루어지고 있다면 가능하겠지만) 특정 오차범위를 감안해서 볼 수 있을 듯 하다.



y = 결과값

x = 입력값

b0 = intercept

b1 = 입력값에 대한 coefficient 




파란선의 모델을 최적화 시키는 것이 목표이다. 위에 파란 선을 회귀선(모델)이라고 한다.

빨간선은 만들어진 모델과 실제 특징데이터의 차이(거리)를 말하는데, 이것을 잔차(residual)이라하고 제곱 합이 최소화 되도록 한다.

이런것을 최소제곱추정법이라고 하고, 잔차제곱합(residual sum of squares) 을 구한다고 한다. 


B1은 기울기라고 보면 될 듯 하다.

그런데 이렇게 구해진 예측모델에서 나오는 값을 신뢰할 수 있을가? 

b1 = 3(coefficient) , b0=2(intercept)  =>  y = 3x+2 

위와 같이 모델이 만들어졌고, x=3 이라고 했을 때 실제 데이터에서는 y=11 이라는 값 하나가 아니라는 것이다. 

실제 데이터는 다른 값이 관측 되어질 수 있다. 그 종속변수에 대해서는 변동성이 있는 것이다.

이 모델은 추이를 나타내는 것이고, 변이에 대해서는 나타내고 있지 않다.

그래서 이런 부분을 보완하기 위해 아래의 세가지 방안을 해볼 수 있다.

1. 오차에 대한 가정을 모델에 적용

2. 더 많은 예측변수 추가

3. 예측 변수의 변환





'데이터eng' 카테고리의 다른 글

softmax, cross_entropy 에 대하여  (0) 2016.06.05
sigmoid 함수 미분 과정  (1) 2016.05.29
[라그랑제 승수]조건부 최적화 문제 풀기  (0) 2016.01.12
MLE(최우도 추정)에 관해  (0) 2015.12.31
bayes rule  (0) 2015.12.30
//