메틸화 데이터에 대한 glmnet을 사용한 피처 선택 및 모델 (p >> N)


29

GLM과 Elastic Net을 사용하여 관련 기능을 선택하고 선형 회귀 모델을 작성하고 싶습니다 (예 : 예측과 이해 모두 상대적으로 적은 매개 변수로 남겨 두는 것이 좋습니다). 출력은 연속적입니다. 그것은이다 당 유전자 의 경우. 패키지 에 대해 읽었 지만 다음 단계에 대해 100 % 확신하지 못합니다.2000050glmnet

  1. CV를 수행 하여 입력 데이터가 주어지면 람다 :
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1) 을 선택하십시오. 다른 알파 값을 선택 하시겠습니까?
    (Q2) 모델을 빌드하기 전에 다른 작업을 수행해야합니까?

  2. 모델을
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    맞 춥니 다 . (Q3) "공분산"보다 더 좋은 것이 있습니까?
    (Q4) CV가 람다를 선택한 경우이 단계에는 왜 필요한 nlambda=가요?
    (Q5)lambda.min 또는 사용하는 것이 좋습니다 lambda.1se?

  3. 어떤 매개 변수가 빠졌는지 ( ".") 계수를 구하십시오.
    predict(model, type="coefficients")

    도움말 페이지에서 여러가 predict방법 (예를 들면, predict.fishnet, predict.glmnet, predict.lognet, 등). 그러나 예를 보았을 때 어떤 "평원"도 예측합니다.
    (Q6) 해야 내가 사용 predict하거나 predict.glmnet또는 다른?

정규화 방법에 대해 읽은 내용에도 불구하고 R 과이 통계 패키지에 익숙하지 않으므로 문제를 코드에 적용하고 있는지 확인하기가 어렵습니다. 모든 제안을 환영합니다.

UPDATE
에 기반는 "있는 그대로 이전에 언급, 클래스 열차의 목적이라는 요소가 포함되어 finalModel있다고하여,이 개체는 새로운 샘플에 대한 예측을 생성하는 전통적인 방법으로 사용할 수 있습니다. 리샘플링에 의해 선택된 조정 매개 변수 값을 사용하여 장착 모델입니다, 모델의 예측 기능. "

caret알파와 람다를 모두 조정하는 데 사용 :

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  

fitM이전 2 단계를 대체 합니까 ? 그렇다면 지금 glmnet 옵션 ( type.gaussian="naive",lambda=cv$lambda.min/1se) 을 지정하는 방법 은 무엇입니까?
그리고 다음 predict단계로 바꿀 modelfitM있습니까?

만약 내가한다면

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  
  predict(fitM$finalModel, type="coefficients")

전혀 이해가되지 않습니까? 아니면 두 패키지 어휘를 잘못 혼합하고 있습니까?

답변:


42

1 부

탄성 그물에는 매개 변수에 대한 두 가지 유형의 제약 조건이 사용됩니다.

  1. 올가미 제약 조건 (즉, 의 절대 값 크기 )βj
  2. 릿지 제약 (즉, 의 제곱 값의 크기 )βj

α 는 두 가지 유형의 상대적 가중치를 제어합니다. 올가미 구속 조건을 사용하면 모형에서 변수를 선택 / 제거 할 수 있습니다. 융기 구속 조건은 공선 변수에 대처할 수 있습니다. 더 많은 비중을 두는 것은 데이터 속성에 달려 있습니다. 많은 상관 변수가 두 제약 조건을 모두 필요로 할 수 있으며, 일부 상관 변수는 릿지 제약을 더 강조 할 수 있습니다.

이 문제를 해결하는 한 가지 방법은 치료하는 것입니다 와 함께 튜닝 매개 변수로 하고 이상 튜닝 것을 같은 방식으로 가장 낮은 CV 오류를주는 값을 사용 와 순간 .λ λαλλcv.glmnet

R 패키지 캐럿glmnet 패키지를 사용하여 모델을 빌드 할 수 있으며 및 매개 변수를 모두 조정하도록 설정해야합니다 .λαλ

2 부

Q3

예,이 경우 (변수 수 관측 수) 인 경우 도움말 페이지 에서 사용 을 제안합니다.mn?glmnet

type.gaussian = "naive"

많은 변수로 비효율적이거나 일 때 비효율적 일 수있는 계산 된 내부 제품을 모두 저장하는 대신 , 옵션은 컴퓨터 내부 제품에 필요할 때마다 을 반복 합니다.nmn"naive"n

이 인수를 지정하지 않은 경우 어쨌든 으로 glmnet선택 했지만 나중에 패키지에서 기본값과 옵션이 변경되어 나중에 날짜에 코드를 실행하는 경우 명시 적으로 지정하는 것이 좋습니다."naive"m>500

Q4

짧은 대답으로,nlambda 에 따라 최적의 값을 선택 했으므로 높은 값을 지정할 필요가 없습니다 . 그러나 계수 경로 등을 플롯 하려면 간격에 대해 적당한 값의 세트를 사용하면 훨씬 더 좋은 경로 세트가 생성됩니다. 하나의 특정 관련하여 전체 경로를 수행하는 계산 부담 은 그다지 크지 않습니다.이 작업을 올바르게 수행하기위한 알고리즘을 개발하려는 많은 노력의 결과입니다. 계산 시간에 큰 차이가 없다면 기본값을 그대로 두겠습니다 .λ λα=0.5λλnlambda

Q5

이것은 parsimony에 관한 질문입니다. 이 lambda.min옵션은 가장 낮은 CV 오류에서 값을 나타냅니다 . 이 값의 오차는 폴드 에 대한 오차의 평균 이므로 오차의 추정치 는 불확실합니다. 는 의 값 나타내는 최고의 모델 (보다 간단했던 검색을 ),하지만 내 오류가있는 최고의 모델의 표준 오류입니다. 즉,의 값을 대해 선택된 값으로 사용λ k λ λ kλλklambda.1seλlambda.minlambda.1seλ결과는 최상의 모델보다 약간 단순하지만 최상의 모델의 오차에 대한 폴드 CV 추정치의 불확실성을 고려할 때 오차 측면에서 최상의 모델과 구별 할 수없는 모델이됩니다.k

선택은 당신입니다 :

  1. 약간 지나치게 적합하지 않을 수있는 가장 좋은 모델 : lambda.min
  2. 불확실성을 감안할 때 가장 좋은 모델과 비교할 수있는 가장 간단한 모델은 다음과 같습니다. lambda.1se

3 부

이것은 간단한 것으로 R을 많이 사용하게 predict()될 것입니다. 99.9 %의 시간 함수를 사용합니다 . R은 첫 번째 인수로 제공된 객체에 대한 올바른 기능의 사용을 주선합니다.

보다 기술적으로 predict는 일반적인 유형으로, 다른 유형의 객체 (기술적으로 클래스 )에 대한 메소드 (함수 버전 )가 있습니다. 에 의해 생성 된 객체 에는 실제로 맞는 모델 유형에 따라 특정 클래스가 있습니다. glmnet (패키지)은 이러한 다양한 유형의 객체 에 대한 기능을위한 메소드를 제공 합니다. R은 이러한 방법에 대해 알고 있으며 제공된 객체의 클래스에 따라 적절한 방법을 선택합니다.glmnetpredict


2
멋진 답변! 캐럿에 대해 읽었습니다. 캐럿과 glmnet 패키지의 관계에 대해 100 % 확신하지 못했기 때문에 패키지로 '병합'하거나 glmnet에서 캐럿으로 전환하는 것을 명확히하기 위해 내 질문에 대한 업데이트를 수행했습니다.
PGreen

1
@PGreen : caret100 개 이상의 ML 패키지에서 기능 인터페이스를보다 일관되게 랩핑하고 CV, 그리드 검색을 추가하고 미친 매개 변수 기본값 등을 수정하는 R 래퍼 패키지입니다.
smci

알파 튜닝을 위해 cva.glmnet(..)그냥 대신 사용 cv.glmnet(...)하고 알파와 람다를 동시에 조정할 수 있다는 것을 추가하고 싶습니다 . 그런 다음 minlossplot(cva.fit)어떤 알파가 최상의 결과를 제공하는지 확인할 수 있습니다. 이 두 부분 glmnetUtils
에스 펜 Riskedal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.