Saya sedang membangun alur kerja untuk membuat model pembelajaran mesin (dalam kasus saya, menggunakan Python pandas
dan sklearn
paket - paket) dari data yang diambil dari database yang sangat besar (di sini, Vertica melalui SQL dan pyodbc
), dan langkah penting dalam proses itu melibatkan memasukkan hilang nilai-nilai prediktor. Ini sangat mudah dalam satu platform analytics atau stats --- baik itu Python, R, Stata, dll--- tapi saya ingin tahu di mana yang terbaik untuk menemukan langkah ini dalam alur kerja multi-platform.
Cukup sederhana untuk melakukan ini dengan Python, baik dengan sklearn.preprocessing.Imputer
kelas, menggunakan pandas.DataFrame.fillna
metode, atau dengan tangan (tergantung pada kompleksitas metode imputasi yang digunakan). Tapi karena saya akan menggunakan ini untuk puluhan atau ratusan kolom di ratusan juta catatan, saya ingin tahu apakah ada cara yang lebih efisien untuk melakukan ini secara langsung melalui SQL sebelumnya. Selain potensi efisiensi melakukan hal ini dalam platform terdistribusi seperti Vertica, ini akan memiliki manfaat tambahan yang memungkinkan kami untuk membuat saluran pipa otomatis untuk membangun versi tabel "lengkap", jadi kami tidak perlu mengisi set baru nilai yang hilang dari awal setiap kali kita ingin menjalankan model.
Saya belum dapat menemukan banyak panduan tentang ini, tetapi saya membayangkan bahwa kita dapat:
- buat tabel nilai-nilai pengganti (misalnya, rata-rata / median / mode, baik keseluruhan atau kelompok) untuk setiap kolom tidak lengkap
- bergabung dengan tabel nilai pengganti dengan tabel asli untuk menetapkan nilai pengganti untuk setiap baris dan kolom tidak lengkap
- gunakan serangkaian pernyataan kasus untuk mengambil nilai asli jika tersedia dan nilai pengganti sebaliknya
Apakah ini hal yang wajar untuk dilakukan di Vertica / SQL, atau adakah alasan bagus untuk tidak repot dan hanya menanganinya dengan Python saja? Dan jika yang terakhir, apakah ada alasan kuat untuk melakukan ini di panda daripada sklearn atau sebaliknya? Terima kasih!