2014-04-18 65 views
1

我只是在R中使用插入符號包進行常規邏輯迴歸。我有一個編碼爲1或0的二項式響應變量,稱爲SALES_FLAG和140個數字響應變量,我使用了dummyVars在R中的函數轉換爲虛擬變量。從Caret軟件包中預測函數給出錯誤

data <- dummyVars(~., data = data_2, fullRank=TRUE,sep="_",levelsOnly = FALSE) 
dummies<-(predict(data, data_2)) 
model_data<- as.data.frame(dummies) 

這給了我一個工作的數據框。所有的變量都是數字的。接下來,我分割爲訓練和測試:

trainIndex <- createDataPartition(model_data$SALE_FLAG, p = .80,list = FALSE) 
train <- model_data[ trainIndex,] 
test <- model_data[-trainIndex,] 

時間使用火車功能訓練我的模型:

model <- train(SALE_FLAG~. data=train,method = "glm") 

一切都運行不錯,我得到一個模型。但是,當我運行預測功能它並沒有給我什麼,我需要:

predict(model, newdata =test,type="prob") 

,我得到一個錯誤:當我更換「概率」與

Error in dimnames(out)[[2]] <- modelFit$obsLevels : 


length of 'dimnames' [2] not equal to array extent 

在另一方面的「原始」對於預測函數內部的類型,我得到了預測,但我需要概率,所以我可以將它們編碼爲給定我的閾值的二進制變量。

不知道爲什麼會發生這種情況。我做同樣的事情,而不使用插入符包和它的工作應該如何:我

model2 <- glm(SALE_FLAG ~ ., family = binomial(logit), data = train) 
predict(model2, newdata =test, type="response") 

花一些時間看這個,但不知道是怎麼回事,它似乎很奇怪我。我已經嘗試了火車功能的許多變體,這意味着我沒有使用公式並使用X和Y.我使用method ='bayesglm'以及檢查和id給了我同樣的錯誤。我希望有人能幫助我。我不需要使用它,因爲火車功能得到我需要的,但caret包是一個很好的包,有很多工具,我希望能夠弄清楚這一點。

回答

2

告訴我們str(train)str(test)。我懷疑結果變量是數字,這使得train認爲你正在做迴歸。這也應該從印刷model中顯而易見。如果您想分類,請將其作爲一個因素。

最大值

+0

謝謝!在將響應變量轉換爲一個因子後,它就像它應該那樣工作。在使用Caret內部的列車功能時,這是否會成爲它們的基礎? – user3527301