1

R でランダム化されたなげなわ関数を作成しようとしましたが、Python 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)

結果は、この表 (安定性) python での安定性に示されている結果と同様に匹敵するはずです。ただし、このアプローチと、最初のハイパーリンク リファレンスに示されている元の R コードでは、相関する機能 X11 から X14 が見つかりませんでした。私のRコードでどの部分が正しく機能していないのかわからない.

4

1 に答える 1