Làm thế nào để áp đặt một biến dự báo phân loại bị thiếu cho một mô hình rừng ngẫu nhiên?


8

Tôi có một bộ dữ liệu x, y tôi đang sử dụng để xây dựng một khu rừng ngẫu nhiên. Dữ liệu x là một vectơ của các giá trị bao gồm một số NA. Vì vậy, tôi sử dụng rfImputeđể xử lý dữ liệu còn thiếu và tạo một khu rừng ngẫu nhiên. Bây giờ tôi có một quan sát vô hình mới x (với NA) và tôi muốn dự đoán y. Làm cách nào để xác định giá trị còn thiếu để tôi có thể sử dụng rừng ngẫu nhiên mà tôi đã trồng? Các rfImputechức năng dường như đòi hỏi x và y. Tôi chỉ có x cho mục đích dự đoán.

Câu hỏi của tôi tương tự (nhưng khác nhau) với câu hỏi này . Và ví dụ, tôi có thể sử dụng cùng một bộ dữ liệu iris. Nếu tôi đã giải thích chính xác mã trong câu trả lời cho câu hỏi tôi tham chiếu, mã iris.na[148, , drop=FALSE]trong câu lệnh iris.na2 = rbind(iris.imputed, iris.na[148, , drop=FALSE])biểu thị dữ liệu mới bao gồm Species(giá trị Y). Trong vấn đề của tôi, tôi sẽ không biết rằng Speciestôi muốn sử dụng rừng ngẫu nhiên để dự đoán điều đó. Tôi sẽ có 4 biến độc lập, nhưng một số có thể NAdành cho một hàng nhất định. Để tiếp tục tương tự, hãy tưởng tượng tôi có 3 trong số 4 biến (một biến bị thiếu). Tôi muốn áp đặt giá trị đó. Sau đó, tôi muốn dự đoán các loài mà tôi không biết.

Để đáp lại bình luận của gung rằng tôi nên thêm một minh họa, hãy để tôi đặt nó dưới dạng tập dữ liệu mống mắt. Hãy tưởng tượng tôi có dữ liệu sau đây về một bông hoa. Tôi biết đó là Sepal.Length, Sepal.Width, Petal.Length, nhưng không phải Petal.Width. Tôi muốn áp đặt Petal.Widthvà sau đó sử dụng 4 giá trị đó trong mô hình RF để dự đoán Species.


Bạn đang nói bạn không có gì ? Bạn bắt đầu chỉ với x & y để xây dựng một mô hình, và bây giờ bạn muốn dự đoán y cho một quan sát mà bạn không có x hay y. Đúng không?
gung - Phục hồi Monica

gung, tôi có một cái gì đó Tôi có một quan sát x mới nhưng không có y. Tôi muốn dự đoán y dựa trên x mới. Nhưng vectơ x có một số giá trị NA mà tôi muốn áp đặt. Cảm ơn.
rmacey

Tôi thấy, vì vậy x là một tập hợp các biến dự đoán nơi bạn có một số nhưng không phải là các biến khác. Có đúng không? Bạn có thể muốn cập nhật Q của mình (sẽ cập nhật nó trên trang chính) và bạn có thể muốn đưa vào một ví dụ minh họa nhỏ. Một lưu ý cần thận trọng: Q này nhìn vào đường viền của 'làm thế nào để tôi sử dụng R?' & / hoặc 'mã nào sẽ giúp tôi làm điều này?', mã này sẽ được coi là chương trình-y & có thể bị đóng. Bạn nên chắc chắn rằng đây là một câu hỏi về RF, chứ không phải làm thế nào để thực hiện RF w / R.
gung - Tái lập Monica

LOL ... khi tôi đưa nó vào trao đổi ngăn xếp đơn giản, họ đề nghị tôi chuyển nó đến đây. Đây thực sự là về rfImpute hoặc một cái gì đó tương tự.
rmacey

Theo "trao đổi ngăn xếp đơn giản", bạn có nghĩa là Stack Overflow ? Nếu câu hỏi của bạn là làm thế nào để sử dụng mã, nó sẽ đến đó; Nếu đó là cách hiểu các số liệu thống kê cơ bản, nó sẽ xuất hiện ở đây. (Tất nhiên, cũng có những Q không có chủ đề ở cả hai nơi.) Tôi không nghĩ Q của bạn nhất thiết phải lạc đề ở đây. Tôi chỉ thông báo cho bạn cẩn thận cách bạn nói nó, vì vậy rõ ràng đó là một câu hỏi thống kê, không phải là một câu hỏi mã hóa.
gung - Phục hồi Monica

Câu trả lời:


4

Tôi nghĩ rằng bạn cần một phương pháp tranh chấp không giám sát. Đó là một trong đó không sử dụng các giá trị đích để cắt bỏ. Nếu bạn chỉ có một vài vectơ tính năng dự đoán, có thể khó phát hiện ra cấu trúc dữ liệu. Thay vào đó, bạn có thể trộn dự đoán của mình với các vectơ tính năng đào tạo đã được liệt kê và sử dụng cấu trúc này để áp đặt một lần nữa. Lưu ý quy trình này có thể vi phạm các giả định về tính độc lập, do đó bọc toàn bộ quy trình trong xác nhận chéo bên ngoài để kiểm tra tình trạng quá mức nghiêm trọng.

Tôi mới tìm hiểu về missForest từ một bình luận cho câu hỏi này . missForest dường như thực hiện các mẹo. Tôi mô phỏng vấn đề của bạn trên dữ liệu mống mắt. (không có xác nhận chéo bên ngoài)

rm(list=ls())
data("iris")
set.seed(1234)
n.train = 100
train.index = sample(nrow(iris),n.train)
feature.train = as.matrix(iris[ train.index,1:4])
feature.test  = as.matrix(iris[-train.index,1:4])


#simulate 40 NAs in train
n.NAs = 40
NA.index = sample(length(feature.train),n.NAs)
NA.feature.train = feature.train; NA.feature.train[NA.index] = NA

#imputing 40 NAs unsupervised
library(missForest)
imp.feature.train = missForest(NA.feature.train)$ximp
#check how well imputation went, seems promsing for this data set
plot(    feature.train[NA.index],xlab="true value",
     imp.feature.train[NA.index],ylab="imp  value",)

#simulate random NAs in feature test
feature.test[sample(length(feature.test),20)] = NA

#mix feature.test with imp.feature.train
nrow.test = nrow(feature.test)
mix.feature = rbind(feature.test,imp.feature.train)
imp.feature.test = missForest(mix.feature)$ximp[1:nrow.test,]

#train RF and predict
library(randomForest)
rf = randomForest(imp.feature.train,iris$Species[train.index])
pred.test = predict(rf,imp.feature.test)
table(pred.test, iris$Species[-train.index])

Printing...
-----------------
pred.test    setosa versicolor virginica
  setosa         12          0         0
  versicolor      0         20         2
  virginica       0          1        15
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.