2011-12-10 32 views
12

Tôi đang cố sử dụng gói glmnet trên tập dữ liệu. Tôi đang sử dụng cv.glmnet() để nhận giá trị lambda cho glmnet(). Tôi không bao gồm cột 1,2,7,12 vì chúng là: cột id, cột phản hồi, chứa cột của NA và chứa NA.Thông báo lỗi R glmnet as.matrix()

Dưới đây là các số liệu và thông báo lỗi:

> head(t2) 
    X1 X2  X3 X4 X5   X6 X7 X8 X9 X10 X11 X12 
1 1 1 0.7661266 45 2 0.80298213 9120 13 0 6 0 2 
2 2 0 0.9571510 40 0 0.12187620 2600 4 0 0 0 1 
3 3 0 0.6581801 38 1 0.08511338 3042 2 1 0 0 0 
4 4 0 0.2338098 30 0 0.03604968 3300 5 0 0 0 0 
5 5 0 0.9072394 49 1 0.02492570 63588 7 0 1 0 0 
6 6 0 0.2131787 74 0 0.37560697 3500 3 0 1 0 1 
> str(t2) 
'data.frame': 150000 obs. of 12 variables: 
$ X1 : int 1 2 3 4 5 6 7 8 9 10 ... 
$ X2 : int 1 0 0 0 0 0 0 0 0 0 ... 
$ X3 : num 0.766 0.957 0.658 0.234 0.907 ... 
$ X4 : int 45 40 38 30 49 74 57 39 27 57 ... 
$ X5 : int 2 0 1 0 1 0 0 0 0 0 ... 
$ X6 : num 0.803 0.1219 0.0851 0.036 0.0249 ... 
$ X7 : int 9120 2600 3042 3300 63588 3500 NA 3500 NA 23684 ... 
$ X8 : int 13 4 2 5 7 3 8 8 2 9 ... 
$ X9 : int 0 0 1 0 0 0 0 0 0 0 ... 
$ X10: int 6 0 0 0 1 1 3 0 0 4 ... 
$ X11: int 0 0 0 0 0 0 0 0 0 0 ... 
$ X12: int 2 1 0 0 0 1 0 0 NA 2 ... 

> cv1 <- cv.glmnet(as.matrix(t2[,-c(1,2,7,12)]), t2[,2], family="binomial") 
Error in as.matrix(cbind2(1, newx) %*% nbeta) : 
    error in evaluating the argument 'x' in selecting a method for function 'as.matrix': Error in t(.Call(Csparse_dense_crossprod, y, t(x))) : 
    error in evaluating the argument 'x' in selecting a method for function 't': Error: invalid class 'NA' to dup_mMatrix_as_dgeMatrix 
> cv1 <- cv.glmnet(as.matrix(t2[,-c(1,2,7,12)]), t2[,2], family="multinomial") 
Error in t(.Call(Csparse_dense_crossprod, y, t(x))) : 
    error in evaluating the argument 'x' in selecting a method for function 't': Error: invalid class 'NA' to dup_mMatrix_as_dgeMatrix 

Bất kỳ lời đề nghị?

+8

Tự mình tìm ra. Thay vì as.matrix(), tôi cần sử dụng: data.matrix(). – screechOwl

+0

Tôi không quá quen thuộc với gói này, nhưng có vẻ như bạn đang cung cấp phản hồi nhị thức trên cả hai mặt của phương trình ... x = t [, c (1,2,7,12)] VÀ y = t [, 2] ... nếu bạn nhận thấy mô hình của bạn trông quá tốt là đúng, đây có lẽ là lý do tại sao. –

+0

Không chắc chắn nếu có lỗi đồ họa, nhưng vector đầu vào là x = t [, - c (1,2,7,12)]. Dấu '-' phía trước c() có nghĩa là loại bỏ các cột đó và giữ mọi thứ khác, vì vậy các câu trả lời chỉ nên ở một bên của phương trình. – screechOwl

Trả lời

15

Đối với một số lý do glmnet thích data.matrix() để as.matrix()

cv1 <- cv.glmnet(data.matrix(t2[,-c(1,2,7,12)]), t2[,2], family="multinomial") 

nên thực hiện công việc.

4

Tôi gặp lỗi giống Msg. và thật không may là nó không dễ như sử dụng data.matrix() cho tôi.

Lỗi xảy ra trong sản phẩm chéo của ma trận đầu vào và hệ số mô hình.

Trong predict.glmnet:

nfit = as.matrix (cbind2 (1, newx)% *% nbeta)

gì giải quyết vấn đề đối với tôi là buộc x để một dgCMatrix . Tôi nghiêm túc không hiểu tại sao, nhưng nó làm việc cho tôi.

predict(object = lm, newx = as(x, "dgCMatrix"), type = "response") 

Vì tôi chưa thấy câu trả lời này là một trong nhiều câu hỏi liên quan đến lỗi đó, tôi nghĩ tôi nên đăng ở đây.

+1

Chỉ cần thêm vào điều này cho những người tương lai, tôi chạy vào cùng một vấn đề và sử dụng như (x, "dgCMatrix") kết hợp với as.vector (phân loại) dường như làm các trick. Mã ví dụ: cvfit = cv.glmnet (x = as (dữ liệu, "dgCMatrix"), y = as.vector (phân loại), family = "binomial") –

3

Tôi có thông báo lỗi tương tự khi sử dụng cv.glmnet. cv.glmnet sẽ hoạt động chính xác trong RStudio, nhưng nó sẽ không hoạt động khi sử dụng Rscript. Việc sửa chữa đối với tôi là để thêm vào phía trên cùng của kịch bản của tôi:

require(methods)

Dường như "glmnet" gói có thể sử dụng một số chức năng từ "phương pháp" gói, nhưng gói này không được tải tại khởi động khi sử dụng Rscript. Tuy nhiên, "phương pháp" gói thường được nạp theo mặc định trong R.

Dưới đây là thông tin về chức năng này Rscript:

Rscript does not load methods package, R does -- why, and what are the consequences?

Tôi hy vọng điều này sẽ giúp ai đó mà chạy vào cùng một vấn đề mà tôi đã làm .

+0

Điều này đáng để bỏ phiếu, nó giải quyết vấn đề. –

Các vấn đề liên quan