Saya memiliki dataset yang sangat besar dan sekitar 5% nilai acak hilang. Variabel-variabel ini berkorelasi satu sama lain. Contoh berikut dataset R hanyalah contoh mainan dengan data berkorelasi dummy.
set.seed(123)
# matrix of X variable
xmat <- matrix(sample(-1:1, 2000000, replace = TRUE), ncol = 10000)
colnames(xmat) <- paste ("M", 1:10000, sep ="")
rownames(xmat) <- paste("sample", 1:200, sep = "")
#M variables are correlated
N <- 2000000*0.05 # 5% random missing values
inds <- round ( runif(N, 1, length(xmat)) )
xmat[inds] <- NA
> xmat[1:10,1:10]
M1 M2 M3 M4 M5 M6 M7 M8 M9 M10
sample1 -1 -1 1 NA 0 -1 1 -1 0 -1
sample2 1 1 -1 1 0 0 1 -1 -1 1
sample3 0 0 1 -1 -1 -1 0 -1 -1 -1
sample4 1 0 0 -1 -1 1 1 0 1 1
sample5 NA 0 0 -1 -1 1 0 NA 1 NA
sample6 -1 1 0 1 1 0 1 1 -1 -1
sample7 NA 0 1 -1 0 1 -1 0 1 NA
sample8 1 -1 -1 1 0 -1 -1 1 -1 0
sample9 0 -1 0 -1 1 -1 1 NA 0 1
sample10 0 -1 1 0 1 0 0 1 NA 0
Apakah ada cara (terbaik) untuk menyalahkan nilai yang hilang dalam situasi ini? Apakah algoritma Random Forest bermanfaat? Solusi kerja apa pun di R akan sangat dihargai.
Suntingan:
(1) Hilang nilai didistribusikan secara acak antara variabel dan samples.As jumlah variabel adalah sangat besar (di sini dalam contoh - 10000), sedangkan jumlah sampel kecil di sini di contoh boneka di atas itu adalah sekitar 200. Jadi, ketika kita melihat sampel apa pun dari semua variabel (10000), ada kemungkinan besar bahwa akan ada nilai yang hilang pada beberapa variabel - karena sejumlah besar variabel. Jadi hanya menghapus sampel bukan pilihan.
(2) Variabel dapat diperlakukan baik secara kuantitatif atau kualitatif (biner) dalam proses imputasi. Satu-satunya penilaian adalah seberapa baik kita dapat memperkirakannya (akurasi). Jadi prediksi seperti 0,98 bukannya 1 mungkin bisa diterima daripada 0 vs 1 atau -1 vs 1. Saya mungkin perlu tradeoff antara waktu komputasi dan akurasi.
(3) Masalah yang saya pikirkan bagaimana overfitting dapat mempengaruhi hasil karena jumlah variabel besar dibandingkan dengan jumlah sampel.
(4) Karena jumlah total nilai yang hilang adalah sekitar 5% dan acak (tidak terkonsentrasi dalam variabel atau sampel apa pun karena tindakan pencegahan diambil untuk menghapus variabel atau sampel yang memiliki nilai hilang yang sangat tinggi)
(5) Membuat data lengkap untuk analisis adalah tujuan pertama dan akurasi kedua. Jadi tidak terlalu peka terhadap keakuratan.
sumber
Jawaban:
Ada dua cara untuk menangani masalah variabel besar dan sampel kecil (pengamatan), tergantung pada situasi dan dataset Anda.
(1) cukup gunakan sampel (pengamatan) sebagai variabel asalkan skor seluruh variabel sama atau dinormalisasi.
(2) Gunakan variabel sebagai variabel tetapi lakukan beberapa pengambilan sampel secara acak sambil menghitung sehingga jumlah variabel kurang dari jumlah sampel dan akhirnya menggabungkan data.
Berikut ini adalah latihan, Anda dapat menyesuaikan dengan kebutuhan Anda. Saya memiliki asumsi variabel kontinu tetapi Anda berolahraga serupa untuk variabel diskrit. Di sini saya memberikan contoh kecil untuk pemeriksaan cepat.
Pertama, untuk latihan menghasilkan data berkorelasi, di sini pengamatan (sampel) berkorelasi, mungkin realistis dalam situasi dimana variabel diasumsikan independen sedangkan pengamatan berkorelasi. Tetapi dalam situasi lain di mana kedua observasi dan variabel berkorelasi.
Saya menggunakan
missForest
paket untuk imputasi, yang tergantung padarandomForest
paket untuk melakukannya. Anda dapat melakukan komputasi paralel jika Anda memiliki jumlah besar poin data untuk menyalahkan.Karena ini adalah set data yang disimulasikan, kita memiliki kemewahan memperkirakan keakuratan imputasi dengan membandingkan yang asli sebelum nilai-nilai yang hilang diperkenalkan dengan imputasi.
Anda dapat bekerja untuk meningkatkan akurasi. Semoga berhasil !
sumber
Ada buku lengkap tentang imputasi data sehingga sulit untuk memberikan jawaban dalam kerangka ini.
Hal termudah untuk dilakukan dalam hal ini adalah memilih salah satu kolom ( ) dan mengumpulkan yang lain dalam matriks .xy x
Model dilatih dan nilai yang hilang diganti dengan nilai yang diprediksi oleh model kami. Data Anda tampaknya kategorikal sehingga hutan acak bisa menjadi pilihan yang baik.y= f( x )
Jika dataset Anda sangat besar, pastikan untuk menggunakan algoritma cepat atau yang terukur.
sumber
Ini pertanyaan yang sangat menarik. Saya juga mencari hal yang sama. Sebenarnya, ada banyak cara berbeda untuk menghadapinya.
Hal pertama, menurut saya, adalah menentukan jenis data apa yang Anda miliki - hilang secara acak (MCAR), hilang secara acak (MAR), atau hilang tidak secara acak (NMAR). Ini sulit dan kontroversial untuk dibuktikan tetapi makalah ini menunjukkan cara yang menarik untuk melihat data MAR.
Untuk menangani beberapa imputasi, R memiliki beberapa paket:
MICE
(yang tampaknya sangat digunakan),randomForest
,Hmisc
Amelia
mi
Ini hanya beberapa paket yang saya temukan sejauh ini.
MICE
juga telah menerapkan hutan acak dan beberapa metode lain, seperti pencocokan rata-rata prediktif.Ini tidak banyak tetapi dapat membantu Anda mengetahui beberapa hal. Segera setelah saya mendapatkan hasil atau memutuskan metode mana yang akan saya gunakan, saya akan mengedit posting.
Semoga berhasil!
sumber
Pertanyaan menarik. Trik untuk ini adalah bahwa, untuk melakukan beberapa imputasi, Anda memerlukan lebih dari sekedar model prediksi (yang bisa / akan mudah diperoleh dalam, katakanlah, pendekatan pembelajaran mesin). Kami akan menyebut model ini model simulasi, karena mereka tidak cukup model probabilitas.
Aspek gabungan dari pemilihan fitur (big ) dan pelatihan model simulasi membuat saya berpikir bahwa pendekatan Bayesian adalah yang terbaik. Itu juga berarti bahwa tidak ada pendekatan yang jelas untuk ini. Bagi saya pendekatan terbaik akan memiliki pendekatan berikut:p
sumber
Masalah Anda tampaknya dibuat khusus untuk semacam penyelesaian matriks peringkat rendah. Coba gunakan
impute.svd()
fungsi daribcv
paket . Saya menyarankan menggunakan peringkat kecil (argumenk
) - sekitar 5.sumber