R의 캐럿 패키지에서 PCA 및 k- 폴드 교차 검증


16

방금 Coursera의 기계 학습 과정에서 강의를 다시 보았습니다. 교수는지도 학습 응용 프로그램의 전처리 데이터에 대한 PCA에 대해 논의하는 섹션에서 PCA는 훈련 데이터에 대해서만 수행되어야하며 매핑은 교차 검증 및 테스트 세트를 변환하는 데 사용됩니다. PCA 및 열차 / 시험 분할 도 참조하십시오 .

그러나 caretR 패키지에서 train()함수에 전달한 학습 데이터 는 이미 PCA에 의해 처리됩니다. 알고리즘 수행 교차 검증 케이 배 때, 교차 검증 집합을 통해 이미 PCA로 처리 된 preProcess()predict()상기 PCA "피팅"에 사용 된 사실이다.

상황에 대한 나의 이해가 정확합니까? 즉, PCA를 사용한 교차 유효성 검사 (또는 실제로 크기 조정 / 중심 조정 방법을 사용한)에 대한 캐럿의 절차는 데이터의 전처리가 훈련 세트뿐만 아니라 교차 유효성 검사 세트에서도 수행되기 때문에 "잘못된"것입니까? 그렇다면 결과에 얼마나 큰 영향을 미칩니 까?


1
흥미로운 질문입니다. Ng 교수는 왜 "PCA가 훈련 데이터에 대해서만 수행되어야하고 매핑이 교차 검증 및 테스트 세트를 변환하는 데 사용되어야 하는가?"라는 이유를 설명합니까? 내 직감은 train / cv / test 데이터가 동일한 분포에서 나온 것으로 가정하고 PCA는 출력 / 종속 변수를 포함하지 않기 때문에 영향이 최소화되어야한다는 것입니다.
miura

1
@miura 네, 그렇습니다. PCA를 수행 할 때, 원하는 "유지 분산"을 달성하는 데 필요한 출력 벡터에서 최소 숫자 k 치수를 풀어야합니다. 이 매개 변수 k는 이제 우리가 알아야 할 알고리즘의 추가 매개 변수입니다. 교차 검증 세트에서 PCA를 수행하는 경우에도 CV 세트에서 알고리즘의 일부를 실제로 학습하므로 교차 검증의 가치가 감소합니다.
mchangun

PCA와 MDS를 혼란스럽게 생각하지만 두 가지 방법 모두 원하는 유지 분산을 설정하지 않습니다. 그러나 k 치수로 줄이기 위해 가져온 조정에서 계산할 수 있습니다. 첫 번째 치수는 항상 두 번째 치수보다 더 많은 분산을 줄이고 세 번째 치수는 세 번째보다 더 큰 분산을 줄이므로 ... 적합하지 않아도됩니다.
llrs

답변:


18

강의를 보지 못했기 때문에 발언 내용에 대해서는 언급 할 수 없습니다.

내 $ 0.02 : 리샘플링을 사용하여 우수한 성능을 얻으려면 리샘플링 중에 모든 작업을 이전 대신 수행해야합니다. 이는 PCA와 같은 사소한 작업뿐만 아니라 기능 선택 [1]에도 적용됩니다. 결과에 불확실성이 추가되면 리샘플링에 포함하십시오.

주성분 회귀 분석 : PCA에 이어 일부 성분에 대한 선형 회귀 분석을 고려하십시오. PCA는 매개 변수 (노이즈 포함)를 추정하고 구성 요소 수도 선택해야합니다 (다른 값은 다른 결과가 나옵니다 => 더 많은 노이즈가 발생 함).

체계 1과 함께 10 배 CV를 사용했다고 가정합니다.

conduct PCA
pick the number of components
for each fold:
   split data
   fit linear regression on the 90% used for training
   predict the 10% held out
end:

또는 계획 2 :

for each fold:
   split data
   conduct PCA on the 90% used for training
   pick the number of components
   fit linear regression
   predict the 10% held out
end:

두 번째 접근법은 PCA에 의한 불확실성, 성분 수의 선택 및 선형 회귀를 반영하는 오차 추정치를 생성해야한다는 것보다 분명해야합니다. 사실상, 첫 번째 계획의 이력서는 그 이전에 무엇인지 모릅니다.

리샘플링을 사용하는 모든 작업을 항상 수행하지는 않지만 성능 추정에 신경 쓰지 않는 경우 (비정상)는 유죄입니다.

두 체계 사이에 많은 차이가 있습니까? 데이터와 전처리에 따라 다릅니다. 중심을 맞추고 크기를 조정하는 경우에는 그렇지 않습니다. 많은 양의 데이터가 있다면 아마도 아닐 것입니다. 훈련 세트 크기가 줄어듦에 따라, 특히 n이 p에 가까울 경우 좋지 않은 추정치가 발생할 위험이 높아집니다.

리샘플링에 감독 기능 선택을 포함하지 않는 것은 (훈련 세트가없는) 정말 나쁜 아이디어라는 경험을 확실하게 말할 수 있습니다. 왜 전처리가 이것에 어느 정도 영향을 미치지 않는지 알 수 없습니다.

@ mchangun : 구성 요소의 수는 튜닝 매개 변수라고 생각할 수 있으며 일반화 가능한 성능 추정치를 사용하여 선택하고 싶을 것입니다. 최소 분산의 X %가 설명되고 리샘플링에 해당 프로세스가 포함되도록 K를 자동으로 선택할 수 있으므로 해당 프로세스의 노이즈를 처리합니다.

맥스

[1] Ambroise, C., & McLachlan, G. (2002). 마이크로 어레이 유전자-발현 데이터에 기초한 유전자 추출에서의 선택 편향. 국립 과학 아카데미의 절차, 99 (10), 6562–6566.


21

train기능 을 실행하기 전에 데이터를 사전 처리하지 마십시오 ! train 함수에 preProcess 인수 를 사용하면 각 리샘플링 반복에 사전 처리가 적용됩니다.

예를 들어 하지 마십시오 :

library(caret)
dat <- iris
pp <- preProcess(dat[,-5], method="pca")
dat[,-5] <- predict(pp, dat[,-5])
knnFit1 <- train(Species~., dat, method = "knn", preProcess=c("pca"), 
    trControl = trainControl(method = "cv"))

이 작업을 수행!

dat <- iris
knnFit2 <- train(Species~., dat, method = "knn", preProcess=c("pca"), 
    trControl = trainControl(method = "cv"))

1
제안한대로 prProcess를 수행하는 경우 예측에 모델을 사용하려면 새 데이터를 사전 처리해야합니까? 현재, 나는 할 수 있습니다 : 스케일이없는 pred <- predict(knnFit2, newdata)newdata. Caret newdata은 예측에 사용하기 전에 사전 처리 해야한다는 것을 알기에 충분히 똑똑 합니까?
mchangun

7
@mchangun no. caret는 전처리 매개 변수를 저장하고 predict.caret 호출에서 새 데이터를 전처리합니다. 꽤 매끈하다!
Zach
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.