Tính toán thủ công không khớp với RandomForest () để kiểm tra dữ liệu mới


38

Tôi biết đây là một Rcâu hỏi khá cụ thể , nhưng tôi có thể suy nghĩ về phương sai tỷ lệ được giải thích, , không chính xác. Ở đây đi.R2

Tôi đang cố gắng sử dụng Rgói randomForest. Tôi có một số dữ liệu đào tạo và dữ liệu thử nghiệm. Khi tôi phù hợp với một mô hình rừng ngẫu nhiên, randomForestchức năng cho phép bạn nhập dữ liệu thử nghiệm mới để kiểm tra. Sau đó nó cho bạn biết tỷ lệ phương sai được giải thích trong dữ liệu mới này. Khi tôi nhìn vào điều này, tôi nhận được một số.

Khi tôi sử dụng predict()hàm để dự đoán giá trị kết quả của dữ liệu thử nghiệm dựa trên mô hình phù hợp với dữ liệu huấn luyện và tôi lấy hệ số tương quan bình phương giữa các giá trị này và giá trị kết quả thực tế cho dữ liệu thử nghiệm, tôi nhận được một số khác. Những giá trị này không khớp với nhau .

Đây là một số Rmã để chứng minh vấn đề.

# use the built in iris data
data(iris)

#load the randomForest library
library(randomForest)

# split the data into training and testing sets
index <- 1:nrow(iris)
trainindex <- sample(index, trunc(length(index)/2))
trainset <- iris[trainindex, ]
testset <- iris[-trainindex, ]

# fit a model to the training set (column 1, Sepal.Length, will be the outcome)
set.seed(42)
model <- randomForest(x=trainset[ ,-1],y=trainset[ ,1])

# predict values for the testing set (the first column is the outcome, leave it out)
predicted <- predict(model, testset[ ,-1])

# what's the squared correlation coefficient between predicted and actual values?
cor(predicted, testset[, 1])^2

# now, refit the model using built-in x.test and y.test
set.seed(42)
randomForest(x=trainset[ ,-1], y=trainset[ ,1], xtest=testset[ ,-1], ytest=testset[ ,1])

Câu trả lời:


52

Lý do mà các giá trị không khớp là do biến thể báo cáo được giải thích trái ngược với phương sai được giải thích. Tôi nghĩ rằng đây là một sự hiểu lầm phổ biến về được duy trì trong sách giáo khoa. Tôi thậm chí đã đề cập đến điều này trên một chủ đề khác vào ngày khác. Nếu bạn muốn có một ví dụ, hãy xem sách giáo khoa (nếu không khá tốt), Saber và Lee, Phân tích hồi quy tuyến tính , thứ 2. chủ biênR 2R2randomForestR2

Một định nghĩa chung cho là R 2 = 1 - Σ i ( y i - y i ) 2R2

R2= =1-Σtôi(ytôi-y^tôi)2Σtôi(ytôi-y¯)2.

Đó là, chúng tôi tính toán sai số bình phương trung bình, chia nó cho phương sai của các quan sát ban đầu và sau đó trừ nó khỏi một. (Lưu ý rằng nếu dự đoán của bạn thực sự xấu, giá trị này có thể bị âm.)

Bây giờ, điều xảy ra với hồi quy tuyến tính ( với thuật ngữ chặn! ) Là giá trị trung bình của phù hợp với . Hơn nữa, vectơ dư trực giao với vectơ của các giá trị được trang bị . Khi bạn đặt hai thứ này lại với nhau, thì định nghĩa sẽ giảm xuống thành một thứ thường gặp hơn, nghĩa là, (Tôi đã sử dụng các chỉ số trong để biểu thị hồi quy tuyến tính .)y^tôiy¯y-y^y^

RLR2= =Corr(y,y^)2.
LRRLR2

Cuộc randomForestgọi đang sử dụng định nghĩa đầu tiên, vì vậy nếu bạn thực hiện

   > y <- testset[,1]
   > 1 - sum((y-predicted)^2)/sum((y-mean(y))^2)

bạn sẽ thấy rằng câu trả lời phù hợp.


1
+1, câu trả lời tuyệt vời. Tôi luôn tự hỏi tại sao công thức ban đầu được sử dụng cho thay vì bình phương tương quan. Đối với hồi quy tuyến tính, nó là như nhau, nhưng khi áp dụng cho các bối cảnh khác, nó luôn luôn gây nhầm lẫn. R2
mpiktas

(+1) Phản ứng rất thanh lịch, thực sự.
chl

@mpiktas, @chl, tôi sẽ cố gắng mở rộng về vấn đề này một chút nữa vào hôm nay. Về cơ bản, có một kết nối chặt chẽ (nhưng, có lẽ, hơi bị ẩn) để kiểm tra giả thuyết trong nền. Ngay cả trong cài đặt hồi quy tuyến tính, nếu vectơ không đổi không nằm trong không gian cột của ma trận thiết kế, thì định nghĩa "tương quan" sẽ thất bại.
Đức hồng y

Nếu bạn có một tài liệu tham khảo khác ngoài sách giáo khoa của Saber / Lee (tôi không thể truy cập được), tôi rất muốn thấy một lời giải thích tốt về cách giải thích biến thể (ví dụ 1-SSerr / SStot) khác với hệ số tương quan bình phương, hoặc giải thích phương sai. Cảm ơn một lần nữa cho tiền boa.
Stephen Turner

Nếu giá trị bình phương R là âm từ kết quả hồi quy biến công cụ, có cách nào để loại bỏ giá trị âm này và chuyển thành giá trị dương vì mục đích báo cáo không? Vui lòng tham khảo liên kết này: stata.com/support/faqs/statistic/two-stage-least-squares
Eric
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.