Tôi quan sát thấy hàm lasso trong MATLAB tương đối chậm. Tôi chạy nhiều vấn đề hồi quy, với 1 đến 100 dự đoán và 200 đến 500 quan sát. Trong một số trường hợp, lasso hóa ra cực kỳ chậm (để giải quyết vấn đề hồi quy phải mất vài phút). Tôi phát hiện ra rằng đây là trường hợp khi các yếu tố dự đoán có mối tương quan cao (ví dụ: chuỗi thời gian nhiệt độ không khí tại các điểm lưới lân cận của mô hình khí quyển).
Tôi đã so sánh các màn trình diễn của ví dụ dưới đây trong matlab và R.
y là vectơ dự đoán có 163 phần tử (đại diện cho các quan sát) và x là ma trận dự đoán có 100 hàng và 163 quan sát tương ứng với các quan sát trong y. Tôi đã áp dụng hàm MATLAB lasso như sau:
[beta_L,stats]=lasso(x,y,'cv',4);
Tương tự trong R, sử dụng glmnet:
fit.lasso=cv.glmnet(predictor.ts,predictand.ts,nfolds=4)
Cả MATLAB và R đều dựa trên thuật toán gốc tọa độ. Giá trị mặc định cho số lượng giá trị lambda là 100 cho cả lasso và glmnet. Ngưỡng hội tụ cho gốc tọa độ là trên 10 ^ -4 mặc định trong matlab và thậm chí thấp hơn ở R (10 ^ -7).
Chức năng R mất một giây trên máy tính của tôi. Matlab mất vài phút, với phần lớn thời gian tính toán dành cho thuật toán gốc tọa độ.
Khi các yếu tố dự đoán ít tương quan hơn (ví dụ, các loại biến khác nhau của mô hình khí quyển số), Lasso trong Matlab không quá chậm, nhưng vẫn mất ~ 30 - so với ~ 1 s trong R).
Là Matlab lasso thực sự kém hiệu quả hơn nhiều so với glmnet, hay tôi bỏ lỡ điều gì?