8 1 Generative vs Discriminative Models

https://youtu.be/YQClUDd9ff4

(ML 1.5) Generative vs discriminative models

https://youtu.be/oTtow2Ui8vg

image

7 2018 05 09 Data Science Generative Vs Discriminative Models

https://youtu.be/gwV7spVO5Z0

image

generative에서는 일단 확률밀도함수를 구한다. 그리고 이를 이용해서 각 지점의 확률값을 얻게 된다.

image

discriminative는 예상값과 실제값과의 손실을 비교해서 가장 손실이 적은 모델을 찾아간다.

image

Machine Learning interview questions-what is difference between generative and discriminative model

https://youtu.be/uhRPeyzTZ9o

image

https://m.blog.naver.com/PostView.nhn?blogId=2feelus&logNo=221078340870&proxyReferer=https%3A%2F%2Fwww.google.com%2F

Discriminative Learning Algorithms

머신러닝의  분류 알고리듬을 다음과 같이 풀어서 설명할수 있다.

어떤 입력값(input) x가 주어졌을때 그 결과값(label)이 y일 확률을 알아내는 것

=>  p( y | x )

=> x라는 값들이 충분히 의미있는 데이터일때 그 데이터를 기반으로  y가 0일지 1일지를 확률 적으로 예측

=> 결과적으로 구분선을 찾아내는 것이 중요하다.

이렇게 입력값과 출력값을 직접적으로 연결시키는 방식을 Discriminative(변별) Algorithm이라고 한다.

Discriminative방식의 머신러닝은 다음의 과정으로 이루어진다.

1. 특정 입력값X에 대한 조건부 확률 분포를(Conditional Probability Distribution) 만들어낸다.

=> 조건부 확룰 분포는 입력값 x가 특정 값이라는 조건으로 주어질때의 Y값의 분포도를 기술하는 데이터형식이다.

2. 조건부 확률 분포에 근거해서 x input과 y label(output)로 벡터를 만들어낸다.

3. x값들의 성질(결과값, 즉 y값)이 0인 것 들과 1인 것들을 잘 구분할수 있는 선(직선 혹은 곡선, decision boundary)을 만들어낸다.

4. 만들어진 선을 기반으로 새로운 데이터(x’)가 입력되었을때 선으로부터 음 혹은 양의 방향으로의 거리를 재어 확률을 구한다.

그림으로 살펴보면 다음과 같다.( 모든 원들을 x를 의미, 노랑/파랑은 y=0/y=1을 의미, 곡선은 구분선을 의미, 세모는 새로운 입력을, distant는 선분으로부터 음/양의 거리를 의미)

대표적인 방식이 Logistic Regression이다.  그 외에도 Conditional Random Field, Support Vector Machine, Linear Regression, Neural Network 등의 알고리즘들이 있다.

장점:

데이터가 충분할경우 좋은 성능을 보여준다.

단점:

데이터를 구분하는데 목표를 두고 있으므로, 데이터가 실제 어떤 모습인지 본질을 이해하기는 어렵다.

Generative Learning Algorithms

그런데 이러한 Discriminative 방식과는 다른 방식의 분류 알고리듬이 있다. 구분해내는 것을 넘어서 분류 카테고리에 맞는 데이터를 생성해내는 방식이다.

생성되는 입력과 결과 데이터는 분류 클래스별로 특정한 통계적 분포를 따른다고 가정하는 방식이다.

다음과 같이 풀어서 설명할수 있다.

=>  입력값 x와 결과값(라벨)y가 주어질때,  이들은 일정한 분포 규칙속에서 존재한다. 그 분포 규칙은 분류 클래스마다 다르다.

=> 이러한 분포 규칙은 Normal Distribution등의 통계적인 방법론을 따른다.

=>  분포규칙은 수식적으로는 결합 확률 분포 – p( x , y)  로 표현한다. ( 결합 확률 분포- joint probability distribution )

=> 실제로 분류에  필요한 사후확률 p ( y | x)은 p(x,y)로 부터 유도할수 있다. (변경과정은 아래 부록1에 )

=> 핵심은 카테고리별로  분포규칙을 표현하는  확률 분포 모델의 파라미터들을 찾아 내는 것이다.

이렇게 입력값과 출력값 사이에 분포규칙의 개념을 적용한 방식을 Generative(생성) Algorithm이라고 한다.

Generative방식의 머신러닝은 다음의 과정으로 이루어진다.

1. 주어진 데이터와 결과값을 이용해 모든 x와 모든 y에 대해 결합 확률 분포 (Joint Probability Distribution)를 만든다.

2. 결합확률 분포로 부터 어떤 확률 분포모델이 데이터 분포모델에 적한한지 측정(estimation)한다. (어려운 과정)

3. 측정해낸 확룰 분포모델을 기반으로 사후확률을 알아낼수 있다.

p(y|x) =  p(x|y) * p(y) / p(x)

사후 확률 = 결합확률(p(x,y))  / p(x) –

4.즉  x가 주어질 경우, y의 확률을 예측하려면,  x,y에 대한 결합확률분포공식(모델)과 x의 확률(경계확률)을 알면 구할 수 있다.

그림으로 살펴보면 다음과 같다. (작은 원들을 x를 의미, 노랑/파랑은 y=0/y=1을 의미, 세모는 새로운 입력을, 큰 타원은 확률 분포를 의미)

대표적인 방식은 Naive Bayes가 있으며 이외에도 Gaussian discriminant Analysis(GDA), Gaussian Mixture Model(GMM), Hidden Markov Model(HMM), Latent Dirichlet Allocation(LDA), Restricted Boltzmann machine(RBM), Generative Adversarial Network(GAN)등이 있다.

Naive Bayes의 경우에도 주어진 관측데이터 결합확률 분포를 통해 확률모델로 만들어내기때문에 Generative Model이다.

장점:

데이터 셋이 적어도 할만하다.

데이터 자체의 특성을 파악하기에 좋다.

데이터를 생성해 내어 새로운 결과물을 얻어낼수 있다.

단점:

데이터가 많은 경우, Discriminative에 비해 성능이 떨어 질수 있다.

결합확률분포표 와 조건부확률분포표

아래는 입력값 X가 0 ~ 2에 걸쳐서 이산분포하고, 결과값 Y가 0~2에 결쳐서 이산분포할때 의 결합확률과 조건부 확률을 비교한 것이다.

문제를 통해서 결합확률과 조건부확률간의 비교를 해보자.

결합확률분포표(Joint Probability Distribution)


조건부확률분포표(Conditional Probability Distribution)

X가 1로 주어졌을때, Y가 1일확률은 0.8로서 다른 Y class들(0,2)에 비해서 가장확률이 높다.  (checksum이 0.30에서 1.0으로 바뀐것을 확인)

즉 x가 1일때 예측값은 1이다. 수식은 다음과 같다. argmax는 입력값중에 가장 큰 값을 선택하라는 의미이다.

class = argmax( P(Y|X=1) ) = 1

부록1) 베이즈룰에 따라 결합확률에서 사후확률로 변경되는 과정

=> p(x,y) = p(y|x) * p(x)  베이즈룰에 따라, 결합확률은  x(input data)가 y(label) 일때의 사후 확률(posterior)과  x의 경계확률의 곱으로 표현할수 있다.

=> p(x,y) = p(x|y) * p(y)  베이즈룰에 따라, 결합확률은  y(label)가 주어졌을때  x(input) 일때의 가능도(likelihood)와  y의 사전확률(prior)의 곱으로 표현할수 있다.

=> p(x,y) = p(y|x) * p(x) = p(x|y) * p(y) 라는 베이즈 확률 공식에 따라, p(y|x) =   p(x|y) * p(y) / p(x) 로 표현할수 있다.

=> p(y|x) = p(x|y) * p(y) / p(x) .

즉 입력값 x가 주어질때의 사후확률은 라벨 y 가 입력값 x 일 경우의 가능도와 라벨 y 의 사전확률을 곱한것을 x 일경우의 모든 경계확률로 나눈것이다.

참고)

Open AI의 Generative Model – “What I Cannot Create, I do not understand”(만들지 못하면 이해하지 못한거야) – https://blog.openai.com/generative-models/

Andrew Ng의 표준분포를 이용한 Generative Learning algorithms  – http://cs229.stanford.edu/notes/cs229-notes2.pdf

Wikipedia 베이즈 확률론 –https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%A6%88_%ED%99%95%EB%A5%A0%EB%A1%A0

결합확률분포표과 조건부 확률분포표의 계산 – https://onlinecourses.science.psu.edu/stat414/node/116

의미적 의존 링크 토픽 모델을 이용한 생물학 약어 중의성 해소 – http://kiise.or.kr/e_journal/2014/9/JOK/pdf/07.pdf

image
image

linear regression은 기본적으로 위의 조건을 만족한다고 가정하고 시작한다. 즉 위의 성질을 가지는 경우에 linear regression 알고리즘을 사용할수 있다.

DUMMY VARIABLES

image

category를 나누는 variable이 있는 경우 각 category value별로 칼럼을 추가해 준다. 이강의경우는 두개의 category values가 있는데 이중하나만 d1으로 사용해주고 다른 하나는 constant b0에서 처리하게 했다.

DUMMY VARIABLE TRAP

image

dummy variable의 갯수( 하나의 category내 존재하는 값의 종류 갯수 )에서 1을 뺀 갯수만큼만 추가해준다. 예를 들어 50개주의 이름이라면 49개만 만든다. 또 다른 종류의 카테고리가 존재한다면 여기에도 똑같은 규칙을 적용한다. 

BUILDING A MODEL 

( 어떤 방법으로 model을 만들지에 대한 방법론 또한 어떻게 중요하지 않는 feature를 알고리즘에서 제거하는지에 대한 방법로 )

image

때때로 bidirectional elimination만을 stepwise regression이라고 말하기도 한다. 

image

모든 주어진 feature들을 이용해서 만드는 경우. 주어진 상황이 그렇게 해야만 하거나 이미 알고있는 정보에 따르면 모든 feature가 중요하게 작용한다는 판단이 있는경우, 또 backward elimination작업의 전단계 준비작업으로서 사용되기도 한다.

아래그림들에서 fit이라는 용어가 나오는데 거칠게 이해하면 training이라고 이해 할수 있다. 참조) https://stackoverflow.com/questions/45704226/what-does-fit-method-in-scikit-learn-do

image

참고사항)

p value 가 커지면 그 항목은 결과값에 별 영향을 끼치지 않는다고( not significant ) 보고 feature에서 제외한다. 

https://youtu.be/128yz0OCG-I?t=190

https://www.quora.com/Do-machine-learning-professionals-care-about-p-values

image

image

처음 시작은 feature 하나로 시작한다. 그리고 가장 낮은 p value를 가지는 feature를 선택한다. 그리고 여기에 다른 feature를 하나더 덧붙인다. 또 가장 낮은 p value를 가지는 알고리즘을 택하고 여기하 하나 더 feature를 덧붙인다.

image

image

모든 경우의 수에 해당하는 알고리즘을 테스트해서 결정하는 방법이다.

실제 CODING 예시 – multiple linear regression

Dummy variable trap을 방지하기 위한 작업. 이 강의 예시에서 dummy variable 3개가 데이터셑 앞에 생기는데 맨 앞 칼럼은 제거하고 2개만 인정하는 과정이다. 보통 이렇게 하지 않아도 라이브러리가 알아서 dummy variable trap방지를 위한 작업을 하는데 여기서는 교육목적으로 다시 보여주고 있다.

image
image
image

multiple linear regression도 single linear regression과 과정은 대부분 똑같다. 라이브러리가 차이나는 부분을 스스로 많이 커버한다.

image

 test set 의 예상결과를 얻는 과정이다. multiple linear regression도 single linear regression과 과정은 똑같다. 다만 multiple linear regression의 경우 다차원의 데이터이므로 시각적으로 그래프로 보여주기는 힘들다.

Backward elimination

사전준비 작업

image

backward elimination을 위한 라이브러리를 import한다.

기존 데이터셑에는 없던 x0 feature값은 데이터 셑 맨 앞에 추가하는 작업이다. x0 는 1 이며 이는 예상값을 계산하는데 constant와 곱해져서 더해진다. append를 통해 칼럼을 더한다. 맨앞에 x0의 값이 오게끔하기 위해 1로만 이루어진 1열 칼럼을 만들고 여기에 기존 데이터셑을 더한다. ones method는 1만 들어있는 50줄 1칼럼 matrix를 만든다.  

image

step2 를 위한 작업은 아래와 같다.

image

이전까지 사용했던 sklearn의 LinearRegression 대신 OLS를 사용했다. OLS는 ordinary least squares 이며 linear regression과 같은 의미로 사용되곤한다.

X[: , [0, 1, 2, 3, 4, 5]] 는 모든행, 0 1 2 3 4 5 칼럼을 가지는 matrix가 된다. 나중에 p value가 특정값보다 큰경우 해당 칼럼을 제거할 것이다. 

OLS obj의 summary()를 이용 추가정보를 출력 한다. 그중 아래와 같이 p value를 확인 가장 높은 p value ( 연관성이 떨어지는 )를 가지는 칼럼을 확인한다. 그 칼럼을 삭제할 것이다.

기존 코드에서 연관성이 떨어지는 칼럼을 삭제하고 새로 model을 만든다. 

image
image

linear regression은 기본적으로 위의 조건을 만족한다고 가정하고 시작한다. 즉 위의 성질을 가지는 경우에 linear regression 알고리즘을 사용할수 있다.

DUMMY VARIABLES

image

category를 나누는 variable이 있는 경우 각 category value별로 칼럼을 추가해 준다. 이강의경우는 두개의 category values가 있는데 이중하나만 d1으로 사용해주고 다른 하나는 constant b0에서 처리하게 했다.

DUMMY VARIABLE TRAP

image

dummy variable의 갯수( 하나의 category내 존재하는 값의 종류 갯수 )에서 1을 뺀 갯수만큼만 추가해준다. 예를 들어 50개주의 이름이라면 49개만 만든다. 또 다른 종류의 카테고리가 존재한다면 여기에도 똑같은 규칙을 적용한다. 

BUILDING A MODEL 

( 어떤 방법으로 model을 만들지에 대한 방법론 또한 어떻게 중요하지 않는 feature를 알고리즘에서 제거하는지에 대한 방법로 )

image

때때로 bidirectional elimination만을 stepwise regression이라고 말하기도 한다. 

image

모든 주어진 feature들을 이용해서 만드는 경우. 주어진 상황이 그렇게 해야만 하거나 이미 알고있는 정보에 따르면 모든 feature가 중요하게 작용한다는 판단이 있는경우, 또 backward elimination작업의 전단계 준비작업으로서 사용되기도 한다.

아래그림들에서 fit이라는 용어가 나오는데 거칠게 이해하면 training이라고 이해 할수 있다. 참조) https://stackoverflow.com/questions/45704226/what-does-fit-method-in-scikit-learn-do

image

참고사항)

p value 가 커지면 그 항목은 결과값에 별 영향을 끼치지 않는다고( not significant ) 보고 feature에서 제외한다. 

https://youtu.be/128yz0OCG-I?t=190

https://www.quora.com/Do-machine-learning-professionals-care-about-p-values

image

image

처음 시작은 feature 하나로 시작한다. 그리고 가장 낮은 p value를 가지는 feature를 선택한다. 그리고 여기에 다른 feature를 하나더 덧붙인다. 또 가장 낮은 p value를 가지는 알고리즘을 택하고 여기하 하나 더 feature를 덧붙인다.

image

image

모든 경우의 수에 해당하는 알고리즘을 테스트해서 결정하는 방법이다.

실제 CODING 예시 – multiple linear regression

Dummy variable trap을 방지하기 위한 작업. 이 강의 예시에서 dummy variable 3개가 데이터셑 앞에 생기는데 맨 앞 칼럼은 제거하고 2개만 인정하는 과정이다. 보통 이렇게 하지 않아도 라이브러리가 알아서 dummy variable trap방지를 위한 작업을 하는데 여기서는 교육목적으로 다시 보여주고 있다.

image
image
image

multiple linear regression도 single linear regression과 과정은 대부분 똑같다. 라이브러리가 차이나는 부분을 스스로 많이 커버한다.

image

 test set 의 예상결과를 얻는 과정이다. multiple linear regression도 single linear regression과 과정은 똑같다. 다만 multiple linear regression의 경우 다차원의 데이터이므로 시각적으로 그래프로 보여주기는 힘들다.

Backward elimination

사전준비 작업

image

backward elimination을 위한 라이브러리를 import한다.

기존 데이터셑에는 없던 x0 feature값은 데이터 셑 맨 앞에 추가하는 작업이다. x0 는 1 이며 이는 예상값을 계산하는데 constant와 곱해져서 더해진다. append를 통해 칼럼을 더한다. 맨앞에 x0의 값이 오게끔하기 위해 1로만 이루어진 1열 칼럼을 만들고 여기에 기존 데이터셑을 더한다. ones method는 1만 들어있는 50줄 1칼럼 matrix를 만든다.  

image

step2 를 위한 작업은 아래와 같다.

image

이전까지 사용했던 sklearn의 LinearRegression 대신 OLS를 사용했다. OLS는 ordinary least squares 이며 linear regression과 같은 의미로 사용되곤한다.

X[: , [0, 1, 2, 3, 4, 5]] 는 모든행, 0 1 2 3 4 5 칼럼을 가지는 matrix가 된다. 나중에 p value가 특정값보다 큰경우 해당 칼럼을 제거할 것이다. 

OLS obj의 summary()를 이용 추가정보를 출력 한다. 그중 아래와 같이 p value를 확인 가장 높은 p value ( 연관성이 떨어지는 )를 가지는 칼럼을 확인한다. 그 칼럼을 삭제할 것이다.

기존 코드에서 연관성이 떨어지는 칼럼을 삭제하고 새로 model을 만든다. 

Swift: FB Messenger – Chat Bubbles With Tails! (Ep 6)

my review point is 8/10

https://youtu.be/kR9cf_K_9Tk?t=7m32s   특정 core data model에 맞게 만들어진 function들이 있고 model에 속성을 추가 한경우 기존의 함수들은 새로 추가된 속성에 대한 파라미터 정의가 되어있지 않아 문제가 생기는데 이를 기본값으로 정의함으로써 우회하는 방법

https://youtu.be/kR9cf_K_9Tk?t=16m5s   채팅앱에서 사용되는 말풍선의 꼬리부분 만드는 방법

my review points is 10/10

mvc로 화일 구별

model 구현

https://youtu.be/b9shcZzPbp4?t=12m28s   cell 사이에 구별선 만들기 (brian이 만든 class내 기능이용)