clipping = clamping = winsorizing

extreme value에 대해서 범위내 값으로 치환하는 것(버리진 않음)


trimming

extreme value에 대해서 버리는 것

반응형

'AI, ML > ML' 카테고리의 다른 글

1D CNN  (0) 2019.02.26
의사결정나무(Decision Tree)  (0) 2019.02.07
Standardization vs normalization  (0) 2019.01.04
Gym  (0) 2018.11.07
크로스엔트로피 손실함수  (0) 2018.10.02

아래 글은 주로 여기여기에서 가져왔음을 밝힘니다.


Normalization

Normalization은 모든 실수 데이터들 [0,1] range로 변환하는 걸 의미한다.


예를 들면 다음과 같다.



Standardization(=z-transform)

Standardization은 반면 평균을 0으로 만들고 unit variance를 같도록 표준편차로 나누는 작업을 의미한다(z-score)

(결국 평균은0이고 표준편차는 1이되도록 바뀐다)



Normalization의 단점은 outlier가 있어서 매우 크게 튀는 값이 있으면 모든 값을 [0,1]사이에 넣는 속성 때문에 다른 정상(?)값들이 작은 범위에 들어가게 된다는 점이다.

Standardization의 경우는 Normalization과 다르게 [0,1]등 특정 범위에 bound되지는 않는다.

따라서 대부분의 경우는 Normalization보다 Standardization이 좀 더 추천됨


표준편차로 나누는 대신 IQR을 사용하는 방법도 있다. 여기 참조

표준편차는 +-시그마 범위가 68.27%라서 이를 50%로 사용하고 자 할 때 사용(전체 데이터를 4등분해서 outlier여부를 체크하는 등)


또는 10등분해서 상하위 10%를 outlier로 체크하는 방법도 가능(outlier면 범위안으로 값을 바꾼다던지 = clipping = clamping또는 Winsorizing)



Log transformation

값들이 10배수 이상씩 차이가 크다면 log를 씌워서 간격을 줄일 수 있다.

하지만 log는 양수에만 씌울 수 있어서 값에 0이나 음수가 있다면 좀 더 고민이 필요하다.(아래 그래프 참조)





반응형

'AI, ML > ML' 카테고리의 다른 글

의사결정나무(Decision Tree)  (0) 2019.02.07
[데이터 전처리] clipping vs trimming  (0) 2019.01.04
Gym  (0) 2018.11.07
크로스엔트로피 손실함수  (0) 2018.10.02
credit assignment problem  (0) 2018.09.27

https://www.youtube.com/channel/UC5itaBFwmWC4UitYTojyqcQ


안녕하세요, 유튜브에 코딩관련 채널을 개설했습니다. 많은 방문 부탁드립니다^^ ! 



반응형

multiprocess환경에서 디버깅하기

multiprocess를 사용한 경우 pudb가 정상 동작하지 않는다.


이럴 때는 multiprocess로 분기하는  부분을 일시적으로 분기하지 않도록 하거나(근데 이 방법은 코딩을 해야하는 불편이 존재)


remote debugging을 하는 방법이 있는것 같다.


나도 아직 해보진 않았는데.. 여기참조해서 나중에 해보자

반응형

'Programming > Python' 카테고리의 다른 글

Google Colab(Colaboratory Lab) 팁  (0) 2019.03.07
python array (indexing and slicing)  (0) 2019.02.28
Anaconda & Jupyter  (0) 2018.03.23
python numpy  (0) 2018.02.28
python virtualenv 가상환경  (0) 2017.11.16

내 github주소는 다음과 같다.

https://github.com/sevity


접속해보면 coin_strategy, ml등 여러가지 repository가 있고.. 예를 들어 이중 ml 이라는 repository를 리눅스 콘솔로 가져오고 싶으면 다음처럼 clone을 한다.


# git clone https://github.com/sevity/ml.git



반응형

'Programming > Git' 카테고리의 다른 글

git 초기설정  (0) 2023.06.06
git log  (0) 2019.12.09
git 자주 쓰는 명령어 모음  (0) 2019.09.27
git branch 관련  (0) 2019.04.17
--no-ff 옵션  (0) 2017.11.13

강화학습을 위한 환경을 제공해주는 툴킷

https://gym.openai.com/


pip install gym 한다음에 console에서 다음 코드만 쳐도  

import gym
env = gym.make("Taxi-v2")
env.reset()
env.render()


바로 다음과 같은 결과물을 보여준다.


콘솔 환경에서도 텍스트로 렌더링 해준다는게 감동인 부분인데 모든 환경에 대해서 지원하는건 아닌거 같다.

"Taxi-v2"대신 "CartPole-v0"로 바꿔보면 X윈도우 관련 오류가 뜨더라


Jupyter Notebook에서는 gym설치 후 돌려보면 아래처럼 그래픽 관련 부분도 잘 처리가 된다.


간단하게 랜덤액션 선택을 통한 환경 변화 애니메이션을 보려면 다음과 같이 하면 된다.


반응형

'AI, ML > ML' 카테고리의 다른 글

[데이터 전처리] clipping vs trimming  (0) 2019.01.04
Standardization vs normalization  (0) 2019.01.04
크로스엔트로피 손실함수  (0) 2018.10.02
credit assignment problem  (0) 2018.09.27
exploit - explore dilemma  (0) 2018.09.27

여기, 여기 좋다.

이 자료가 좋다고 하는데 아직 안 읽어 봄


information(정보량)

사건에 대한 확률이 드물수록 정보량은 크다

$1 \over p(x)$


두 사건이 동시에 발생할 확률은 곱해준다.

${1 \over p(x)} \times {1 \over p(y)}$


로그를 씌우면 언더플로도 막고 곱셈을 덧셈으로 바꿀 수 있다.

최종정보량 information = $\log{1 \over p(x)} + \log{1 \over p(y)} = - \sum \log p(i)$


시사점

정보량은 확률의 역수이고, 계산 편의성을 위해 log를 취했다.

log를 취한 것은 계산 편의성을 위한 것도 있지만, 필요한 비트수를 계산한다는 의미 부여를 할 수도 있다($\log_2$를 쓴 경우)

예를 들어 로그를 씌우기전 정보량이 40억으로 나왔는데 여기에 $\log_2$를 씌우면 31.x가 나올것이다. 

이러면 이것의 의미를 이 정보를 전달하는데 필요한 비트수는 32비트이다. 이렇게 해석 하는 것..


entropy(정보량의 기댓값)

기대값 계산 공식 $E[X] = \sum_x xp(x)$

$E[f(X)] = \sum_x f(x)p(x)$

$E[-\log p(x)] = - \sum_x {{\log p(x)}p(x)}$

위 식에서 눈여겨 볼 부분은 p(x)가 두 번 쓰였는데.. 기대값 계산식을 들여다 보면 사건에 $-\log p(x)$가 쓰이고 확률분포에 $p(x)$가 쓰임


시사점

기대값은 일반적인 의미로 평균이라는 의미로 해석할 수 있고,

기대값을 구함으로써 개별 정보량에 비해서 평균적인 정보량(을 전송하는데 필요한 비트..로그이므로)이라는 관점으로 해석이 바뀐다.

예를 들어 위에서는 특정 정보를 전달하는데 필요한 비트수를 논했다면 여기서는 평균적으로  몇 비트가 필요하냐는 얘기로 바꿀 수 있다.


KL-divergence

두 확률간 상대적인 entropy를 뜻하며, cost function이 될 수 있다.

Q(x) 는 예측, P(x) 는 실제 확률이라고 하면, 이 값은 아래처럼 계산된다.

KL-divergence = 상대적인 엔트로피 = $E[-\log Q(x)] - E[-\log P(x)] $ 

(이때 확률 분포는 두 기대값 항 모두 P(x)를 사용)

 $=E[-\log Q(x)] - E[-\log P(x)] $


시사점

위에 식을 살펴보면 KL-divergence 식에서 확률분포는 P(x)로 고정한 상태에서 entropy의 차이를 구한다는 부분을 주목할 필요가 있다.

사실 왜 확률분포를 P(x)로 고정했느냐고 물어보면 이 건 아직 잘 모르겠다. KL-divergence의 정의와 관련된 부분이어서.. 원작자의 생각에 대한 공부가 좀 더 필요할듯


cross entropy

위의 KL-divergence로 cost function을 설계해보자

근데 이때 실제 확률인 P(x)는 상수취급하면

$E[-\log Q(x)] = -\sum \log q(x) p(x)$ 이 텀을 최소화 하는 문제로 변환된다. 

 그리고 이렇게 H(p, q)로 표현한다.


원래의 entropy 정의대로 하자면

$E[-\log Q(x)] = -\sum {{\log Q(x)}Q(x)}$ 이렇게 전개되는데.. 

예측 확률분포인 Q(x)대신 실제확률분포인 P(x)를 쓰면 

$E[-\log Q(x)] = -\sum {{\log Q(x)}P(x)}$ 이렇게 되고 entropy가 아닌 cross entropy가 되는 것


P(x)와 Q(x)가 동일하면 cross entropy = entropy가 되면서 최소값이 되고.. 서로 많이 다르면 그 값이 커지는 구조다.

KL-divergence의 정의상 내부에 cross-entropy텀이 들어감을 눈여겨 보자.


조금 헷갈릴 수 있는 부분은 p와 q 어떤걸 고정하냐 이런 부분인데..이건 그냥 넘어가자 ㅋ

(이 부분이 헷갈릴 수 있다는 것은 위키설명에도 나와있다.)


중요한건 P(x)와 Q(x) 두가지 확률분포가 있을 때, 이 둘간의 차이를 cross entropy 텀으로 구할 수 있고 이게 손실함수가 될 수 있다는 것이다.

P(x)나 Q(x)모두 더해서 1이 되어야 하는 확률분포가 되어야 쓸 수 있기 때문에..

실제 분포인 P(x)의 경우 one-hot encoding을 해서 합이 1을 맞춰주고,

예측 분포이자 네트웍의 아웃풋이 되는 Q(x)의 경우 softmax를 통해 합을 1로 맞춰준다는걸 이해하는게 중요하다.



예제

예제는 여기에 잘나와있는거 같아서 따로 안적음



log-likelihood와의 연관성

만약 확률 변수 X가 $ {\displaystyle X=(X_{1},X_{2},\cdots ,X_{n})}$의 꼴로 주어져 있으며, $X_{i}$이 확률 분포로 ${\displaystyle P_{i,\theta }(X_{i})}$를 가진다면 가능도 함수와 로그 가능도 함수는 다음과 같다.
$=-H(P, Q)$

위 식을 보자.. 가능도(=likelihood)는 결국 모든 독립시행 샘플을 곱한걸로 구할 수 있는데, 여기에 로그를 씌운 로그-가능도의 경우 corss entropy의 음수값과 같아짐을 볼 수 있다.

그래서 cross entropy를 최소화 하는 문제는 결국 log-likelihood를 최대화 하는 문제와 같아지게 된다.

반응형

'AI, ML > ML' 카테고리의 다른 글

Standardization vs normalization  (0) 2019.01.04
Gym  (0) 2018.11.07
credit assignment problem  (0) 2018.09.27
exploit - explore dilemma  (0) 2018.09.27
딥러닝 자체구현으로 XOR문제 풀어보기  (0) 2017.12.14

여기여기 내용 좋다.



해석1

가능도 L은 정의상, 조건부 확률 P(A|B)에서 A와 B를 뒤집은 P(B|A)로 정의된다고 생각하면 이해하기 편하다.

즉, $L(A|B) := P(B|A)$라는 것

좀 더 의미상 실용적으로 와 닿게 표현해보자면 

$L(모델|샘플) = P(샘플|모델)$ 요런식으로 해서 사용한다.

(후자는 보통 계산하기 쉽다는 점을 이용한다.)


예를들어 동전의 앞면이 두번 나왔을때 앞면이나올확률이 0.5일 가능도는

$L(pH=0.5 | HH) = P(HH | pH=0.5) = 0.5 \times 0.5 = 0.25$


앞면이 두 번 나왔는데 동전이 찌그러져서 앞면이나올확률이 0.3일 가능도는

$(LpH=0.3 | HH) = P(HH | pH=0.3) = 0.3 \times 0.3 = 0.09$


시사점

위에서보면 HH등 독립시행 시퀀스에 대해서 곱셈으로 처리하고 있다. 이에 따라 0에 급격하게 수렴하기 쉽고, log를 씌워서 log likelihood를 사용하게 되는 동기가 된다.


주의할점

위에서 앞면이 두번 나왔을 때 앞면이나올 확률이 0.5일 가능도가 0.25라고 해서 이게 25%라는 의미가 아니다.

베이즈 정리를 보면 $P(A|B) = P(B|A)P(A)/P(B)$ 니까.. $L(A|B) := P(B|A)$인 가능도 식과 비교해보면(앞에는 equal, 뒤에는 define임에 주의)  $P(A)/P(B)$텀이 다르다는 내용인듯 하다.

따라서 가능도는 확률이 아니고 모든 p에 대해서 가능도를 다 더했을때(적분했을때) 1.0이 되지도 않는다.

아래 해석2에서 확률분포의 y값이라고 설명은 했지만 잘 보면 아래는 x축이 사건 또는 확률변수 값이고 가능도에서의 x축은 p인점이 다르다. (헷갈리기 쉬움)



해석2

확률질량함수(이산) 또는 확률밀도함수(연속)에서 y값을 가능도라고 해석하면 편하다.

가능도 = 특정 사건이 일어날 가능성에 대한 수치

그러니까 이런생각을 해보자..

위처럼 이산확률에 대한 확률질량함수의 경우는 x값에 대해서 y값을 읽으면 그 사건이 일어날 확률이 된다.
즉 위에서 왼쪽걸 보면 주사위를 한 번 굴렸을 때 3이나올 확률은 1/6이고 오른쪽걸 보면 동전을 10번 던졌을 때 앞면의 횟수가 20번이 될 확률은 0이고 이런식이다.

그런데 연속사건의 경우는 질량밀도함수가 존재하긴 하지만 특정 x에 대한 발생확률은 항상 0이된다. (면적이 아니면 다 0이 됨)
위는 확률밀도 함수가 정규분포라고 가정하고 그린건데.. 특정 x값에 대해서 y값을 읽으면 확률이라고 할수는 없지만 가능도라고는 할 수 있게 된다(이게 바로 가능도의 정의니까)
다시말해서 x가 0일 확률은 0이지만, x가 0일 가능도는 0.4정도라는것..
이렇게 하면 확률은 아니지만 서로다른 x값에 대해서 그 크기를 비교할 수 있어서 유용하게 되는 것..


정리하면 다음과 같다.


예를들어 주사위를 3번던져 각각 1,3,6이 나올 확률은 얼마인가.. 라는 문제를 생각해보자.

$L(p=1/6 | 1,3,6) = P(1,3,6 | p=1/6) = 1/6 \times 1/6 \times 1/6 = 1/216$ 요런식으로 의식의 흐름이 전개되는 것..

물론 여기서 우리가 관심이 있고 변수로 설정한게 p라는점이 중요하다.

p가 바뀔때마다 P()도 바뀌고 L도 바뀐다.


여기서 p에 대한 L의 함수로 놓고 L이 최대가 되는 p를 구하는 문제로 세팅하면 바로 최대 가능도 추정(MLE) 문제가 된다.

반응형

먼저 여기와 여기, 그리고 여기를 보고 오는거 추천




해석1

가능도(likelyhood) L은 $L(모델|샘플):=P(샘플|모델)$로 정의되고 수학적 정의를 사용하면 $L(\theta|X) := P(X|\theta)$ 가 된다.

MLE는 L을 최대로 만드는 $\theta$를 찾는 문제로서 역시나 수학적으로 적어보면 다음과 같다.

$$\theta_{MLE} = \operatorname*{argmax}_\theta P(X|\theta)$$

X는 샘플 시퀀스를 의미하고 각각의 샘플 $x_i$로 표현하면 다음과 같다.

$$\theta_{MLE} = \operatorname*{argmax}_\theta \prod_i P(x_i|\theta)$$

근데 0보다 작은 확률을 여러번 곱하면 급하게 0으로 수렴하므로 log를 씌워서 보통 사용하게 된다.

그러면 곱셈이 덧셈으로 바뀌어서 다음처럼 된다.

$$\theta_{MLE} = \operatorname*{argmax}_\theta \sum_i \log P(x_i|\theta)$$

이제 위의 식을 가지고 gradient descent 등으로 최적의 $\theta$를 찾는 식으로 활용한다.

해석2

보통은 확률P는 상수로 주어지고 이를 통한 계산을 하게되는데.. 거꾸로 P가 변수이고 P를 추정할 수 있는 샘플들만 주어질때 MLE문제가 된다.

즉, MLE문제에서 주어지는값은 표본들이요, 우리가 구하고자 하는 것은 P가 된다.

이때 P를 x축에 놓고 y축에 무언가를 설정한다음에 다음과 같이 y가 최대가 되는 p=x를 구하면 좋은데..

이때 y축에 놓는 값을 가능도(likelyhood)라고 한다.

그리고 위 그래프에서 가능도가 가장 큰 극점을 찾는걸 최대우도추정(MLE)라고 한다.


해석3

실제로는 p를 정규분포로 놓고 L을 극대화 하는 $\mu$와 $\sigma$를 찾는 식으로 많이 쓰이기 때문에 이에 대한 설명을 해보자.

해석1에서는 x축에 바로 p를 놓았지만 위처럼 p가 정규분포를 따른다고 가정하면 $\mu$와 $\sigma$에 대한 가능도 L의 다변수 함수로 모델링 할 수 있게 된다.

예를 들어 키를 5번 측정해서 178, 179, 180, 181, 182가 나왔을때.. 이를 가장 잘 표현하는 정규분포 $\mu$와 $\sigma$는 무얼까 하는 문제가 되는 식이다.

다음은 MLE로 모델링하고 구하는 과정이다.

1. 실제 모델이 정규분포를 따른다고 가정(이제 $\mu$와 $\sigma$를 구하는 문제로 바뀌었다.)

2. *$L(모델|샘플) = P(샘플|모델\mu, \sigma)$의 최대값을 구하는 문제가 되었다.

3. 특정 키에 대한 가능도, 즉 정규분포는 $\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$이다.

4. 여기에 5개의 독립시행 샘플을 넣고 가능도를 구하면 

$\frac{1}{\sqrt{2\pi}\sigma^2}e^{-\frac{(178-\mu)^2}{2\sigma^2}}\times\frac{1}{\sqrt{2\pi}\sigma^2}e^{-\frac{(179-\mu)^2}{2\sigma^2}}\times\frac{1}{\sqrt{2\pi}\sigma^2}e^{-\frac{(180-\mu)^2}{2\sigma^2}}\times\frac{1}{\sqrt{2\pi}\sigma^2}e^{-\frac{(181-\mu)^2}{2\sigma^2}}\times\frac{1}{\sqrt{2\pi}\sigma^2}e^{-\frac{(182-\mu)^2}{2\sigma^2}}$

이렇게 된다.

이를 최대화 하는 $\mu$를 구해보면 180이 나온다.


* 여기서 사실은 L(모델|샘플).. 즉 주어진 샘플에 대해 가장 잘 설명하는 모델을 찾는 건데, 이 모델이 실제 전체 샘플에 대해 가장 좋은 모델인지는 좀 더 고민이 필요하다. 왜냐하면 만약에 주어진 샘플 들이 우연히도 굉장히 표준편차가 큰 것들이었다고 한다면, 이러한 샘플로 추정된 모델은 향후예측시 정답과 괴리가 있을것이다. 따라서 샘플들도 실제 향후 정답과 유사한 $\mu$와 $\sigma$를 가진다는 가정이 들어가게 되는데, 샘플수가 많아질수록 타당하다고 할 수 있을것이다.


아직 이해 안되는점

Q.$L(\theta|X) := P(X|\theta)$ 이렇게 정의한다고 해서 말이 되는 이유는 뭘까?

A. 여기를 보면 베이즈 정리를 사용해서 위처럼 정의안하고 하는 방법이 나오고, 그 이름이 MLE가 아니라 MAP임을 알 수 있다 .MLE는 MAP의 특수한 경우인것


위에서 $\sigma$도 자동으로 계산되나? 5번 측정한거의 $\sigma$를 쓰면 될거 같다는 생각은 드는데 정확히 모르겠다.


반응형

'수학' 카테고리의 다른 글

3D그래픽스 - 회전(Rotation)  (0) 2019.01.09
likelihood(가능도 = 우도)  (0) 2018.10.02
베이즈 정리(Bayes' theorem)  (0) 2018.09.27
독립사건, 독립시행  (0) 2018.09.27
조건부 확률  (0) 2018.09.27

먼저 여기여기를 보고 오는거 추천


조건부 확률의 정의에 의해서..

$P(A|B) = {P(A \cap B) \over P(B)}$

이렇게 되는데..


위 식을 $P(A \cap B)$에 대해서 다시 정리하면 $P(A \cap B) = P(A|B)P(B)$가 된다.

(A와 B가 독립이라면 $P(A \cap B) = P(A)P(B)$ 이렇게 간단하게 되지만.. 문제는 항상 그렇지 않다는것)

A와 B를 바꾸면 $P(A \cap B) = P(B|A)P(A)$

따라서

$P(A|B) = {P(A \cap B) \over P(B)} = {{P(B|A)P(A)} \over P(B)}$가 되고 이를 베이즈 정리라고 부른다.


유도자체는 참 쉬운데, 예제를 통해 직관적으로 파악하기는 어려운 편으로.. 한 번 예를 들어보자.

(아례 예제들은 여기서 가져왔다.)


예제1

두개의 노트북 조립라인을 가진 공장에서 생산된 1,000대씩의 노트북들을 같은 화물 창고에 쌓아 놓았다. 각각의 조립라인을 정밀하게 조사하여, 1번 조립라인에서 생산된 노트북의 10%가 불량이고, 2번 조립라인에서 생산된 노트북의 15%가 불량임을 알았다. 화물 창고의 노트북을 하나 꺼내 조사한 결과 불량이었을 때, 이 노트북이 1번 조립라인에서 생산되었을 확률은?


사건 1 = 1번공장에서 노트북이 나옴

사건 2 = 2번공장에서 노트북이 나옴

사건 불량 = 노트북이 불량임

으로 정의하면

문제에서 주어진 값들은 P(불량|1)=0.1, P(불량|2)=0.15 이다.

또한 P(1) = P(2) = 0.5임을 유추할 수 있다.


구하고자 하는 값은 P(1|불량) 이므로

베이즈 정리를 적용하면

$P(1|불량) = P(불량|1)P(1) / P(불량)$인데, 여기서 문제가 생겼다. $P(불량)$은 주어지지 않은 값이기 때문 ㅋ

근데 조금 까다롭지만 곰곰히 생각해보면 $P(불량) = P(불량 \cap 1) + P(불량 \cap 2)$임을 유추할 수 있다.


따라서 

$P(1|불량) = P(불량|1)P(1) / P(불량) = {{P(불량|1)P(1)} \over {P(불량 \cap 1) + P(불량 \cap 2)}} = {{P(불량|1)P(1)} \over {P(불량|1)P(1) + P(불량|2)P(2)}}$

가 되고,

P(1) = P(2) = 0.5이므로 약분시키고, 위에 알려진 숫자들을 다 대입하면, 

$P(1|불량) = {{P(불량|1)} \over {P(불량|1) + P(불량|2)}} = {0.1 \over {0.1 \times 0.15}} = 0.4$


답은 40%가 된다.



사후확률


- P(A) : A의 사전확률 (a prioi). 어떠한 사건에 대한 정보가 없을 때의 확률.

- P(A|B) : B에 대한 A의 사후확률 (posteriori). B라는 정보가 주어졌을 때의 확률.


반응형

'수학' 카테고리의 다른 글

likelihood(가능도 = 우도)  (0) 2018.10.02
MLE, 최대우도추정(Maximum Likelihood Estimation)  (0) 2018.09.27
독립사건, 독립시행  (0) 2018.09.27
조건부 확률  (0) 2018.09.27
조합  (0) 2017.11.08

+ Recent posts