2015-06-08 49 views
1

我正試圖學習glmnet的懲罰邏輯迴歸方法。我試圖預測一個來自mtcars示例數據的汽車是否會有自動變速箱或手動變速箱。我想,我的代碼是非常簡單的,但我似乎得到一個錯誤:glmnet training在x,y數據框參數上拋出錯誤:我用錯了嗎?

這第一塊簡單地分割mtcars到動車組的80%和20%的測試設置

library(glmnet) 
attach(mtcars) 

smp_size <- floor(0.8 * nrow(mtcars)) 

set.seed(123) 
train_ind <- sample(seq_len(nrow(mtcars)), size=smp_size) 

train <- mtcars[train_ind,] 
test <- mtcars[-train_ind,] 

我知道X數據被認爲是在沒有響應的矩陣形式,所以在兩個訓練集合試圖訓練模型時分離成一個非響應矩陣(train_x)和響應向量(train_y)

train_x <- train[,!(names(train) %in% c("am"))] 
train_y <- train$am 

但,

p1 <- glmnet(train_x, train_y) 

我得到的錯誤:

Error in elnet(x, is.sparse, ix, jx, y, weights, offset, type.gaussian, 
:(list) object cannot be coerced to type 'double' 

我這麼想嗎?

+2

不要' attach'。這是一個壞習慣,可能會讓你陷入困境,而且你甚至沒有在你分享的代碼中使用它! – Gregor

+0

所以....我不確定你認爲你已經做了什麼來將你的協變量轉換爲矩陣。矩陣是不同的數據結構。你只能通過數據框的子集來獲得一個。 – joran

+0

你看過'cv.glmnet'嗎?它會自動進行k-fold CV。 – Vlo

回答

3

強制轉換的第一個參數爲矩陣解決了我:

p1 <- glmnet(as.matrix(train_x), train_y) 

事實上,形式glmnet?看起來,第一個參數應該是一個矩陣/稀疏矩陣:

x: input matrix, of dimension nobs x nvars; each row is an observation vector. Can be in sparse matrix format (inherit from class "sparseMatrix" as in package Matrix; not yet available for family="cox")

相關問題