data analysis & visualization

우리는 범주로 구성되어 있는 자료를 분석할 때 흔히 더미화, 원핫인코딩 등을 통해 자료를 변화시킨다. 과연 이러한 더미화는 모델링에서 어떤 영향을 미칠까? 

 

회귀분석에서 주로 얘기되는 더미화는 해당 범주별로 가중치를 다르게 주려고 사용한다. 예를 들어 회귀분석을 통해 몸무게를 예측할 때 성별이라는 변수가 고려되었다고 한다면, 성별이 남자일 때 beta0에 남성의 weight만큼 더해지고, 성별이 여성일 때 beta0에 여성의 weight 만큼 더해져 좀 더 정교하게 예측하게 된다. 

 

Tree기반 모델에서는 과연 더미화는 어떤 역할을 할까? Tree 기반 모델에서는 더미화가 오히려 성능에 악영향을 주는경우가 종종 발생한다. 트리모델에서는 범주별로 이진화를 하게 되는데 만약 더미화를 하게되면 범주별로 변수처럼 인식하게 되므로 True, False 단  두가지로 분류되게 된다. 즉, 이 경우 더미화를 하게됨으로써 덜 정교하게 예측하게 된다. 

 

물론 절대적인 얘기는 아니다. 다만 모델링에서 더미화를 할지 말지는 모델에 따라 고민이 필요하다는 것이다. 

'머신러닝' 카테고리의 다른 글

calibration Curve  (0) 2020.08.19
보루타(boruta algorithm)  (0) 2020.08.09
Dynamic Time Warping(동적 시간 접합)  (0) 2020.07.09
성능평가지표  (0) 2020.04.26
과적합이 좋지 못한 이유?  (0) 2020.01.20

calibration Curve

머신러닝2020. 8. 19. 11:13

우리는 머신러닝의 성능을 정량적으로 평가를 하기위해 성능평가지표를 사용한다. 

 

이러한 성능평가지표는 예측한 것들 중 얼마나 제대로 예측을하였는가에 관한 지표들이다. 

 

https://ducj.tistory.com/161

 

성능평가지표

 

ducj.tistory.com

하지만 모델은 때로 과대 과소추정되기도 한다. 이를 개선하기 위해서 우리는 calibration curve를

 

활용할 수 있다. 

 

그 원리는 나름 간단하다. 예측값이 예측한 target을 범주화 시키고 

 

이 범주를 기준으로 실제 발생한 비율을 보고 이를 교정하겠다는 것이다.

 

다시말하자면, 예측한 값의 범주 중 실제 target의 비율을 시각화 한 그래프이다. 

 

위 그림을 기반으로 설명을 해보자. 우선 학습한 모델의 예측값을 위 점의 개수인 10개의 범주로 등분한다.

 

등분한 범주 중 [0.4 ~ 0.6) 범주가 있다고 하자.

 

[0.4 ~ 0.6) 에 해당하는 범주의 비율을 계산한 경우 0.8의 비율이 나타났다고 하자. 

 

이는 60%확률로 target이라고 예측하였지만 실제 비율은 80%라는 것을 의미한다.

 

따라서 모델이 과소 추정하였다고 할 수 있다. 

 

이와 반대로 [0.6 ~ 0.75) 구간의 범주에서 모델은 0.75의 확률을 제시하였지만, 실제 비율은 0.6밖에 나타나지 않았다.

 

따라서 모델이 과대 추정하였다고 할 수 있다.

 

이렇게 Calibration curve를 통해 모델의 과대 과소 추정을 판단하고 이를 교정하거나 정량적으로 다룰 수 있다. 

 

또한 Calibration Curve는 범주별로 신뢰구간의 extract binomial test를 기반으로 신뢰구간을 추정하여 제시할 수 있다.

 

끝으로 머신러닝모형을 validation data 를 기반으로 다시 재학습하는 방식으로 이를 교정하지 않을까 하는 생각이 든다.

 

 

 

참고 : 3months.tistory.com/418

 

 

Model calibration 의 개념과 Calibration plot

Model Calibration 예측모형 (predicted model) 을 어떻게 평가할 수 있을까? 가장 직관적이면서 많이 쓰이는 평가 방법은 정확도 (accuracy), 즉, 예측한 것중 몇퍼센트나 맞았는가에 관한 지표일 것이다. 하�

3months.tistory.com

 

'머신러닝' 카테고리의 다른 글

더미화?? 그것은 과연?  (0) 2020.09.06
보루타(boruta algorithm)  (0) 2020.08.09
Dynamic Time Warping(동적 시간 접합)  (0) 2020.07.09
성능평가지표  (0) 2020.04.26
과적합이 좋지 못한 이유?  (0) 2020.01.20

보루타 알고리즘은 Random Forest를 기반으로 변수를 선택하는 방법이다.

 

보루타의 알고리즘 아이디어는 다음과 같다.

 

"기존 변수를 복원추출해서 만든 변수(shadow) 보다 모형 생성에 영향을 주지 못했다고 하면 이는 가치가 크지 않은 변수이다."

 

이를 좀 더 알고리즘적으로 말하자면

 

1. 기존변수와 기존변수를 복원추출해 만든 RandomForest 모형을 생성

2. 생성된 모형의 변수중요도를 기준으로 복원추출해 만든 변수들의 변수중요도 중 최대 값을 기준으로 기존변수와 비교

3. 비교 결과 최대 값 보다 큰 기존변수의 hit수를 1증가

4. Tentative에 해당하는 변수를 확률이 0.5이고 시행횟수가 run인 hit-1보다 큰 누적확률 값을 본페로니 교정을 통한 p-value로 유의수준(default = 0.01)보다 낮으면 Tentative 값을 accept로 변환

5. Tentative에 해당하는 변수를 확률이 0.5이고 시행횟수가 run인 hit보다 작은 누적확률 값을 본페로니 교정을 통한 p-value로 유의수준(default = 0.01)보다 낮으면 Tentative 값을 reject로 변환 

6. Tentative에 해당하는 변수가 하나도 없거나 run횟수가 maxrun을 넘을 때까지 위 알고리즘을 반복

- 본페로니 교정은 default이며 옵션으로 변경 가능, Max run의 default는 100, doTrace를 기준으로 정밀도 및 알고리즘이 조금씩 상이해짐.

아래는 R에 나오는 보루타 알고리즘의 예제이다.

3번째 변수는 12번째 시행에서 기각되었으며, 2번째 변수는 16번째, 최종적으로 V6가 기각되었음을 boruta.Ozone값과 ImpHistory를 통해 알 수 있다. 

 

library(Boruta)
data("Ozone")
ozone <- na.omit(Ozone)
summary(ozone)

set.seed(42)
Boruta.Ozone <- Boruta(V4 ~ ., data = ozone, ntree = 500,doTrace=0)
Boruta.Ozone$ImpHistory
plot(Boruta.Ozone)

 

'머신러닝' 카테고리의 다른 글

더미화?? 그것은 과연?  (0) 2020.09.06
calibration Curve  (0) 2020.08.19
Dynamic Time Warping(동적 시간 접합)  (0) 2020.07.09
성능평가지표  (0) 2020.04.26
과적합이 좋지 못한 이유?  (0) 2020.01.20

DTW는 두 개의 시간적 순서가 있는 벡터 간에 유사도를 평가하는 방법이다. 이 말을 쉽게 얘기하자면 우리는 예측값에 대해 정확히 알면 좋긴하나 현실적으로 제한적일 때 경향성이라도 비슷하게 잘 맞추는 알고리즘이 무엇인가 평가하고자 한다. 하지만  성능평가 지표로 사용하는 RMSE, MAE 등의 경우 예측값에 지현 현상이 일어 났을 때 단순히 예측값과 해당 시점의 관측값 간의 차이만을 평가하므로 적합한 평가지표가 아닐 수 있다. 이러한 경우 유사도 개념을 활용하게 되는데 유사도는 거리의 반대의 개념이라고 생각하면 좀 더 이해하기 쉽다.

 

그렇다면 DTW는 어떠한 알고리즘으로 구성 되어 있을까?

1. 두 개의 시계열 간의 거리를 모두 구하는 과정

2. 가장 가까운 거리를 구하기 위해 이를 누적합 하는 과정

3. 가장 가까운 거리간에 매칭하는 과정

 

이렇게 3가지로 구성이 된다.

 

예를 들어보자. 

 

시계열 예측값이 다음과 같이 존재한다고 하자.

 

x=c(1, 1, 2, 3, 3, 2)

y=c(1, 2, 3, 3, 2, 1)

 

이제 각각의 거리의 절대값에 대한 행렬을 구해보자 

 

       1  1  2  3  3  2

1     0  0  1  2  2  1

2     1  1  0  1  1  0

3     2  2  0  0  1

3     2  2  1  0  0  1

2     1  1  0  1  1  0

1     0  0  1  2  2  1

 

위와 같이 두개의 시계열 간의 거리의 절대값을 구하였다면 누적합을 구해보자.

주대각성분(현재 0, 1, 1 , 0 ,1 ,1 에 해당하는 (m, m)행렬의 대각선 성분)을 기준으로 i>j이면 행으로 누적합을 j>i이면 열로 누적합을 진행한다.

 

       1  1  2  3  3  2

1     0  0  1  3  5  6

2     1  1 0   1  2  2

3     3  3  1  0  0  1

3     5  5  2  0  1

2     6  6  2  1  1  0

1     6  6  3  3  3  1

 

아래는 R에 존재하는 DTW이다. 

#====library(dtw)====#
x=c(1,1,2,3,3,2)
y=c(1,2,3,3,2,1)
mydtw = dtw(y,x, keep.internals=T)
mydtw$costMatrix

 

맨 마지막 m,m 성분을 DTW값이라 한다. 

 

이렇게 구한 값을 이제 m,m부터 인접한 가장 작은 값과 매칭하자. 

 

그러면 매칭이 되는 값들을 이어 시각화 하면 다음과 같은 그림이 나타난다.

 

이는 DTW 상으로 가장 가까운 거리를 의미한다.

이를 기반으로 성능을 평가한다면 패턴 인식에 대한 성능평가지표로 RMSE나 MAE보다 좀 더 우수한 성능 평가 지표로 사용 될 수 있다 생각 된다.

 

참고 : http://hamait.tistory.com/862 

 

파이썬 코딩으로 말하는 데이터 분석 - 10. DTW (Dynamic time wrapping)

데이터 분석에 대한 기본적인 감과 덤으로 파이썬 코딩에 대한 감을 익히기 위한 강좌입니다. 개발자는 코드로 이해하는게 가장 빠른 길이며, 오래 기억하는 길이라 믿습니다. 순서 1. 통계 - 카�

hamait.tistory.com

 

'머신러닝' 카테고리의 다른 글

calibration Curve  (0) 2020.08.19
보루타(boruta algorithm)  (0) 2020.08.09
성능평가지표  (0) 2020.04.26
과적합이 좋지 못한 이유?  (0) 2020.01.20
정형데이터마이닝 - 비지도학습  (0) 2019.07.04

성능평가지표

머신러닝2020. 4. 26. 14:12

 

 

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인