Làm cách nào để kết hợp các trọng số vào các tiêu chí minsplit
trong rpart
, khi trọng lượng không đồng đều? Tôi không thể tìm được cách cho ngưỡng minsplit
để cân nhắc trọng lượng và khi trọng số không đồng đều, nó sẽ trở thành vấn đề, như ví dụ sau đây. Cách giải quyết hiện tại của tôi là mở rộng dữ liệu thành một trong đó mỗi hàng là một quan sát, nhưng điều đó dường như lãng phí trong cả thời gian và bộ nhớ (và tôi nghi ngờ mình có thể giữ bộ dữ liệu thực mà tôi cần làm việc trong bộ nhớ trong biểu mẫu mở rộng của mình), do đó - chuyển sang trợ giúp. Cảm ơn trước sự giúp đỡ của bạn, -SaarSử dụng minsplit và trọng số bất bình đẳng trong rpart
Mã sau đây cho biết vấn đề là gì; 3 cây đầu tiên giống nhau, nhưng hai cây sau đây (với trọng lượng không đồng đều) khác nhau:
## playing with rpart weights
require(rpart)
dev.new()
par(mfrow=c(2,3), xpd=NA)
data(kyphosis)
fitOriginal <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis, control=rpart.control(minsplit=15))
plot(fitOriginal)
text(fitOriginal, use.n=TRUE)
# this dataset is the original data repeated 3 times
kyphosisRepeated <- rbind(kyphosis, kyphosis, kyphosis)
fitRepeated <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosisRepeated, control=rpart.control(minsplit=45))
plot(fitRepeated)
text(fitRepeated, use.n=TRUE)
# instead of repeating, use weights
kyphosisWeighted <- kyphosis
kyphosisWeighted$myWeights <- 3
fitWeighted <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosisWeighted, weights=myWeights,
control=rpart.control(minsplit=15)) ## minsplit has to be adjusted for weights...
plot(fitWeighted)
text(fitWeighted, use.n=TRUE)
# uneven weights don't works the same way
kyphosisUnevenWeights <- rbind(kyphosis, kyphosis)
kyphosisUnevenWeights$myWeights <- c(rep(1,length.out=nrow(kyphosis)), rep(2,length.out=nrow(kyphosis)))
fitUneven15 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosisUnevenWeights, weights=myWeights,
control=rpart.control(minsplit=15))
plot(fitUneven15)
text(fitUneven15, use.n=TRUE)
fitUneven45 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosisUnevenWeights, weights=myWeights,
control=rpart.control(minsplit=45))
plot(fitUneven45)
text(fitUneven45, use.n=TRUE)
## 30 works, but seems like a special case
fitUneven30 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosisUnevenWeights, weights=myWeights,
control=rpart.control(minsplit=30))
plot(fitUneven30)
text(fitUneven30, use.n=TRUE)
Tôi đang cố gắng làm việc với trọng số không cân bằng và minsplit trên tập dữ liệu chung và ví dụ cho thấy nó không hoạt động. Cân bằng trọng lượng không phải là giải pháp chung, có thể dẫn đến tập dữ liệu quá lớn. – Saar
@ Saar, tôi xin lỗi Nếu tôi thiếu điều gì đó hiển nhiên. Bạn nói rằng các ví dụ cho thấy "nó không hoạt động". Theo cách nào nó không hoạt động? Khi tôi thử nghiệm các ví dụ, một cây lớn lên trong mỗi chúng mà không có bất kỳ lỗi nào. Có phải một trong những cây mọc theo cách mà bạn không ngờ? – Ben
Trong tất cả 6 ví dụ, dữ liệu là cùng một dữ liệu, được biểu diễn theo nhiều cách khác nhau (trừ ví dụ đầu tiên): Mỗi lần quan sát lặp lại ba lần, xuất hiện một lần nhưng có trọng số là 3 hoặc xuất hiện hai lần với trọng số lên tới 3 Tôi hy vọng những cây được xây dựng từ nó thành cùng một cây (cùng một dữ liệu, cùng một thuật toán, cùng điều kiện sẽ dẫn đến cùng một kết quả đầu ra). Cụ thể, ví dụ thứ năm sẽ cho tôi cùng một cây như ví dụ thứ hai và thứ ba. Nó không. Đây không phải là lỗi thời gian chạy, đó là về việc trả lời sai ... – Saar