Bagaimana menerapkan standardisasi / normalisasi ke train- and testset jika prediksi adalah tujuannya?

47
  1. Apakah saya mengubah semua data atau lipatan saya (jika CV diterapkan) secara bersamaan? misalnya

    (allData - mean(allData)) / sd(allData)

  2. Apakah saya mengubah trainset dan testset secara terpisah? misalnya

    (trainData - mean(trainData)) / sd(trainData)

    (testData - mean(testData)) / sd(testData)

  3. Atau apakah saya mengubah trainset dan menggunakan perhitungan pada testset? misalnya

    (trainData - mean(trainData)) / sd(trainData)

    (testData - mean(trainData)) / sd(trainData)

Saya percaya 3 adalah jalan yang benar. Jika 3 benar saya harus khawatir tentang mean tidak menjadi 0 atau rentang tidak antara [0; 1] atau [-1; 1] (normalisasi) dari testset?

DerTom
sumber
Apakah ada cara yang bagus untuk kode ini R? Lihat pertanyaan ini: stackoverflow.com/questions/49260862/…
Boern

Jawaban:

41

Cara ketiga benar. Mengapa persisnya tercakup dalam detail yang luar biasa dalam The Elements of Statistics Learning , lihat bagian "Cara yang Salah dan Benar untuk Melakukan Cross-validasi", dan juga dalam bab terakhir Learning From Data , dalam contoh pasar saham.

Pada dasarnya, prosedur 1 dan 2 membocorkan informasi tentang respons, atau dari masa depan, dari data bertahan Anda yang ditetapkan ke dalam pelatihan, atau evaluasi, dari model Anda. Ini dapat menyebabkan bias optimisme yang cukup besar dalam evaluasi model Anda.

Gagasan dalam validasi model adalah untuk meniru situasi di mana Anda akan berada ketika model Anda membuat keputusan produksi, ketika Anda tidak memiliki akses ke respons yang sebenarnya. Konsekuensinya adalah bahwa Anda tidak dapat menggunakan respons dalam set tes untuk apa pun kecuali membandingkan dengan nilai prediksi Anda.

Cara lain untuk mendekatinya adalah dengan membayangkan bahwa Anda hanya memiliki akses ke satu titik data dari penahanan Anda pada suatu waktu (situasi umum untuk model produksi). Apa pun yang tidak dapat Anda lakukan dengan asumsi ini, Anda harus curiga. Jelas, satu hal yang tidak dapat Anda lakukan adalah mengagregasi semua titik data baru di masa lalu dan masa depan untuk menormalkan aliran data produksi Anda - sehingga melakukan hal yang sama untuk validasi model tidak valid.

Anda tidak perlu khawatir tentang rata-rata set tes Anda menjadi nol, itu situasi yang lebih baik daripada biasing estimasi kinerja bertahan Anda. Padahal, tentu saja, jika tes benar-benar diambil dari distribusi dasar yang sama dengan kereta Anda (asumsi penting dalam pembelajaran statistik), kata mean seharusnya keluar sekitar nol.

Matthew Drury
sumber
Itulah yang saya pikir. Terima kasih telah menjelaskan ini!
DerTom
Clearly, one thing you cannot do is aggregate over all new data-points past and future to normalize your production stream of data. Kenapa tidak?
Anmol Singh Jaggi
1
@AnmolSinghJaggi Ini adalah "dan masa depan". Jika Anda belum benar-benar mengumpulkan data, Anda tidak dapat menormalkan menggunakannya.
Matthew Drury
4
y
1
@MatthewDrury. Terima kasih atas penjelasan Anda yang jelas. Saya setuju dengan Anda sekarang. Hanya cara ketiga yang benar.
floking