케라스 Mnist 샘플 보려면 여기


반응형

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

랜덤 포레스트(random forest)  (1) 2023.10.15
윈도우 환경에서 ML환경 구축  (0) 2022.03.09
Bayesian Online Changepoint Detection 논문리딩  (0) 2019.08.21
부스팅(boosting)  (0) 2019.05.28
Word2Vec  (0) 2019.04.24

논문: https://arxiv.org/pdf/0710.3742.pdf


첫번째 핵심이 되는 수식은 다음과 같다.

결합확률 $$P(x_{t+1} \cap x_{1:t}) = P(x_{t+1}|x_{1:t})P(x_{1:t}) = \sum_{r_t}P(x_{t+1}|r_t, x_t^{(r)})P(r_t|x_{1:t})$$

해석해보면.. 1부터 t까지의 샘플을 보고 t+1의 샘플을 예측하는 것(확률 분포를 구하는것)

대략 아래 그림에서 층별로 잘라내서 분리해서 더한걸로 어느정도 이해가 된다.

중간식에서 오른쪽 식으로 변하는 수학적 디테일이 좀 불명확하긴 함

근데 change point에 대한 확률이 아니라 $x_{t+1}$자체를 예측하는거임? > $x_{1:t}$를 보고 $r_t$를 예측하는 식이 더 중요하고 곧 나옴 ㅋ


run length: time since the last changepoint


$r_t$: length of the current run at time t. 

아래를 보면 $r_t$개념은 명확해진다. $r_2=1, r_3=2, r_5=0, r_6=1$이런식인것


$x_t^{(r)}$: set of observations associated with the run $r_t$  .. 흠 정의가 좀 모호하네

이 논문에서는 $x_t^{(r_t)}$ denotes the most recent data corresponding to the run $r_t$라고 돼있네.

즉 $r_{13}$에 대한 $x_t^{(r_13)} = \{x_{11}, x_{12}, x_{13}\}$이라는것 같다.



조건부 확률공식 $P(A|B)=\frac{P(A, B)}{P(B)}$ 에 따라 가장 핵심이 되는 수식은 다음과 같다.

$$P(r_t|x_{1:t}) = \frac{P(r_t,x_{1:t})}{P(x_{1:t})}$$

그다음에 이걸 $P(r_t, x_{1:t})$에 대해서 정리하면서 r-1과 r에 대한 recursive form으로 바꿔보면 다음과 같이 된다.

(수학적 디테일은 살짝 스킵하자)


반응형

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

윈도우 환경에서 ML환경 구축  (0) 2022.03.09
케라스(Keras)  (0) 2020.04.13
부스팅(boosting)  (0) 2019.05.28
Word2Vec  (0) 2019.04.24
weka  (0) 2019.02.28

여기여기, 여기 참조함


bagging(= Bootstrap Aggregating)

bagging은 decision tree쪽에서 활용되는 기술이며 bootstrapping을 통해 강한 오버피팅모델 여러개를 만들어 correlation을 줄인다음 앙상블 하는 기술


bootstrap sampling(중복을 허용하여 전체가 아닌 부분을 샘플링하는 것) 을 통해 여러개 모델을 병행적으로 동시에 학습시키고 평균을 취하는 것(voting)


아래처럼 acc가 높은 상황에서 모델별로 오동작 하는 영역이 다르면 최상의 결과를 가져옴

하지만 아래처럼 acc가 낮거나 해서 오동작 하는 영역이 겹칠경우 voting에 의한 효율이 떨어지게 됨

Boosting

여러 모델을 병행적으로 동시에 학습하는게 아니라 하나를 학습하고(h1), 거기서 오동작하는 영역을 위주로 다른 하나의 모델을 학습하고(h2), h1과 h2가 결과가 다른 곳을 중심으로 새로운 모델을 학습하고(h3) 이런식으로 순차적으로 진행하는 방식


error rate가 50%에 가까운(49%등) weak classifier를 사용하는 것 가능(!!)



반응형

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

케라스(Keras)  (0) 2020.04.13
Bayesian Online Changepoint Detection 논문리딩  (0) 2019.08.21
Word2Vec  (0) 2019.04.24
weka  (0) 2019.02.28
1D CNN  (0) 2019.02.26

참고한 링크는 여기


Word2Vec이란 무엇인가

말 그대로 단어를 벡터로 바꿔주는 알고리즘. 뉴럴 네트워크를 사용함.

단어를 벡터로 바꾸는 가장 간단한 방법은 ont-hot encoding 인데, 이걸로 하면 단어간 유사성을 계산할 수 없는 단점이 존재.


CBOW, Skip-gram

2가징 방법론이 있는데

CBOW(Continuous Bag of Words)는 주변에 있는 단어들을 가지고, 중간에 있는 단어들을 예측하는 방법.

Skip-gram은 반대로 중간에 있는 단어로 주변 단어들을 예측하는 방법


CBOW

Word2Vec의 입력은 모두 one-hot vector가 되어야 한다. 아래 그림 두 장을 보면 대체로 이해가 된다.

하나의 hidden layer만 사용하기 때문에 deep하지 않음에 주목.

hidden layer의 노드 개수가 결과적으로 인코딩 되는 벡터의 차원수가 된다.




반응형

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

Bayesian Online Changepoint Detection 논문리딩  (0) 2019.08.21
부스팅(boosting)  (0) 2019.05.28
weka  (0) 2019.02.28
1D CNN  (0) 2019.02.26
의사결정나무(Decision Tree)  (0) 2019.02.07

facebook에서 나온 ML forecasting engine인것 같다.

여기가 홈페이지 이며 분석 해서 정리할 예정이다.


여기를 보면 kaggle 문제를 prophet을 이용해서 푼 kernel을 볼 수 있다.

(해설이 자세한 편이라 따라가면서 해보는 것도 좋을 듯 하다.)


구글 colab 에서는 별다른 설정없이 아래와 같이 바로 import 가능한걸 확인


반응형

캐글에 실제로 도전해 보는건 처음이다.

도전하려고 하는 것은 이 문제 이며, 간단한(?) classification으로 보여서 해보려고 한다.

(나중에 알았지만 이 문제는 예측할때 여러 class를 동시에 낼 수 있는 multi-class문제여서 생각보다는 복잡했다.)


환경설정

캐글에 로그인한 다음 competition에 join하고 new kernel하면 ipython notebook 환경으로 들어갈 수가 있다.

이 글에 사용된 kernel은 여기를 눌러서 확인

실행하면 위처럼 input 파일에 대한 정보를 볼 수 있도록 미리 작성된 코드가 있다.

데이터 둘러보기

train data 열어서 처음 5줄 살펴보고, 컬럼들 어떻게 생겼는지, 총 몇 row, 몇 column 인지 살펴보기



간단한 알고리즘 돌려보기

input, output 분리하고,
data pre-processing 해주고,


간단한 10fold cross validation 알고리즘을 통한 성능 확인하기(train data only)

제출하기


test data를 사용해서 prediction을 만들고 (test data에는 label이 없다),
제공된 sampleSubmission.csv를 변형하여 임의의 csv로 저장하고 (내 경우는 submit.csv로 함)

(위에서 csv로 저장할때 index=False를 꼭해야함. 안그러면 맨 왼쪽에 원치않는 컬럼이 하나 더 들어감)


상단에 있는 commit 누르고, 하단에 저장한 submit.csv를 제출하기 누르면 채점 해주는 구조



제출하고 나면 아래처럼 결과를 보여줌



반응형

여기참조해서 작성했음을 밝힙니다.


Weka란

ML하는데 있어서 기본 적인 툴, Java로 작성되어 있으며 오픈소스이다(여기서 다운로드)

다양한 종류의 ML알고리즘을 제공하며 간단하게 유명한 알고리즘들을 빠르게 돌려보고 싶을때 유용하다(앙상블 알고리즘 돌려보는데도 좋다)

단 커스터마이징이 커맨드라인 옵션 수준이라 나만의 모델을 만드는데 적합하지는 않은것 같다.


data입출력에 CSV와 유사한 ARFF포맷 사용

weka 실행 후 Explorer 누르고 Open file 누르고 설치폴더 data 안에 들어가면 기본적으로 제공되는 많은 arff 파일들을 살펴볼 수 있다.

추가적인 데이터는 여기서 살펴보면 좋다.

데이터 자체를 살펴보고 싶으면 Edit버튼을 누르고 보면 된다.

처음에 둘러보기 좋은 데이터는 iris 추천.. 꽃잎 length랑 width가 주어지고 class로 세가지 iris종류가 label되어 있는 자료이다.


Weka로 할 수 있는 것들

특정 인풋컬럼(feature)에 대해서 노말라이즈하기, 비주얼라이즈하기


Select Attributes 탭에서 feature selection 하기 (유의미한 컬럼 순으로 나열해서 필요없는 컬럼 제거하거나 할 수 있다)

Attribute Evaluator는 CorrelationAttributeEval이나 InfoGainAttributeEval 이런거 고르면 된다.


classification하기.. 

Classify탭에서 알고리즘 고르고 Start 버튼 누르면 된다. baseline performance는 ZeroR로 하면 좋다고 한다.(Zero Rule)

Zero Rule 알고리즘은 단순히 개수가 많은쪽 class로 몰빵해서 예측하는 알고리즘이라고 함

(classification이 아닌 regression의 경우는 평균값으로 예측한다고 함)

5 Top algorithms that you can use for classification include:

- Logistic Regression (functions.Logistic).

- Naive Bayes (bayes.NaiveBayes).

- k-Nearest Neighbors (lazy.IBk).

- Classification and Regression Trees (trees.REPTree).

- Support Vector Machines (functions.SMO).


regression하기..

Weka는 기본적으로 Classification에 강한 툴이지만 regression 알고리즘 및 샘플 데이터도 어느정도 제공한다.

여기서 regression용 추가 데이터 다운로드(jar파일이라 압축해제해야 arff파일들 나온다)

classfication과 마찬가지로 ZeroR로 베이스라인 성능 확인하고(Root mean squared error 등) 다음 알고리즘들 돌려보면 된다.

5 Top algorithms that you can use for regression include:

- Linear Regression (functions.LinearRegression).

- Support Vector Regression (functions.SMOReg).

- k-Nearest Neighbors (lazy.IBk).

- Classification and Regression Trees (trees.REPTree).

- Artificial Neural Network (functions.MultilayerPerceptron).


Ensemble하기..(classification, regression 둘 다 지원)

앙상블은 일종의 메타 알고리즘이라 어떤걸 sub알고리즘으로 사용할지 커맨드라인에서 지정해줘야함에 주의.. 기본적으로는 ZeroR로 세팅된 경우가 많아서 더욱 그렇다.

5 Top ensemble algorithms that you can use include:

- Bagging (meta.Bagging).

- Random Forest (trees.RandomForest).

- AdaBoost (meta.AdaBoost).

- Voting (meta.Voting).

- Stacking (meta.Stacking).


반응형

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

부스팅(boosting)  (0) 2019.05.28
Word2Vec  (0) 2019.04.24
1D CNN  (0) 2019.02.26
의사결정나무(Decision Tree)  (0) 2019.02.07
[데이터 전처리] clipping vs trimming  (0) 2019.01.04

소스코드는 여기서 확인가능(macOS에서 동작확인함)

convolution 자체에 대한 좋은 튜토리얼은 여기

일반적인 CNN에 대해서 좋은 튜토리얼 여기(1D CNN포함)

CNN기초

원본 데이터를 2차원으로 놓고 필터(또는 feature detector)라는 사각형 윈도우를 씌운다음에 움직이면서 새로운 값을 만들어 낸다.
이때 움직이는 과정을 convolution이라고 하고, 필터가 움직이는 방향이 한 방향이면 1D-CNN이고 두 방향이면 2D-CNN이다.
위의 그림에서 보듯이 1차원 CNN이라 하더라도 필터의 사각형이 반드시 1차원인건 아니다. 움직이는 콘볼루션 방향및 결과로 나오는 배열이 1차원인지 2차원인지 따지는 것

1D CNN

센서 데이터로 부터 정해진 구간(예를 들면 2초)에 대해서 classification을 하려고 할때 1D-CNN을 쓰면 좋다.
1D CNN이 필요한 경우에 대해서는 여기를 참조하자.
여기 자료 좋다.

A 1D CNN is very effective when you expect to derive interesting features from shorter (fixed-length) segments of the overall data set and where the location of the feature within the segment is not of high relevance.

짧은 구간에 대해서 흥미로운 패턴을 인식하고 싶고, location에 상관없을 때 좋다고 한다. 2D이미지로 따지자면 고양이가 이미지 상에서 어느 location에 있던지 상관없어야 하니 맞는말인듯 하다. 주식에 대입해보면 어떨까? 아쉽게도 주식은 trend 및 seasonality가 존재하기 때문에 location에 영향을 받는다고 해야할 것 같다. 상승 패턴이라고 하더라도 방금전에 나온것과 한달전에 나온것은 다르기 때문이다.



여기 개념 잘 봐두자.


[첫번째 conv layer]

센서x,y,z를 width로 둔다 따라서 값은 3

feature detector 또는 필터의 경우 가로3, 세로 10의 사이즈를 가진다.

이 필터를 아래쪽으로 height만큼 슬라이딩 한다. (80-10+1 = 71)

필터 하나당 숫자 하나가 나와서 결과적으로 71개의 숫자가 나오고 필터 개수가 100개면  71x100개의 아웃풋이 나온다.

(위의 그림의 경우 height라고 표시하고 개념은 커널사이즈인걸로 보여서 헷갈린다. 문서 뒷부분에 보면 height랑 kernel size를 같은거라고 또 적어놨다 -_-)

아래그림에서 height는 인풋에 들어가는 개수라고 설명되어 있다. 최근 80개의 센서값이 네트웍 인풋으로 들어간다는 듯


[두번째 conv layer]

비슷한 작업을 한차례 더한다. (71-10+1 = 62)

해서 62 x 100 사이즈의 아웃풋이 나온다.


[pooling]

3개당 하나씩 풀링해서 62x100을 20x100으로 만든다 (왜 21이 아니고 20일까?)


그 이후는 트리비얼 한듯





































반응형

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

Word2Vec  (0) 2019.04.24
weka  (0) 2019.02.28
의사결정나무(Decision Tree)  (0) 2019.02.07
[데이터 전처리] clipping vs trimming  (0) 2019.01.04
Standardization vs normalization  (0) 2019.01.04

Decision Tree가 무엇인지는 아래 그림보면 한 번에 이해가 됨(출처)

 

일반적으로 위의 Play, Don't Play예시처럼 classification에 적합하지만, 평균값을 취하는 등의 방법을 통해 실수값을 예측하는 regression문제에도 쓸 수 있다고 한다.
 
문제는 어떻게 위의 분기문을 만들것인지 인데,
 

엔트로피 개념

여기서 엔트로피개념이 등장함
엔트로피는 보통 무질서도 또는 불확실성의 개념으로 정의하며, 고전적으로는 열역학에서 정의되고 정보이론으로 확장되었다.
정보이론에서의 엔트로피는 한 메시지에 들어갈 수 있는 정보량의 크기(비트 수)를 의미하며..또는 메시지를 평균적으로 전송하기 위해 필요한 비트수라는 표현이 더 이해하기 쉬울 수도 있겠다., 희귀한 확률을 가진 정보일수록 정보량은 커진다.
여기서 헷갈릴 수 있는 점은 엔트로피는 커지는것만 가능한데 시간이 지날수록 정보량이 점점 커진다는 개념이 이해하기에 약간 어색하다는 점이다.(시간이 지날수록 자연적으로 정보가 풍부해진다니?..하지만 이것은 정보가 풍부해진다기 보다 무작위성이 늘어나, 정보를 전달하기 위해 필요한 비트수가 늘어난다는 관점에서 보면 이해하기 편해진다. 예를 들어 단색인 이미지를 전송할때는 rgb값 하나면 충분하지만, 랜덤한 이미지를 전송하려면 그만큼 필요한 정보가 늘어남이 당연할 것이다.)
이는 순도가 높은 정보일수록 정보량이 작아 전송이 쉽고 불순한 정보가 섞일수록 정보량이 커져서 전송이 어렵다는 관점에서 생각해보면 좋다.
 

엔트로피 계산

먼저 엔트로피의 식을 이해하기 위해 여기를 보고 오자.
예를 들어, 어떤 이벤트가 반드시 발생한다면(순도가 높다) 엔트로피는 0이 된다.$E[-\log p(x)] = - \sum_x {{\log_2 p(x)}p(x)} = -({log_2 1.0})(1.0) = 0$ 
그런데 해당이벤트가 절반확률로만 발생한다면 엔트로피는 1이 된다$E[-\log p(x)] = - \sum_x {{\log_2 p(x)}p(x)} = -(({log_2 1/2})(1/2) + ({log_2 1/2})(1/2)) = 1\times 0.5 + 1 \times 0.5 = 1$
즉 무질서해짐에 따라 정보의 순도가 떨어져서 항상 같은 확률로 무언가 일어나기 보다는 무질서한 확률로 발생하게 되며, 이는 엔트로피를 높인다고 할 수 있겠다.
(이 설명이 완벽하지는 않다. 순도가 높은 경우에 비해 무작위해진 경우에 엔트로피가 높은 것 만을 설명하며, 정말 희귀한 정보가 들어갔을때 시뮬레이션을 내가 다 해본건 아니다. 여전히 의문점들은 있는 상황..예를들어 무작위한 경우보다 더 높은 엔트로피를 가진 경우가 존재하는지 궁금하다..위의 이미지 전송의 경우에 말이지)
 

엔트로피를 decision tree에 적용하기

자 이제 엔트로피의 기본 개념은 익혔다고 한다면 decision tree와의 상관관계에 대해서 알아보자.
주황색 상자안에 빨간공 10개와 파란공 6개가 있다. 무작위하게 공하나를 꺼낸다면 10/16의 확률로 빨간공이 나올 것이고 6/16의 확률로 파란공이 나올 것이다.
이를 엔트로피로 계산하면 아래처럼 된다. $$entropy = E[-\log p(x)] = - \sum_x {{\log_2 p(x)}p(x)} = (10/16)\times 0.68 + (6/16) \times 1.42 \approx 0.95$$ 
이는 위에서 예를 든 1/2확률로 갈리는 경우에 나오는 1.0 엔트로피 값보다 약간 낮고, 완전히 한쪽으로 쏠린 경우에 나오는 0.0엔트로피보다는 큰 수치임을 알 수 있다.
 
이제 주황색 상자안에서 빨간색 점선을 잘 그어서 양쪽으로 classification을 잘 했을 경우에 엔트로피가 어떻게 변화하는지 살펴보자.
위에서 빨간점선을 기준으로 양쪽에 있는 공들을 살펴보면.. 완벽하지는 않지만 대략적으로 빨간공들은 위쪽에.. 파란공들은 아래쪽에 위치하여 나름 분류를 잘 했음을 볼 수 있다.
그리고 나눠진 두 상자 기준으로 각각 엔트로피를 구해보면 순도가 높아졌으므로 좀 더 0.0에 가까워질거라는 예측을 할 수 있다.
실제로 위쪽 부분의 엔트로피를 계산해보면 다음과 같다. $$entropy = E[-\log p(x)] = - \sum_x {{\log_2 p(x)}p(x)} = (7/8)\times 0.19 + (1/8) \times 3 \approx 0.54$$
재밌는점은 파란공이란 정보는 1/8로 뽑히게 된 만큼 희귀해져서 정보량이 3.0으로 크게 증가했지만.. 발생확률은 1/8로 더크게 감소하여 기대값인  엔트로피는 오히려 0.95에서 0.54로 큰폭으로 감소했음을 볼 수 있다. 정보의 개념과 엔트로피의 개념이 서로 달라지는 재밌는 포인트이다.
 
이제 아래쪽 부분의 엔트로피를 계산해보면 다음과 같다.$$entropy = E[-\log p(x)] = - \sum_x {{\log_2 p(x)}p(x)} = (3/8)\times 1.42 + (5/8) \times 0.68 \approx 0.95$$
아래쪽 엔트로피는 원래 엔트로피에서 변동이 없음을 볼 수 있다. 
 
양쪽을 합한 엔트로피는 비율합산을 하면 되는데 위아래 공의 개수가 동일하게 8개 이므로 단순평균을 취해주면 되고 계산해보면 약 0.75의 값이 나온다.
 
즉 처음 0.95와 비교했을때 빨간 점선으로 나눈 이후의 엔트로피가 0.75가 되었으므로, 엔트로피 감소분인 0.2가 information gain(정보이득)이 되고,
무작위성 감소, 불확실성 감소, 순도 증가가 되었으며,
직관적으로 보아도, 구획을 정리해서 각 구획별 순도를 높이는 과정이므로 classification에 좋은쪽으로 구획을 나누는 과정임을 알 수 있다.
즉, 위의 예로 살펴 볼때, decisiton tree에서 총 entropy를 낮추는 방향으로 구획을 나눠주게 되면 결국은 좋은 classification model이 됨을 알 수 있다.
 
따라서, 실제 decision tree에서 분기점을 찾는 방법은..
모든 feature에 대해서 구획을 brute-force로 나눠보고 이때 생기는 entropy의 변화를 보면서 결정한다고 보면 된다.
 

decision tree의 문제점

잘 생각해보면 결국 방을 지속적으로 계속해서 나누다보면 순도100%를 달성할 수 있으며 entropy를 0으로 만드는게 trivial하게 쉽다는점을 발견할 수 있다.
하지만 이는 오버피팅이며, 이를 해결하기 위해서 너무 많은 방을 생성할 수 없도록 패널티 항을 만들어서 cost function을 설계하게 된다.
이렇게, 너무 많은 분기를 생성하지 않도록 하는 작업을 가지치기(pruning)이라고 하며, 이를 통해 오버피팅을 피하고 일반화된 성능을 기대할 수 있다.
 
또한 변수단위 설명력은 우수하지만 선형으로 나눠지는 특징때문에 비선형 데이터 분류에 취약한 문제가 있다.
이를 극복하기위해 나온게 바로 랜덤포레스트(random forest)
 
 
 
 

 

반응형

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

weka  (0) 2019.02.28
1D CNN  (0) 2019.02.26
[데이터 전처리] clipping vs trimming  (0) 2019.01.04
Standardization vs normalization  (0) 2019.01.04
Gym  (0) 2018.11.07

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

+ Recent posts