2017-11-21 16 views
1

trainSAtestSA이라는 이름의 데이터 세트를 사용하고 있는데, 그 중에서도 chd age alcohol obesity tobacco typea ldl 열이 있습니다.train (method = "glm", ...) 및 glm (...)이 동일한 응답을 제공 할 것으로 예상됩니까?

이 명령 (나는 R에서 일하고 있습니다)

set.seed(13234) 
modFit<-train(chd~ age+ alcohol+ obesity +tobacco +typea +ldl, method="glm",family="binomial", data=trainSA) 
missClass(testSA$chd, predict(modFit,testSA)) 

반환 0.3116883,이

set.seed(13234) 
modFit<-glm(chd~ age+ alcohol+ obesity +tobacco +typea +ldl, family="binomial", data=trainSA) 
missClass(testSA$chd, predict(modFit,testSA)) 

반환 0.2943723 동안.

동일한 시드를 사용하여 서로 다른 매개 변수를 동일하게 유지하면서 다른 매개 변수를 하나씩 실행하고 약간 다른 결과를 얻을 수 있습니다.

예상 되나요? 아니면 그 중 하나에 추가해야 할 명령이 있습니까?

참고 : 본인의 나머지 코드에 대한 세부 정보는 관련성이 없어 보이기 때문에 선택하지 않았지만 필요한 경우 수행 할 수 있습니다.

답변

0

두 개의 다른 모델에 대해 predict 기능이 다르게 작동하므로 출력이 일치하지 않습니다. 이 재현 가능한 간단한 예제를 생각해보십시오.

library(caret) 
set.seed(123) 
df <- data.frame(
    y = as.factor(rbinom(100, 1, 0.5)), 
    x1 = rnorm(100), 
    x2 = rnorm(100) 
) 
trainSA <- df[1:70,] 
testSA <- df[71:100,] 

modFit1<-train(y ~ x1 + x2, method="glm",family="binomial", data=trainSA) 
head(predict(modFit1, testSA)) 
[1] 0 1 1 1 0 1 
Levels: 0 1 

modFit2<-glm(y ~ x1 + x2, family="binomial", data=trainSA) 
head(predict(modFit2, testSA)) 
     71   72   73   74   75   76 
-0.06855758 0.35434220 0.09654412 0.01410099 -0.91703771 0.25432903 

동일한 결과를 제공하기 위해 두 모델에서 예측 기능을 사용하는 방법을 변경해야합니다. 이를 수행하는 한 가지 방법이 있습니다. 당신이 당신의 데이터 또는 missClass 기능에 대한 세부 사항을 제공하지 않았기 때문에

as.integer(predict(modFit1,testSA))-1 == as.integer(predict(modFit2, testSA, type = 'response') >= 0.5) 

[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
[18] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

나는 아마도 두 번째는 주변을 둘러 predict를 호출하는 방법을 변경하는 것을 고려, 당신에게 완전한 대답을 줄 수 없습니다.

predict(modFit,testSA, type = 'response') >= 0.5 

위의 코드는 당신에게 당신이 찾고 할 수있는 바이너리 수준의 예측을 줄 것이다,하지만 다시는 함수가 실제로 무엇을하고 있는지 데이터에 따라 달라집니다.