Sinir Ağı ve Karar Ormanı verileri nasıl normalleştirilir?


10

20000 örnekli bir veri setim var, her biri 12 farklı özelliğe sahip. Her örnek ya 0 ya da 1 kategorisindedir. Sonuçları ve her iki tekniği karşılaştırabilmem için örnekleri bir sinir ağı ve bir karar ormanı eğitmek istiyorum.

Tökezlediğim ilk şey verilerin düzgün şekilde normalleştirilmesidir. Bir özellik kapsama alanında[0,106], başka biri [30,40]ve çoğunlukla 8 ve bazen 7 değerini alan bir özellik vardır. Bu yüzden farklı kaynaklarda okuduğumda, giriş verilerinin düzgün normalleştirilmesi sinir ağları için çok önemlidir. Bulduğum gibi, verileri normalleştirmenin birçok olası yolu var, örneğin:

  1. Min-Maks Normalleştirme : Giriş aralığı doğrusal olarak aralığa dönüştürülür[0,1] (Veya alternatif olarak [1,1], Önemi var?)
  2. Z-Puan Normalizasyonu : Veriler sıfır ortalamaya ve birim varyansına dönüştürülür:
    ynew=yoldmeanVar

Hangi normalleştirmeyi seçmeliyim? Karar ormanları için de normalleştirme gerekli midir? Z-Puan normalizasyonu ile test verilerimin farklı özellikleri aynı aralıkta yer almıyor. Bu bir sorun olabilir mi? Tüm özellikler aynı algoritma ile normalleştirilmeli, böylece tüm özellikler için Min-Max veya tüm özellikler için Z-Score kullanmaya karar vermeliyim?

Verilerin eşlendiği kombinasyonlar var mı? [1,1] ve ayrıca sıfır ortalaması vardır (bu, verilerin doğrusal olmayan bir dönüşümünü ve dolayısıyla giriş verilerinin varyansında ve diğer özelliklerinde bir değişiklik anlamına gelir).

Biraz kaybolmuş hissediyorum çünkü bu soruları cevaplayan referanslar bulamıyorum.

Yanıtlar:


21

Diğer yorumlara katılmıyorum.

Her şeyden önce, karar ağaçları için verileri normalleştirmeye gerek görmüyorum . Karar ağaçları, verilerin her farklı bölümü için bir puan (genellikle entropi) hesaplayarak çalışır(Xxi,X>xi). Verilerin sırasını değiştirmeyen verilere bir dönüşüm uygulamak fark etmez.

Rastgele ormanlar sadece bir grup karar ağacıdır, bu nedenle bu mantığı değiştirmez.

Sinir ağları farklı bir hikaye. Her şeyden önce, tahmin açısından, hiçbir fark yaratmaz. Sinir ağı, sadece ağırlıkları ölçeklendirdiği ve sapmayı değiştirdiği için normalizasyonunuza kolayca karşı koyabilir. En büyük sorun eğitimde.

Sinir ağının ağırlıklarını tahmin etmek için esnek geri yayılım gibi bir algoritma kullanırsanız , hiçbir fark yaratmaz. Bunun nedeni, ağırlıkları hatanızı en aza indiren yönde değiştirirken, büyüklüğünün değil degradenin işaretini kullanmasıdır. Bu arada, neuralnetR'deki paket için varsayılan algoritmadır .

Ne zaman bir fark yaratır? Sigmoid aktivasyon fonksiyonları ile geleneksel backpropagation kullandığınızda , sigmoid türevini doyurabilir .

Sigmoid fonksiyonunu (yeşil) ve türevini (mavi) düşünün:

sigmoid

Verilerinizi normalleştirmezseniz, verilerinizin rastgele ağırlıklar ile çarpılması ve s(9999)=0. Sigmoid'in türevi (yaklaşık) sıfırdır ve eğitim süreci ilerlemez. Ortaya çıkardığınız sinir ağı sadece rastgele ağırlığa sahip bir sinir ağıdır (eğitim yoktur).

Bu, en iyi normalizasyon fonksiyonunun ne olduğunu bilmemize yardımcı oluyor mu? Ama tabii! Her şeyden önce, verilerinizin merkezileştirilmesi için bir normalleştirme kullanmak çok önemlidir, çünkü çoğu uygulama eğilimi sıfır olarak başlatır. -0.5 ile 0.5 arasında normalleşirdim,XminXmaxXminX0.5. Ancak standart puan da iyidir.

Gerçek normalleştirme çok önemli değildir, çünkü sadece optimizasyon sürecinin ilk tekrarlarını etkiler. Ortalandığı ve verilerinizin çoğu 1'in altında olduğu sürece, aynı sonucu elde etmek için biraz daha az veya daha fazla yineleme kullanmanız gerektiği anlamına gelebilir. Ancak bahsettiğim doygunluk probleminden kaçındığınız sürece sonuç aynı olacaktır.

Burada tartışılmayan, düzenleyici olan bir şey var . Eğer amaç fonksiyonunda düzene bağlama kullanırsanız, yolu, veri normalleştirmek edecek çıkan modeli etkiler. Bunu zaten bildiğinizi varsayıyorum. Bir değişkenin aşırı sığmaya neden daha eğilimli olduğunu biliyorsanız, verilerin normalleştirilmesi bunu dikkate almalıdır. Bu elbette kullanılan sinir ağlarından tamamen bağımsızdır.


2
  1. Kesin bir cevap yok . Önereceğim şey, verilerinizi farklı yaklaşımlar kullanarak ölçeklendirmek ve daha sonra, dağıtım kümenizdeki sonuçları tahmin etmek için aynı modeli kullanmak olacaktır (RF'ler burada iyi çalışır). Bu, en azından tahmin etme probleminizde hangi ölçeklendirme yaklaşımının en iyi olduğunu göstermelidir.
  2. Rastgele Ormanlar için verilerinizi ölçeklendirmenize gerek yoktur
  3. Bireysel aralıklar, başlamak için sürekli olarak ölçeklendirildikleri sürece sorun olmamalıdır. Bu sadece değişkenler arasında, öncekinden daha kompakt bir ölçekte farklılıklar olduğunu göstermektedir.
  4. Evet - tüm verileriniz aynı yaklaşımla ölçeklendirilmelidir. Aksi takdirde, dönüştürülmüş veri kümenizdeki değerler verilerin kendisiyle değil ölçekleme için kullanılan algo ile ilgili olabilir.

Umarım bu yardımcı olur.


1
Büyük cevap, sadece biraz uğraştığınız verilerin belirli dağılımına ve aykırı değerlerin kaldırılıp kaldırılmadığına bağlı olduğunu ekleyebilirim. Standartlaştırırsanız normal veriler çok iyi görünür. Bununla birlikte, düzgün bir dağılım min / maks normalizasyon ile çok daha iyi görünebilir. Ayrıca, sigma = 10 ile bir günlük normal dağılımı, normalleştirdiğinizde min / maks ise sıfıra yakın ilginç davranışların çoğunu gizleyebilir.
AN6U5

@ AN6U5 - Çok iyi bir nokta. Dürüst olmak gerekirse, ölçeklemenin farklı temel dağılımlar / aykırılıklar üzerindeki etkileri hakkında çok fazla düşünmedim. Bu sabah bir okuma yapabilir!
plumbus_bouquet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.