2016-10-06 19 views
5

Tôi có tập dữ liệu và tôi muốn tạo mô hình, tốt nhất là với gói caret. Dữ liệu của tôi thực sự là một chuỗi thời gian nhưng câu hỏi không phải là cụ thể cho chuỗi thời gian, nó chỉ là tôi làm việc với CreateTimeSlices cho phân vùng dữ liệu.Loại trừ các giá trị bị thiếu khỏi tính toán hiệu suất mô hình

Dữ liệu của tôi có một số lượng giá trị thiếu nhất định là NA và tôi đã gán riêng cho chúng một cách riêng biệt của mã caret. Tôi cũng giữ một kỷ lục vị trí của họ:

# a logical vector same size as the data, which obs were imputed NA 
imputed=c(FALSE, FALSE, FALSE, TRUE, FALSE, FALSE) 
imputed[imputed] <- NA; print(imputed) 
#### [1] FALSE FALSE FALSE NA FALSE FALSE 

Tôi biết có một tùy chọn trong Caret train chức năng hoặc là loại trừ NA hoặc quy cho họ với các kỹ thuật khác nhau. Đó là không phải những gì tôi muốn. Tôi cần xây dựng mô hình trên tập dữ liệu đã được phỏng đoán nhưng Tôi muốn loại trừ các điểm bị tranh chấp khỏi việc tính toán các chỉ số lỗi (RMSE, MAE, ...).

Tôi không biết cách thực hiện điều này trong dấu mũ. Trong kịch bản đầu tiên của tôi, tôi đã cố gắng để làm toàn bộ kiểm chứng chéo bằng tay, và sau đó tôi đã có một biện pháp lỗi tùy chỉnh:

actual = c(5, 4, 3, 6, 7, 5) 
predicted = c(4, 4, 3.5, 7, 6.8, 4) 
Metrics::rmse(actual, predicted) # with all the points 
#### [1] 0.7404953 
sqrt(mean((!imputed)*(actual-predicted)^2 , na.rm=T)) # excluding the imputed 
#### [1] 0.676757 

Làm thế nào tôi có thể xử lý theo cách này làm trong caret? Hay có cách nào khác để tránh mã hóa mọi thứ bằng tay?

+0

Âm thanh như thứ gì đó yêu cầu mã tùy chỉnh, không phải 'caret', với tôi. –

+0

Tôi cũng nghĩ đến việc sử dụng đối số 'trọng số 'nhưng nó không rõ ràng khi nó được đưa vào tài khoản hay không. – agenis

Trả lời

4

Tôi không biết nếu bạn đang tìm kiếm điều này nhưng đây là một giải pháp đơn giản bằng cách tạo một hàm.

i=which(imputed==F) ## As you have index for NA values 

metric_na=function(fun, actual, predicted, index){ 
    fun(actual[index], predicted[index]) 
} 

metric_na(Metrics::rmse, actual, predicted, index = i) 
0.676757 
metric_na(Metrics::mae, actual, predicted, index = i) 
0.54 

Ngoài ra, bạn chỉ có thể sử dụng chỉ mục trực tiếp trong khi tính số liệu mong muốn.

Metrics::rmse(actual[i], predicted[i]) 
+0

Cảm ơn, đó là một chức năng tốt mà thực sự giúp, tôi chắc chắn sẽ thực hiện nó nó không ai nghĩ rằng nó có thể với dấu mũ :-) – agenis

+0

Tôi nghĩ rằng nó sẽ là có thể nhưng nó sẽ đòi hỏi một số nỗ lực. Ngoài ra, hãy xem [this] (http://stackoverflow.com/questions/28232658/how-to-change-metrics-using-the-librarycaret/28278334#28278334) đăng nếu bạn chưa có. –

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