Notes on the earth package :: part01


Stephen Milborrow
September 10, 2016

Contents

  1. 1 Introduction
  2. 2 Overview
  3. 3 Termination conditions for the forward pass
  4. 4 Generalized linear models
  5. 5 Factors
  6. 6 The linpreds argument
  7. 7 The allowed argument
  8. 8 Using earth with fda and mda
  9. 9 Plots
  10. 10 Cross-validating earth models
  11. 11 Understanding cross-validation
  12. 12 Estimating variable importance
  13. 13 FAQ

1 서론(Introduction)

earth R 패키지[19, 22]는 Friedman's 논문 "다변량 적응 회귀 곡선과 빠른 MARS(Multivariate Adaptive Regression Splines [7] and Fast MARS)"[8] 에 기술을 사용한 회귀 모델(regression models)로 만들었다. 패키지는 "http://cran.r-project.org/web/packages/earth/index.html" 에서 다운로드 할 수 있다.
용어 "MARS"는 트레이드마크이다 그래서 패키지의 이름으로 사용할 수 없다. earth의 backronym는 "힌지(경첩)를 통해 향상된 적응 회귀(Enhanced Adaptive Regression Through Hinges)" 이다.
이 문서는 패키지를 동반한 노트의 모음이다. 이것은 http://www.milbo.org/doc/earth-notes.pdf 에서 다운로드 할 수 있다.
패키지와 함께 있는 다른 비네트(vignette)는 "earth에서 분산 모델 (Variance models in earth)" [18] 이다, 분산 모델(variance models)을 어떻게 만들고 earth 모델에서 예측 구간을 생성하는지에 대해 설명되었다. http://www.milbo.org/doc/earth-varmod.pdf 이 문서는 에서 다운로드 할 수 있다.
대부분의 사용자는 이 전체 문서를 읽을 필요가 없음을 발견할 것이다. 단지 당신이 필요한 것을 읽고 그리고 나머지는 건너 뛰어라. 이 텍스트의 많은 것들은 사용자의 이메일에 답하는 것으로 쓰어진 원본이다.

2 개요(Overview)

Earth는 많은 아규먼트를 가진다. 그러나 많은 사용자들은 아래의 필요한 모든 것임을 알 수 있을 것이다:
formula, data 선행모델(lm)과 비슷.
x, y formula interface를 대체.
degree 상호작용의 최대 도수. 기본값 1, hinge 함수에서 일차 상호작용 사용은 2.
nk MARS 조건의 최대 수. 기본은 x에서 예측 변수의 수에서 반-자동으로 결정된다, 그러나 조정이 필요할 것이다.
trace 추적 작업(Trace operation).
thresh(임계점), penalty, 그리고 endspan 같은 튜닝 파라메터를 가지고 장난하는 것으로 표준 MARS 알고리즘을 파괴하지 않는 것이 일반적인 최선입니다. 훈련 데이터를 최적으로 적합하는 모델을 찾고 있지 않다는 것을 기억해라, 오히려 분포 하에 가장 적합한 모델을 찾음. 지식이 있는 사용자는 이 충고를 무시할 것이다.

2.1 참조(References)

Wikipedia 글[24]은 MARS에 대한 기본 소개로 추천된다.
http://en.wikipedia.org/wiki/Multivariate_adaptive_regression_splines.
Friedman MARS 논문 [7, 8]을 주로 참조했다. 독자는 더 쉽게 접근하는 Hastie, Tibshirani, and Friedman [12]에 있는 MARS 섹션을 찾을 것이다.
Faraway [5]는 손에 들어온다, 다른 기술 없이 mda::mars와 비교하는 오존 데이터를 사용함.(만약 mars 대신에 earth 로 Faraway의 예제를 사용하면, $x 대신에 $bx 를 사용하고, 그리고 책의 교정 내용을 확인해라)
Friedman and Silverman [9]는 MARS 논문을 읽는 것이 백그라운드로 추천된다.
Earth의 가지치기 패스(pass )는 Miller [20]에 있는 기술에 기반하여 leaps 패키지[16]의 코드를 사용한다.
공개된 문서로 earth 를 사용한다면, 이것의 저작권과 사이트를 알려라.(FAQ 13.2).

2.2 다른 구현(Other implementations)

같은 데이터가 주어지면, earth 모델은 다른 MARS 수행에 의해 만든 모델과 구별 가능하지 않고 비슷하다. 차이는 작은 수행의 차이(또는 입력 데이터의 섭동(or perturbations of the input data))가 용어와 나트(terms and knots)(비스한 GRSq's 이지만)를 무엇인가 다른 선택을 유발할 수 있는 경우에 순향방 패스에서 나타난다. 역방향 패스는 같은 순방향 패스 결과가 주어지면 같거나 거의 같게 주어진다.
earth 의 소스 코드는 Trevor Hastie and Robert Tibshirani [13]에 의해 작성된 mda 패키지에 mars 함수에서 동인되었다. 또한 mars.to.earth 함수를 보라(earth 패키지에서).
용어 MARS는 트레이드마크이고 그리고 Salford Systems http://www.salfordsystems.com의 배타적인 라이센스이다. 그들의 수행은 Friedman에 의해 작성된 엔진을 사용한다. 이것은 그래픽적인 사용자 인터페이스를 가지고 earth에 없는 어떤 특징을 포함한다.
StatSoft 는 "MARSplines" http://www.statsoft.com/textbook/stmars.html이라 불리는 수행을 가진다.
SAS는 "ADAPTIVEREG"라 불리늘 수행을 가진다.
우리가 가지는 다른 수행은 그들은 프리드먼의 MARS 빠른 업데이트 알고리즘(Friedman's MARS fast update algorithm)을 사용하지 않기 때문에 작은 문제의 안정성에서 나타난다(MARS 논문에서 식 52) .

2.3 제한(Limitations)

MARS 에서 아래의 측면은 프레이드만의 논문에서 다루어 졌다 그라나 earth에서는 수행되지 않는다.
(i) 구분 입방 모델(Piecewise cubic models)
(hinges에서 모양을 부드럽게 출력하기 위함)
(ii) 모델 자르기(plotmo는 조각내기 방법으로 한다.)
Model slicing (plotmo goes part way).
(iii) 결측 데이터의 처리
(iv) 하위집합(subsets)으로 범주형 예측자를 자동 그룹핑
(v) Fast MARS를 위한 h 파라메터

2.4 순방향 패스(The forward pass)

순방향과 가지치기 패스의 상세한 이해는 earth의 리턴값과 일반적으로 많은 수의 아규먼트를 이해하는데 도움을 줄 것이다. Figure 1에서 개략적으로 보여준다.
Figure 1: earth 내부의 개략도
순방향 패스의 결과는 MARS 의 기저 메트릭(basis matrix) bxdirscuts 에 의해 정의된 조건의 집합이다(이것들은 earth의 리턴 값의 모든 필드이나 그라나 순방향 패스에 의해 리턴된 bx는 selected.terms에서 역으로 잘려지기 전에 모든 조건들을 포함한다).
bx 메트릭은 모든 관측값을 위한 열은 가진다(i.e. x의 모든 열을 위함). 이것은 각 기저함수의 행을 가진다(또한 MARS의 조건으로 언급됨). bx의 예:
(Intercept) h(x1-58) h(x2-89) h(89-x2) h(56-x3)*h(x1-58) ...
[1,] 1 3.2 0 56 0 ...
[2,] 1 8.14 0 55 0 ...
[3,] 1 3.7 0 54 0 ...
...
순방향 패스의 종료 조건의 논의를 위한 Chapter 3를 보라.

2.5 가지치기 패스(The pruning pass)

가지치기 패스(pruning pass)는(또한 역방행 패스(backward pass)라 불림) 순방향 패스에서 생성된 조건 bx 의 집합을 다룬다. 이것의 일은 가장 낮은 GCV가 주어지는 이러한 조건에서 하위집합을 찾는다. 가지치기 패스의 아래 설명은 어떻게 earth의 리턴값에서 다양한 필드가 만들어지는지 설명한다.
가지치기 패스는 다음과 같이 동작한다: 이것은 1:nprune 에서 각 모델 크기를 위한 가장 낮은 RSS(residual sum-of-squares)를 가지는 bx에 조건의 하위 집합을 결정한다(pmethod를 사용). 이것은 RSS와 그리고 rss.per.subset에서 하위집합 같은 각각의 조건의 수 그리고 prune.terms를 저장한다. 이것은 그다음 gcv.per.subset를 산출하기 위해 rss.per.subset의 각 항목의 penalty를 가지는 GCV 계산하다. 마지막으로 이것은 gcv.per.subset에서 가장 낮은 값을 가지는 모델을 선택하고, 그것의 조건의 수를 selected.terms에 놓고, 그리고 selected.terms를 단지 유지하기 위해 bx를 업데이트한다.
가지치기 패스 다음에, earth 는 bx에서 응답 y에 상응하는 회귀로 fitted.values, residuals, 그리고 coefficients를 결정하기 위해 lm.fit를 실행한다. 이것은 본래 기초 행렬 bx에서 응답 y의 최소-제곱-회귀(least squares regression) 이다(Figure 1를 보라 그리고 예제를 위한 예(model.matrix.earth)를 보라). 만약 y가 다중 컬럼을 가진다면 그러면 lm.fit는 각각의 컬럼에서 호출된다
만약 glm 아규먼트가 earth 에 전달되면(Chapter 4), earth 는 위의 lm.fit 호출을 추가해서 (각 컬럼에 대하여) y에 glm 을 실행한다.

2.6 실행 시간(Execution time)

입력 데이터의 주어진 집합에서, 아래의 작업은 순방향 패스의 속도을 증가시킬 수 있다.
(i) degree를 감소(고려해햐 할 조건(terms)의 조합이 적기 때문)
(ii) nk를 감소(순방향 패스 조건이 더 적기 때문)
(iii) minspan를 증가(더 적은 knots가 고려될 필요가 있기 때문)
(iv) fast.k를 감소(각 순방향 단계에서 고려되어야 할 잠재적인 부모가 더 적어지기 때문)
(v) thresh를 증가(순방향 패스 조건이 적을수록 더 빨라짐)
역방향 패스는 일반적을 순방향 패스 보다 더 빠르다, pmethod = "exhaustive"를 사용하지 않는 경우. nprune의 감소는 철저한 검색 시간을 줄인다. 하나의 전략은 처음에는 큰 모델에서 만들고 그리고 update.earth를 사용하는 nprune 과 같은 가지치기 파라메터를 조정한다.

2.7 모델 크기와 메모리 사용(Model sizes and memory use)

Earth는 모델 크기에 특별한 제한을 강요하지 않는다. 전체 메모리 크기는 모델을 생성하기 위해 기다리는 동안 당신의 시스템의 메모리 총량과 인내력에 의해 단지 제한될 뿐이다. 큰 모델에서, earth는 내부적으로 메모리 예약을 자동으로 한다 그리고 gc를 호출한다. earth의 메모리 사용을 추적하려면 trace=1.5 를 사용해라.
earth(혹은 어떤 모델)에 x, y 인터페이스는 formula 인터페이스 보다 메모리를 조금 덜 사용한다, formula를 x와 y로 변환은 약간의 메모리와 시간을 가진다.
nk 감소는 메모리를 크게 감소할 수 있다(왜냐하면 이것은 기초 메트릭 bx의 크기 그리고 모델 생성 동안 내부적으로 필요한 다양한 버전의 크기를 감소시킨다).
degree의 증가는 메모리 요구량이 변경되지 않는다(그러나 실행 시간은 감소된다).
테스트 단위 파일(test suite file) earth/inst/slowtests/test.big.R은 8백만개의 경우와 100개 변수를 가지는 earth 모델과, 그리고 8천만개 경우와 2개의 컬럼을 가지는 모델을 테스트했다. 모델은 32 gig의 RAM을 가지는 64 비트 윈도우 시스템에서 테스트되었다. 모델은 earth의 기본 아규먼트를 가지고 생성되었다. 대체로 더 큰 모델은 만약 nk를 줄이거나 또는 물리적 메모리을 머신에 추가한다면 가능하다.
누적 수치 오류(Accumulated numerical error)는 매우 큰 x 메트릭을 가지면 잠재적으로 문제가 될 수 있다, 테스트 단위에서 매우 큰 모델은 수치 오류에 의해 영향이 없어 보이지만.
큰 모델 생성은 물리적 메모리 보다 더 많은 메모리가 요구된다. 메모리 페이지 쓰레싱(Memory page thrashing)은 기대한 만큼 종종 나쁘지 않다, 왜냐하면 knots를 검색하는 동안 C 코드는 한번에 컬럼의 하위집합만을 가지고 동작한다.

2.8 표준 모델 함수(Standard model functions)

case.names 같은 표준 모델 함수는 earth 객체를 위해 제공되고 그리고 명시적인 문서가 있지 않다. 이런 많은 것들은 결과가 기대하는 것이 아닌 경우에 경고를 제공한다. 단지 이런 경고를 조작하기 위해 이런 함수에 warn=FALSE를 주어라. 아래는 earth 메서드의 모든 리스트이다:
  • anova.earth,
  • case.names.earth,
  • coef.earth,
  • deviance.earth,
  • effects.earth,
  • extractAIC.earth,
  • family.earth,
  • fitted.earth,
  • fitted.values.earth,
  • hatvalues.earth,
  • model.matrix.earth,
  • plot.earth,
  • print.earth,
  • resid.earth,
  • residuals.earth,
  • summary.earth,
  • fupdate.earth,
  • variable.names.earth,
  • weights.earth.

2.9 다중 응답 모델(Multiple response models)

만약 응답 y가 k 개의 컬럼을 가지면 그러면 earth는 k개의 동시에 실행하는 모델을 만든다. 각 모델은 기초 함수의 같은 집합을 가진다(같은 bx, selected.terms, dirs 그리고 cuts) 그러나 다른 상관계수를 가진다(반환된 상관계수는 k 개의 컬럼을 가질 것이다.). 모델들은 생성되고 그리고 순방향과 역방향 패스 동안 모든 k 개의 응답에서 모두 더해진 GCV와 RSS 만을 가지고 일반적인 것처럼 가지 쳐진다. Earth는 전체 GCV를 최소로 한다(GCV들의 합).
일단 당신의 모델을 생성하면, 각 응답이 예측 변수를 가지고 어떻게 다양하게 되는지 보기 위해 plotmo [17]와 그것의nresponse 아규먼드를 사용할 수 있다.
여기에 여러 응답을 구별할 수 있는 약간의 방법을 보여주기 위하여 (인위적인) 예제가 몇 개 있다.
earth(cbind(O3,wind) ~ ., data=ozone1) # formula interface

earth(ozone1[,-c(1,3)], ozone1[,c(1,3)]) # same with x,y interface

earth(cbind(log.O3=log(O3),wind) ~ ., data=ozone1)

earth(x=data.frame(x1, x2, log.x3=log(x3)), y=data.frame(y1, y2))
earth는 동시에 실행되는 모든 모델을 위해 최적화를 시도하기 때문에, 각 모델의 결과는 독립적으로 모델을 생성한 것처럼 좋게 되지 않는다(적합도(goodness)는 GRSq 에 의해 측정되는 경우). 어쨌든, 조합된 모델은 다른 점에서 더 좋은 모델이 될 것이다, 무엇인가 달성하고자 시도하는 어떤 것에 따름. 예를 들어, 이것은 모든 응답에 걸쳐 최적인 MARS 조건의 집합을 선택하기 위해 earth에서 유용할 수 있다. 이것은 만약 어떤 응답이 매우 작은 성공 수를 가진다면 다중 응답 로지스틱 모델(logistic model if some responses)에서 전형적인 경우가 될 수 있다.
y의 일반적인 자동 척도화는 만약 y가 다중 컬럼이면 일어나지 않는다. 당신은 earth를 호출하기 전에 y 컬럼들을 척도화 하는 것을 원할 것이다 그래서 각 y 컬럼들은 모델이 생성되는 동안 적당한 가중치를 가지기를 원한다( 큰 분산을가지는 y 컬럼은 작은 분산을 가지는 컬럼 보다 더 많이 모델에 영향을 끼칠 것이다). 당신은 earth를 실행하기 전에 scale함수를 호출하여 이것을 할 수 있고, 또는 Scale.y 아규먼트를 설정하거나, 또는 wp 아규먼트를 사용하여 할 수 있다.
틸드(tilde, ~)의 왼쪽 부분에 + 기호를 사용하지 마라. 다중 응답을 명시하기 위해 근거있는 생각이라 여길 것이다. 그러나 실제로 그것은 산술적으로 열을 추가한다.
다중 응답에서 평균된 잔차 에러를 사용하는 더 상세한 내용은 FDA 논문(Hastie, Tibshirani, and Buja [11])의 예제 Section 4.1 을 보라.

2.10 가중치(Weights)

가중치의 경우 x에 대한 y의 응답을 sqrt(weights) * x 에 대한 sqrt(weights) * y 의 회귀를 가지고 내부적으로 대체하는 표준 기술을 사용하여 earth에서 수행된다.
MARS fast update formula 에 대하여 결정적인 것은 (MARS 논문에서 식 52) 순서적으로 예측 값을 진행하여 나온 결과인 계산 능력에 있다. 어쨌든, sqrt(weights)를 곱하면 값이 순서가 변경된다, 일반적으로, 그래서 우리는 가중치가 적용된 후에 식을 (쉽게) 사용하지 못 할 수 있다. 그래서 식을 사용하는 대신에, 가중치의 현재 구현은 각 knot에서 전체 회귀 분석을 수행하게 되어 있다. 이것은 느리다(비록 이것은 가중치를 가지는 회귀의 C 코드가 가중치가 없는 회귀의 코드보다 상당히 적게 만들어 졌지만). 이것은 완전하게 최적화 될 수 있다, 그러나 비가중된 관측값을 위한 코드로 확장은 없다.
earth 코드에서, 영(zero) 가중치는 매우 작은 값으로 내부적으로 변경된다(lm 코드의 경우, 영 가중치를 가지는 경우 제거된다; 이것은 업데이트나 모델을 플로팅 할 때 추가되지만 더 철저하다).

2.11 mda::mars에서 마이그레이션(Migrating from mda::mars)

mda::mars 모델 대신에 earth 모델을 사용하도록 하는 코드 변경은 mars의 호출을 earth로 변경하는 일반적인 단순한 문제이다. 그러나 몇 개의 아규먼트가 다르고 그리고 earth는 만약 그것이 mars만 있는 아규먼트를 받으면 경고를 할 것이다.
결과 모델은 작은 구현이 다르기 때문에 구별 못하지만 비슷하다. 함수 mars.to.earth의 문서를 보라.
earth의 출력에 더 많은 과정이 있으면, 당신은 반환된 값에서 다른 점을 고려할 필요가 있을 것이다. 소스 파일 mars.to.earth.R의 헤더에 이런것들이 설명되었다. 아마도 가장 중요한 것은 earth가 "bx"를 리턴하는 경우에 mars는 "x"라 불리는 필드에서 기초 메트릭을 리턴한다. 또한 earth는 factors 보단 dirs를 리턴한다.
wp 아규먼트에서 주목. wp에 대한 Earth의 내부 정규화는 mars와는 다르다. Earth는 wp <- sqrt(wp/mean(wp))를 사용하고 그리고 marswp <- sqrt(wp/sum(wp))을 사용한다. 그러므로 earth에서, 모든 요소에서 동등한 wpwp가 아닌 것과 같다. wp를 가지는 모델 생성에서, earth의 GCV에 그것을 비교하기 위해 length(wp)로 mars에 의해 계산된 GCV를 곱하라.

3 순방향 패스에서 종료 조건(Termination conditions for the forward pass)

순방향 패스에서는 아래의 조건 중 하나를 만날 때 까지 쌍으로 조건(terms)을 추가한다.
(i) 조건 nk의 최대 수에 다달았을 때
(ii) 조건을 추가하면 0.001보다 적은 값으로 R2이 변경 시.
(iii) R2 값이 0.999 또는 더 큰 값에 다달았을 때
(iv) GRSq가 -10 보다 적은 경우(비정상적으로 나쁜 GRSq, FAQs 13.11 과 13.12).
(v) 새로운 조건으로 R2 변경이 없는 경우(수치상의 정밀도 제한에 다달았을 가능성 대문).
모든 위의 조건들이 엄격하게 필요하지 않음(nk 조건에 다달았을 때 단지 중지 시킬 수 있다), 그러나 추가적인 조건들은 계속할 포인트가 없을 때 종료 조건에 의해 시간이 절약된다, 그리고 수치적인 잡음 때문에 임의적인 knot를 가지는 조건의 생성을 최소로 한다.
GCV(via GRSq) 값들이 단지 (더 일반적이지 않은) 종료 조건의 하나 처럼 순방향 패스 동안 사용되는 점을 주목하라. penalty 아규먼트의 변경은 knot의 위치를 변경하지 않는다.
순방향 패스에서 상세를 얻기 위해 trace=2 또는 더 크게 놓아라.
또한 FAQ 13.14 보라, "pmethod=none을 주고서도 nk 보다 더 적은 조건을 얻는가?"
단지 호기심있는 사용자를 위해: 위의 숫자 0.001과 0.999는 earth의 thresh 아규먼트를 변경하는 것에 의해 변경 될 수 있다. 모든 수단으로 0으로 thresh 설정함은 모든 종료 조건을 사용 못하게 한다, nk와 수치적인 제한을 포함하는 조건을 제외. 잠재적인 문제점은 이것은 earth가 수치적 이슈는 불안정을 유발하지만 진행을 계속하도록 허락한다.

댓글 없음:

댓글 쓰기