200 과목과 1000 변수로 내 데이터 예측의 교차 유효성 검사를 진행하고 있습니다. 변수 수 (사용하고 싶습니다)가 샘플 수보다 많기 때문에 능선 회귀에 관심이 있습니다. 그래서 수축 견적 도구를 사용하고 싶습니다. 다음은 예제 데이터로 구성됩니다.
#random population of 200 subjects with 1000 variables
M <- matrix(rep(0,200*100),200,1000)
for (i in 1:200) {
set.seed(i)
M[i,] <- ifelse(runif(1000)<0.5,-1,1)
}
rownames(M) <- 1:200
#random yvars
set.seed(1234)
u <- rnorm(1000)
g <- as.vector(crossprod(t(M),u))
h2 <- 0.5
set.seed(234)
y <- g + rnorm(200,mean=0,sd=sqrt((1-h2)/h2*var(g)))
myd <- data.frame(y=y, M)
myd[1:10,1:10]
y X1 X2 X3 X4 X5 X6 X7 X8 X9
1 -7.443403 -1 -1 1 1 -1 1 1 1 1
2 -63.731438 -1 1 1 -1 1 1 -1 1 -1
3 -48.705165 -1 1 -1 -1 1 1 -1 -1 1
4 15.883502 1 -1 -1 -1 1 -1 1 1 1
5 19.087484 -1 1 1 -1 -1 1 1 1 1
6 44.066119 1 1 -1 -1 1 1 1 1 1
7 -26.871182 1 -1 -1 -1 -1 1 -1 1 -1
8 -63.120595 -1 -1 1 1 -1 1 -1 1 1
9 48.330940 -1 -1 -1 -1 -1 -1 -1 -1 1
10 -18.433047 1 -1 -1 1 -1 -1 -1 -1 1
교차 유효성 검사를 위해 다음을 수행하고 싶습니다.
(1) 데이터를 두 개의 정지로 분할-전반을 교육으로, 후반을 테스트로 사용
(2) K- 폴드 교차 검증 (내 경우에 다른 적절한 폴드에 대한 10 배 또는 제안은 환영 받다)
간단히 데이터를 2 개로 획득 (이득 및 테스트)하여 사용할 수 있습니다.
# using holdout (50% of the data) cross validation
training.id <- sample(1:nrow(myd), round(nrow(myd)/2,0), replace = FALSE)
test.id <- setdiff(1:nrow(myd), training.id)
myd_train <- myd[training.id,]
myd_test <- myd[test.id,]
R 패키지 lm.ridge
에서 사용 하고 MASS
있습니다.
library(MASS)
out.ridge=lm.ridge(y~., data=myd_train, lambda=seq(0, 100,0.001))
plot(out.ridge)
select(out.ridge)
lam=0.001
abline(v=lam)
out.ridge1 =lm.ridge(y~., data=myd_train, lambda=lam)
hist(out.ridge1$coef)
out.ridge1$ym
hist(out.ridge1$xm)
두 가지 질문이 있습니다.
(1) 테스트 세트를 예측하고 정확도를 계산하려면 어떻게해야합니까 (예측과 실제의 상관 관계)?
(2) K- 폴드 유효성 검사를 어떻게 수행 할 수 있습니까? 10 배라고?
rms
패키지 ols
, calibrate
그리고 validate
차 처벌 (능선 회귀)와 기능.