Pemilihan fitur & model dengan glmnet pada data Metilasi (p >> N)

29

Saya ingin menggunakan GLM dan Elastic Net untuk memilih fitur-fitur yang relevan + membangun model regresi linier (yaitu, baik prediksi dan pemahaman, sehingga akan lebih baik dibiarkan dengan parameter yang relatif sedikit). Outputnya kontinu. Ini gen per 50 kasus. Saya telah membaca tentang paket tersebut, tetapi saya tidak 100% yakin tentang langkah-langkah yang harus diikuti:2000050glmnet

  1. Lakukan CV untuk memilih lambda:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1) diberi data input, apakah Anda memilih nilai alpha yang berbeda?
    (Q2) apakah saya perlu melakukan hal lain sebelum membuat model?

  2. Sesuai dengan model:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (Q3) ada yang lebih baik dari "kovarians"?
    (Q4) Jika lambda dipilih oleh CV, mengapa langkah ini perlu nlambda=?
    (Q5) apakah lebih baik digunakan lambda.minatau lambda.1se?

  3. Dapatkan koefisien, untuk melihat parameter mana yang jatuh ("."):
    predict(model, type="coefficients")

    Di halaman bantuan ada banyak predictmetode (misalnya, predict.fishnet, predict.glmnet, predict.lognet, dll). Tapi setiap prediksi "polos" seperti yang saya lihat pada contoh.
    (Q6) Haruskah saya menggunakan predictatau predict.glmnetatau lainnya?

Terlepas dari apa yang saya baca tentang metode regularisasi, saya cukup baru dalam R dan dalam paket statistik ini, jadi sulit untuk memastikan apakah saya mengadaptasi masalah saya ke kode. Setiap saran akan disambut.

PEMBARUAN
Berdasarkan "Seperti yang disebutkan sebelumnya, objek kereta kelas berisi elemen yang disebut finalModel, yang merupakan model yang sesuai dengan nilai parameter tuning yang dipilih oleh resampling. Objek ini dapat digunakan dengan cara tradisional untuk menghasilkan prediksi untuk sampel baru, menggunakan itu fungsi prediksi model. "

Menggunakan caretuntuk menyetel alfa dan lambda:

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  

Apakah fitMmengganti langkah 2 sebelumnya? Jika demikian, bagaimana cara menentukan opsi glmnet ( type.gaussian="naive",lambda=cv$lambda.min/1se) sekarang?
Dan berikut predictlangkah, bisa saya ganti modelke fitM?

Jika aku melakukan

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  
  predict(fitM$finalModel, type="coefficients")

apakah masuk akal sama sekali atau saya salah mencampur kedua kosa kata paket?

PGreen
sumber

Jawaban:

42

Bagian 1

Dalam jaring elastis dua jenis kendala pada parameter digunakan

  1. βj
  2. βj

α

αλλcv.glmnet

αλ

Bagian 2

Q3

mn?glmnet

type.gaussian = "naive"

mn"naive"n

glmnet"naive"m>500

Q4

nlambdaα=0.5λλnlambda

Q5

lambda.minλλklambda.1seλlambda.minlambda.1seλkEstimasi CV lipat dari kesalahan model terbaik.

Pilihan ada padamu:

  1. Model terbaik yang mungkin terlalu kompleks dengan sedikit overfitted: lambda.min
  2. Model paling sederhana yang memiliki kesalahan yang sebanding dengan model terbaik diberikan ketidakpastian: lambda.1se

Bagian 3

Ini adalah yang sederhana dan merupakan sesuatu yang akan Anda temui banyak dengan R. Anda menggunakan predict()fungsi 99,9% dari waktu. R akan mengatur penggunaan fungsi yang benar untuk objek yang disediakan sebagai argumen pertama.

Lebih teknis, predictadalah fungsi generik, yang memiliki metode (versi fungsi) untuk objek dari tipe yang berbeda (secara teknis dikenal sebagai kelas ). Objek yang dibuat oleh glmnetmemiliki kelas tertentu (atau kelas) tergantung pada jenis model yang sebenarnya dipasang. glmnet (paket) menyediakan metode untuk predictfungsi untuk berbagai jenis objek. R tahu tentang metode ini dan akan memilih yang sesuai berdasarkan kelas objek yang disediakan.

Pasang kembali Monica - G. Simpson
sumber
2
Anwser HEBAT! Saya sudah membaca sekarang tentang caret. Tidak 100% yakin tentang hubungan antara paket caret dan glmnet, jadi saya melakukan pembaruan pada pertanyaan saya untuk mengklarifikasi 'penggabungan' paket-paket ini ke paket-paket atau beralih dari glmnet ke caret.
PGreen
1
@PGreen: caretadalah paket R wrapper yang membungkus antarmuka fungsi dari 100+ paket ML agar lebih konsisten dan menambahkan CV, pencarian jaringan, memodifikasi default parameter gila dll. Ini bukan tanpa quirksnya tetapi cukup bagus dan banyak digunakan.
smci
Saya hanya ingin menambahkan itu untuk penyetelan alfa yang dapat Anda gunakan cva.glmnet(..)sebagai ganti hanya cv.glmnet(...)dan menyetel alfa dan lambda secara bersamaan. Kemudian Anda dapat berlari minlossplot(cva.fit)untuk melihat alpha mana yang memberikan hasil terbaik. Ini adalah bagian dari glmnetUtils
Espen Riskedal