2016-12-13 3 views
0

glmnet을 사용하면 weights 인수를 통해 관측 웨이트 벡터를 입력 할 수 있습니다. 또한 glmnet은 (기본적으로) 예측 변수가 평균 및 단위 분산이 0이되도록 표준화합니다. 내 질문은 : weights이 제공되면, glmnet은 각 열의 가중 평균 (그리고 표준 편차) 또는 가중 평균 (및 표준 편차)을 사용하여 예측 변수를 표준화합니까?무게가있을 때 glmnet이 변수를 표준화하는 방법은 무엇입니까?

답변

2

표준화를 계산의 소스 '당신이 glmnet의 포트란 코드 스 니펫을 볼 수있는 게시물에 Link

에서의 표준화'glmnet에 대한 설명이있다. ("증명"단락, 두 번째 글 머리 기호).

저는 Fortran에 익숙하지 않지만 실제로는 가중치 mean과 sd를 사용하는 것과 같습니다.

편집은 다음 glmnet 비네팅에서 :.

"weights가 관찰 무게입니다 기본값은 각 관찰 1 (참고 :. glmnet는 N의 샘플 크기에 합계 가중치 크기를 조정합니다.) "를 재 규격화 무게 인 포트란 코드 w

,이 가중 평균 표준화과 일치하는 것으로 보인다.

1

허용되는 대답과 일치하여 glmnet의 가중치는 역변환 가중치가 아닌 샘플링 가중치입니다. 당신이 독특한 관찰보다 더 많은 관찰이있는 경우 예를 들어, 당신은 당신의 데이터 집합을 압축하고 같은 계수 추정치를 얻을 수 있습니다 :

물론
n <- 50 
m <- 5 

y_norm <- rnorm(n) 
y_bool <- rbinom(n,1,.5) 
x <- matrix(rnorm(n*m),n) 
w <- rpois(n,3) + 1 # weights 
w_indx <- rep(1:n,times=w) # weights index 

m1 = glmnet(x, y_norm, weights = w) 
m2 = glmnet(x[w_indx,] ,y_norm[w_indx]) 
all.equal(coef(m1,s=.1), 
      coef(m2,s=.1)) 
>>> TRUE 

M1 = glmnet(x,y_bool,weights = w,family = "binomial") 
M2 = glmnet(x[w_indx,],y_bool[w_indx],family = "binomial") 
all.equal(coef(M1,s=.1), 
      coef(M2,s=.1)) 
>>> TRUE 

는 좀 더주의를 이력서에 가중치를 사용할 때 사용합니다. 통합 레코드의 가중치는 다항 분포를 사용하여 폴드 (fold)에 분산되어야하기 때문에 glmnet ...