Bagaimana cara menormalkan data untuk Neural Network dan Decision Forest

10

Saya memiliki kumpulan data dengan 20000 sampel, masing-masing memiliki 12 fitur berbeda. Setiap sampel berada dalam kategori 0 atau 1. Saya ingin melatih jaringan saraf dan hutan keputusan untuk mengkategorikan sampel sehingga saya dapat membandingkan hasil dan kedua teknik.

Hal pertama yang saya temui adalah normalisasi data yang tepat. Satu fitur berada dalam kisaran , satu lagi di dan ada satu fitur yang sebagian besar mengambil nilai 8 dan kadang-kadang 7. Jadi ketika saya membaca di sumber yang berbeda, normalisasi input yang tepat data sangat penting untuk jaringan saraf. Seperti yang saya ketahui, ada banyak cara yang memungkinkan untuk menormalkan data, misalnya:[0,106][30,40]

  1. Min-Max Normalalization : Kisaran input diubah secara linear ke interval (atau sebagai alternatif , apakah itu penting?)[ - 1 , 1 ][0,1][1,1]
  2. Normalisasi Z-Score : Data ditransformasikan menjadi nol rata-rata dan varians unit:
    ynew=yoldmeanVar

Normalisasi mana yang harus saya pilih? Apakah normalisasi juga diperlukan untuk hutan keputusan? Dengan normalisasi Z-Score, fitur berbeda dari data pengujian saya tidak terletak pada kisaran yang sama. Mungkinkah ini menjadi masalah? Haruskah setiap fitur dinormalisasi dengan algoritma yang sama, sehingga saya memutuskan untuk menggunakan Min-Max untuk semua fitur atau Z-Score untuk semua fitur?

Adakah kombinasi tempat data dipetakan ke dan juga memiliki rata-rata nol (yang akan menyiratkan transformasi data non-linier dan karenanya perubahan varian dan fitur lain dari data input).[1,1]

Saya merasa agak bingung karena saya tidak dapat menemukan referensi yang menjawab pertanyaan-pertanyaan ini.

Merlin1896
sumber

Jawaban:

21

Saya tidak setuju dengan komentar lain.

Pertama-tama, saya melihat tidak perlu menormalkan data untuk pohon keputusan . Pohon keputusan bekerja dengan menghitung skor (biasanya entropi) untuk setiap divisi data yang berbeda . Menerapkan transformasi pada data yang tidak mengubah urutan data tidak ada bedanya.(Xxi,X>xi)

Hutan acak hanyalah sekelompok pohon keputusan, jadi itu tidak mengubah alasan ini.

Jaringan saraf adalah cerita yang berbeda. Pertama-tama, dalam hal prediksi, tidak ada bedanya. Jaringan saraf dapat dengan mudah melawan normalisasi Anda karena hanya menimbang bobot dan mengubah bias. Masalah besar ada di pelatihan.

Jika Anda menggunakan algoritma seperti backpropagation tangguh untuk memperkirakan bobot jaringan saraf, maka itu tidak ada bedanya. Alasannya adalah karena menggunakan tanda gradien, bukan besarnya, ketika mengubah bobot ke arah apa pun yang meminimalkan kesalahan Anda. neuralnetOmong-omong, ini adalah algoritma default untuk paket dalam R.

Kapan itu membuat perbedaan? Ketika Anda menggunakan backpropagation tradisional dengan fungsi aktivasi sigmoid, itu dapat menjenuhkan turunan sigmoid.

Pertimbangkan fungsi sigmoid (hijau) dan turunannya (biru):

sigmoid

Apa yang terjadi jika Anda tidak menormalkan data Anda adalah bahwa data Anda dikalikan dengan bobot acak dan Anda mendapatkan hal-hal seperti . Turunan dari sigmoid adalah (kira-kira) nol dan proses pelatihan tidak bergerak bersama. Jaringan saraf yang Anda dapatkan hanyalah jaringan saraf dengan bobot acak (tidak ada pelatihan).s(9999)=0

Apakah ini membantu kita untuk mengetahui apa fungsi normalisasi terbaik? Tapi tentu saja! Pertama-tama, sangat penting untuk menggunakan normalisasi yang memusatkan data Anda karena sebagian besar implementasi menginisialisasi bias pada nol. Saya akan menormalkan antara -0,5 dan 0,5, . Tetapi skor standar juga baik.XminXmaxXminX0.5

Normalisasi aktual tidak terlalu penting karena hanya mempengaruhi iterasi awal dari proses optimasi. Selama itu berpusat dan sebagian besar data Anda di bawah 1, maka itu mungkin berarti Anda harus menggunakan iterasi yang sedikit atau lebih banyak untuk mendapatkan hasil yang sama. Tetapi hasilnya akan sama, selama Anda menghindari masalah saturasi yang saya sebutkan.

Ada sesuatu yang tidak dibahas di sini yaitu regularisasi . Jika Anda menggunakan regularisasi dalam fungsi tujuan Anda, cara Anda menormalkan data Anda akan memengaruhi model yang dihasilkan. Saya berasumsi Anda sudah terbiasa dengan ini. Jika Anda tahu bahwa satu variabel lebih rentan menyebabkan overfitting, normalisasi data Anda harus mempertimbangkan ini. Ini tentu saja sepenuhnya independen dari jaringan saraf yang digunakan.

Ricardo Cruz
sumber
2
  1. Tidak ada jawaban yang jelas . Apa yang saya sarankan adalah untuk skala data Anda menggunakan pendekatan yang berbeda dan kemudian menggunakan model yang sama untuk memprediksi hasil pada set ketidaksepakatan Anda (RF akan bekerja dengan baik di sini). Setidaknya itu akan menunjukkan kepada Anda pendekatan penskalaan mana yang terbaik dalam masalah prediksi Anda.
  2. Anda tidak perlu menskala data Anda untuk Hutan Acak
  3. Kisaran individual seharusnya tidak menjadi masalah selama mereka secara konsisten diskalakan untuk memulainya. Ini hanya menggambarkan bahwa ada perbedaan antara variabel, hanya pada skala yang lebih kompak dari sebelumnya.
  4. Ya - semua data Anda harus diskalakan dengan pendekatan yang sama. Kalau tidak, nilai-nilai dalam dataset Anda yang diubah mungkin berhubungan tidak dengan data itu sendiri, tetapi algo yang digunakan untuk penskalaan.

Semoga ini bisa membantu.

plumbus_bouquet
sumber
1
Jawaban yang bagus, saya hanya akan menambahkan bahwa itu sedikit tergantung pada distribusi data tertentu yang Anda hadapi dan apakah Anda menghapus outlier. Data normal akan terlihat sangat bagus jika Anda membakukannya. Namun, distribusi yang seragam mungkin terlihat jauh lebih baik dengan normalisasi minimum. Selanjutnya, distribusi log normal dengan sigma = 10 mungkin menyembunyikan banyak perilaku menarik mendekati nol jika Anda min / max menormalkannya.
AN6U5
@ AN6U5 - Poin yang sangat bagus. Sejujurnya saya tidak terlalu memikirkan dampak penskalaan pada distribusi / outlier yang berbeda. Boleh membaca ini pagi ini!
plumbus_bouquet