Saya mengamati bahwa fungsi laso di MATLAB relatif lambat. Saya menjalankan banyak masalah regresi, dengan biasanya 1 hingga 100 prediktor dan 200 hingga 500 pengamatan. Dalam beberapa kasus, laso ternyata sangat lambat (untuk menyelesaikan masalah regresi butuh beberapa menit). Saya menemukan bahwa ini adalah kasus ketika prediktor sangat berkorelasi (misalnya, seri waktu suhu udara pada titik grid tetangga dari model atmosfer).
Saya membandingkan kinerja contoh di bawah ini di matlab dan R.
y adalah vektor prediktif dan dengan 163 elemen (mewakili pengamatan) dan x adalah matriks prediktor dengan 100 baris dan 163 pengamatan yang sesuai dengan pengamatan pada y. Saya menerapkan fungsi MATLAB laso sebagai berikut:
[beta_L,stats]=lasso(x,y,'cv',4);
Sama di R, menggunakan glmnet:
fit.lasso=cv.glmnet(predictor.ts,predictand.ts,nfolds=4)
Baik MATLAB dan R didasarkan pada algoritma penurunan koordinat. Nilai default untuk jumlah nilai lambda adalah 100 untuk laso dan glmnet. Ambang konvergensi untuk penurunan koordinat per default 10 ^ -4 di matlab, dan bahkan lebih rendah di R (10 ^ -7).
Fungsi R membutuhkan satu detik di komputer saya. Matlab membutuhkan waktu beberapa menit, dengan sebagian besar waktu perhitungan dihabiskan dalam algoritma penurunan koordinat.
Ketika prediktor kurang berkorelasi (misalnya, tipe variabel yang berbeda dari model atmosfer numerik) laso di Matlab tidak begitu lambat, tetapi masih membutuhkan ~ 30 - dibandingkan dengan ~ 1 dalam R).
Apakah matlab laso benar-benar jauh lebih tidak efisien daripada glmnet, atau apakah saya melewatkan sesuatu?