2017-04-24 17 views
1

R에서 무작위 올가미 함수를 만들려고했지만 파이썬 sklearn 무작위 올가미 함수와 동일한 결과를 생성하지 않는 것 같습니다. 나는 여기에 같은 철학을 적용하고 있지만 그 차이를 이해할 수는 없습니다. 코드는 수정이 코드에 기초 하였다 :랜덤 화 된 올가미를 R

# generate synthetic data 
set.seed(100) 
size = 750 
x = matrix(runif(14*size),ncol=14) 
y = 10 * sin(pi*X[,1]*X[,2]) + 20*(X[,3]-0.5)**2 + 10*X[,4] + 5*X[,5] + runif(1,0,1) 
nbootstrap = 200 
nsteps = 20 
alpha = 0.2 

dimx <- dim(x) 
n <- dimx[1] 
p <- dimx[2] 
halfsize <- as.integer(n/2) 
freq <- matrix(0,1,p) 

for (i in seq(nbootstrap)) { 

    # Randomly reweight each variable 
    xs <- t(t(x)*runif(p,alpha,1)) 

    # Ramdomly split the sample in two sets 
    perm <- sample(dimx[1]) 
    i1 <- perm[1:halfsize] 
    i2 <- perm[(halfsize+1):n] 

    # run the randomized lasso on each sample and check which variables are selected 
    cv_lasso <- lars::cv.lars(xs[i1,],y[i1],plot.it=FALSE, mode = 'step') 
    idx <- which.max(cv_lasso$cv - cv_lasso$cv.error <= min(cv_lasso$cv)) 
    coef.lasso <- coef(lars::lars(xs[i1,],y[i1]))[idx,] 
    freq <- freq + abs(sign(coef.lasso)) 

    cv_lasso <- lars::cv.lars(xs[i2,],y[i2],plot.it=FALSE, mode = 'step') 
    idx <- which.max(cv_lasso$cv - cv_lasso$cv.error <= min(cv_lasso$cv)) 
    coef.lasso <- coef(lars::lars(xs[i1,],y[i1]))[idx,] 
    freq <- freq + abs(sign(coef.lasso)) 
    print(freq) 
} 

# normalize frequence in [0,1] 
freq <- freq/(2*nbootstrap) 

결과는 표 (안정성)에 나타낸 결과 stability in python. 그러나이 유사한 비교되어야한다 : 여기서

randomized lasso function in R. 코드 샘플 데이터 인 첫 번째 하이퍼 링크 참조에있는 원본 R 코드 쇼는 상관 된 기능 X11에서 X14를 찾지 못했습니다. 내 코드에서 제대로 작동하지 않는 부분이 있는지 확인하십시오.

+0

물론입니다. 미래의 질문에 대한 지침을 읽을 것입니다. –

답변

3

먼저이 질문을 게시 해 주셔서 감사합니다. 나는 당신의 코드와 참조를 조사하면서 안정성 선택에 대해 배우는 것을 즐겼다. 둘째로, 당신이이 대답을 볼 때 당신은 아마 스스로를 차버릴 것입니다. 나는 당신의 코드가 유효하다고 생각하지만 "Friedamn # 1 regression dataset"의 강하게 상호 연관된 특징을 만드는 것을 잊었다. 두 번째 링크의 파이썬 코드는 다음과 같습니다.

#"Friedamn #1” regression problem 
Y = (10 * np.sin(np.pi*X[:,0]*X[:,1]) + 20*(X[:,2] - .5)**2 + 
    10*X[:,3] + 5*X[:,4] + np.random.normal(0,1)) 
#Add 3 additional correlated variables (correlated with X1-X3) 
X[:,10:] = X[:,:4] + np.random.normal(0, .025, (size,4)) 

코드에 두 번째 단계가 없습니다. 따라서 처음 두 가지 기능을 제외한 모든 기능은 잡음이며 안정성 선택 알고리즘에서 올바르게 제외됩니다.

+0

좋습니다. 너는 내 하루를 구했다. 나는 지금 나 자신을 차고있다. –