2013-06-20 4 views
6

Tôi đang làm việc trong cuộc thi Titanic Kaggle và tôi có một câu hỏi liên quan đến việc gán giá trị bị thiếu. Tôi đang cố gắng sử dụng gói Caret và tập huấn luyện của tôi bao gồm các yếu tố cũng như các con số.Giá trị thiếu giá trị bị lỗi với dấu mũ

Tôi muốn sử dụng hàm preProcess trong dấu mũ để xác định giá trị bị thiếu, nhưng trước khi sử dụng tiền xử lý, tôi cần chuyển đổi tất cả các yếu tố của mình thành biến giả với hàm dummyVars.

dummies = dummyVars(survived ~ . -1, data = train, na.action = na.pass) 
xtrain = predict(dummies, train) 

Tuy nhiên, trong quá trình sử dụng dummyVars để chuyển đổi các yếu tố, tất cả các NAS được dự đoán bởi một số thuật toán chưa biết và thiếu age cột tất cả trở thành 1 nhân mặc dù tôi đã xác định na.action = na.pass. Tôi muốn chuyển đổi các yếu tố của tôi thành các biến giả mà không có các NA được chạm vào để tôi có thể sử dụng sau đó sử dụng hàm preProcess để gây nhiễu chúng. Tôi có thể làm cái này như thế nào?

Cảm ơn bạn.

dput đây:

structure(list(survived = structure(c(1L, 2L, 2L, 2L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("0", 
"1"), class = "factor"), pclass = structure(c(3L, 1L, 3L, 1L, 
3L, 3L, 1L, 3L, 3L, 2L, 3L, 1L, 3L, 3L, 3L, 2L, 3L, 2L, 3L, 3L 
), .Label = c("1", "2", "3"), class = "factor"), sex = structure(c(2L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 
2L, 1L, 1L), .Label = c("female", "male"), class = "factor"), 
    age = c(22, 38, 26, 35, 35, NA, 54, 2, 27, 14, 4, 58, 20, 
    39, 14, 55, 2, NA, 31, NA), sibsp = c(1, 1, 0, 1, 0, 0, 0, 
    3, 0, 1, 1, 0, 0, 1, 0, 0, 4, 0, 1, 0), parch = c(0, 0, 0, 
    0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 5, 0, 0, 1, 0, 0, 0), fare = c(7.25, 
    71.2833, 7.925, 53.1, 8.05, 8.4583, 51.8625, 21.075, 11.1333, 
    30.0708, 16.7, 26.55, 8.05, 31.275, 7.8542, 16, 29.125, 13, 
    18, 7.225), embarked = structure(c(4L, 2L, 4L, 4L, 4L, 3L, 
    4L, 4L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 2L), .Label = c("", 
    "C", "Q", "S"), class = "factor")), .Names = c("survived", 
"pclass", "sex", "age", "sibsp", "parch", "fare", "embarked"), row.names = c(NA, 
20L), class = "data.frame") 

Trả lời

4

phần đầu tiên Đây là một lỗi; các giá trị NA không được là 1 (rõ ràng). Trong thời gian chờ đợi, bạn có thể sử dụng model.matrix để tạo các biến giả, nhưng bạn có thể phải thực hiện điều này cùng một lúc cho tất cả dữ liệu. Ngoài ra, nếu bạn đang sử dụng train, bạn có thể sử dụng phương thức công thức. Nhìn chung, đó là một cách tiếp cận tốt hơn.

Tôi sẽ sửa lỗi này trong vài tuần tới. Tôi sắp phát hành một phiên bản của caret và điều này, cộng với UseR, sẽ trì hoãn tôi một chút.

EDIT: một phiên bản mới sẽ được phát hành trong tuần tới, có thể chữa các lỗi

Max

+1

Cảm ơn bạn đã trả lời. 'model.matrix' dường như không thực hiện thủ thuật vì nó bỏ qua bất kỳ hàng nào có NA trong đó. Xin vui lòng cho tôi biết nếu có một cách để làm cho nó hoạt động. Cảm ơn. – mchangun