본문 바로가기
Development/for Machine Learning

Weka

by IMCOMKING 2014. 6. 23.

웨카 3.7 버전대부터 Classifier - More Option - Store Predictions for visualization 옵션이 추가되었다.
또한 package 메니저도 3.7 버전대 부터 추가되었다.(매우 편리함)


- percentage split 할 때, more option에서 preserve order를 켜주어야, 랜덤으로 섞어서 학습 하지않는다.



- zeroR Classifier
제로 R 클래시파이어는 성능의 baseline을 알아내는 용도의 분류기이다. 이것은 매우 간단하기 training데이터에서 가장 빈도가 높은 class로 target에 있는 모든 데이터를 예측해버린다. 즉 한마디로 제일 빈번한 클래스 한군데로 올인을 하는 것이다. 그래서 속도가 매우빠름.



arff 포멧은 맨마지막에 있는 nomial 컬럼을 레이블로 삼는다.

레이블이 맨 마지막에 있는 csv파일을 연다음, filter옵션에서 NumericToNomial 을 last 인덱스에 대해서 해주면 바로 끝난다.


이 옵션을 체크하고, 실험을 한뒤, 결과에대해서 우측클릭 - Visualize classifier errors 에서 Save로 파일을 저장하면
모델이 예측한 정답에대한 확률을 알 수 있다.


이 값은 margin 이라부르며, P(A)-P(B)=margin 의 값이다.(A는 정답을 예측한 확률, B는 오답을 예측한 확률)
그러므로 이값의 범위는 [-1,1] 이 되며, -1이면 엄청나게 크게 예측이 틀린 것이고, 1이면 완벽한 적중이다

따라서 P(A)를 구하고 싶으면, 항상 P(A)+P(B) = 1 임을 이용해 (margin+1)/2를 하면된다.

#margin 의 정의가 살짝 복잡해서 이걸 가공할때 특히 주의해야함.("Generates points illustrating the prediction margin. The margin is defined as the difference between the probability predicted for the actual class and the highest probability predicted for the other classes. ")

P(A)-P(B) = x
P(A)+P(B) = 1

을 연립해서 P(A) = (x+1)/2


-----------

BayseNet 의 경우 search알고리즘에서 TAN을 주로 쓴다.
Logistic과 NaiveBayse 는 디폴트로 그냥쓰면된다. (Logistic 에서 useConjugateGradientDecent 를 키면 속도가 더빨라진다고함. -> More를 눌러보면 설명이 나옴)


---------

Filter - supervised - attribute 에서 attributeSelection 을 열어보면 GainRatioAttributeEval 과 Ranker를 이용해 의미가 있는 피처들만 골라 쓸 수 있다.(일반적으로 성능이 향상됨). 이때 Ranker에서 numToselect는 상위 몇개를 사용할 것인가인데, 이것은 Weka-Explorer의 Select attributes 탭에서 역시마찬가지로 GainRatioAttributeEval 을 써서, 직접 눈으로 랭크점수가 0이 아닌 것들의 개수를 세서(엑셀 사용) 정한다.
(필터 적용시 apply 버튼을 눌러야함. undo로 취소가능)

GainRatioAttributeEval 대신 InfoGainAttributeEval 도 쓰는데, GainRatio는 infoGain에서 노말라이즈를 한번 한것이라고 한다.(의미는 모르겠으나 별차이 없는듯)


또한 Filter - supervised - instance 에서 Resample 을 사용하면 imbalence한 데이터의 균형을 맞추거나 랜덤하게 섞을 수 있다.(biasToUniformClass를 1.0로)


---

Filter 를 이용한 Training - Test data split

Supervised 의 경우
filter-supervised-instance-StratifiedRemoveFolds 사용

inverstSelection false 로 뽑고, undo 한 뒤 true로 바꾸어서 다시 뽑는다


Unsupervised 의 경우
filter-unsupervised-instance-RemovePercentage에서 inverstSelectionn

inverstSelection false 로 뽑고, undo 한 뒤 true로 바꾸어서 다시 뽑는다




---------

웨카에서 imbalance 문제는 매우 크리티컬 함. 반드시 filter에서 Resampling(bias 를 1로)사용하여 인스턴스 수를 맞출것


쿼드코어 이상의 컴퓨터에서 웨카를 빠르게 돌리고 싶으면, 여러개 실행해서 동시에 돌리면 병렬적으로 처리할 수 있음.
(기본 메모리가 보통 1Gb로되어있는데, 이것만으로 보통은 문제가 없으나, 더큰 메모리가 필요하면 웨카 설치 경로에서 Runweka.ini파일을 열어 -maxheapsize 를 조절하면됨.)



피처셀렉션은 Information gain 쓴다음 ranker로 분석해서처리. 웨카에서는 select attribute에서 대충 유의미한 피처 개수를 파악(대충 값이 0이아닌거)한다음, preprocess에서 supervised-attribute-Attribute selection 에서 처리

아니면 PCA : Principal Components Analysis 를 사용함.


information gain 은 두 분포간의 KD divergence값을 구해서 상위순서로 나열한 것.



다음은 기본적은 클래시피케이션과 리그레션에 쓰이는 세팅(특히 알고리즘)

Arousal Classification Setting.exp


Arousal Regression Setting.exp


'Development > for Machine Learning' 카테고리의 다른 글

Practical Theano Tutorial  (0) 2015.03.11
Theano 사용법  (0) 2015.01.20
CUDA Programming  (2) 2014.11.17
CUDA / CuDNN / Theano / TensorFlow 설치하기  (4) 2014.07.07
MATLAB 문법, API, 단축키, 환경설정  (0) 2014.06.23

댓글