Tôi đang sử dụng cv.glmnet
để tìm dự đoán. Thiết lập tôi sử dụng như sau:
lassoResults<-cv.glmnet(x=countDiffs,y=responseDiffs,alpha=1,nfolds=cvfold)
bestlambda<-lassoResults$lambda.min
results<-predict(lassoResults,s=bestlambda,type="coefficients")
choicePred<-rownames(results)[which(results !=0)]
Để đảm bảo kết quả là tái sản xuất tôi set.seed(1)
. Các kết quả rất khác nhau. Tôi đã chạy chính xác mã 100 để xem kết quả biến như thế nào. Trong 98/100 lượt chạy, có một yếu tố dự đoán cụ thể luôn được chọn (đôi khi chỉ riêng nó); các yếu tố dự đoán khác đã được chọn (đồng hiệu quả là khác không) thường là 50/100 lần.
Vì vậy, nó nói với tôi rằng mỗi lần xác thực chéo đang chạy, nó có thể sẽ chọn một lambda tốt nhất khác nhau, bởi vì sự ngẫu nhiên ban đầu của các nếp gấp là vấn đề. Những người khác đã thấy vấn đề này ( kết quả CV.glmnet ) nhưng không có giải pháp được đề xuất.
Tôi đang nghĩ rằng có lẽ cái nào xuất hiện 98/100 có lẽ tương quan cao với tất cả những cái khác? Các kết quả sẽ ổn định nếu tôi chỉ chạy LOOCV ( Fold ), nhưng tôi tò mò tại sao chúng lại biến đổi như vậy khi .
set.seed(1)
một lần sau đó chạycv.glmnet()
100 lần? Đó không phải là phương pháp tuyệt vời cho khả năng tái sản xuất; tốt hơn làset.seed()
phải trước mỗi lần chạy, hoặc nếu không thì giữ cho các nếp gấp không đổi trong các lần chạy. Mỗi cuộc gọi của bạn đếncv.glmnet()
được gọisample()
N lần. Vì vậy, nếu độ dài dữ liệu của bạn thay đổi, độ lặp lại sẽ thay đổi.