Farklı Test Seti ve Eğitim Seti Dağıtımı


15

Test setimin dağılımının eğitim setinden farklı olduğu bir veri bilimi yarışması üzerinde çalışıyorum. Test setine çok benzeyen eğitim setinden gözlemleri alt örneklemek istiyorum.

Bunu nasıl yapabilirim?


Rastgele Alt Örnekleme, Rastgele Aşırı Örnekleme, Küme Tabanlı Aşırı Örnekleme, Bilgilendirilmiş Örnekleme: Sentetik Azınlık Aşırı Örnekleme Tekniği, Modifiye sentetik azınlık aşırı örnekleme tekniği (MSMOTE) vb.
Aditya

Eğer herhangi birinden memnunsanız cevaplardan birini "Kabul Edildi Cevap" olarak işaretlemeniz daha iyi olur.
TwinPenguins

Yanıtlar:


17

Harika bir soru, Makine Öğrenimi paradigmasında "Değişken Değişimi" veya "Model Kayması" veya "Durağan olmayanlık" vb.

Kişinin gelecekteki tahminler için bir makine öğrenme modeli oluşturmak için yapacağı kritik varsayımlardan biri, görünmeyen verilerin (test) eğitim verileriyle aynı dağıtımdan gelmesidir! Bununla birlikte, gerçekte bu oldukça basit varsayım kolayca kırılır ve yaklaşan veriler (dağılımı) birçok nedenden dolayı zamanla değişir. Bu çok önemli probleme aşina olmayanlar için, buraya veya postaya bakmanızı öneririm !

Bana göre sorunuz aynı kategoriye giriyor. Her ne kadar mükemmel bir çözümüm olmasa da (sunulacak bir uygulama), ancak bence bakabilirsiniz:

  • Bu blog yazısı , Python'da sağlanan kod ile eğitim verilerinin alt örneklemesini ele almanın basit bir yolunu sunar!
  • Bu araştırma belgesini kontrol edin . " Kullback-Leibler diverjans " teoremine dayalı olarak Kullback-Leibler Önem Tahmin Prosedürü'nü kullanarak eğitim dağılımının test dağılımına daha yakın olması için eğitim verilerini yeniden ağırlıklandırarak sorunu çözmeyi öneriyorlar . Bir uygulama sağlayıp sağlamadıklarını bilmiyorum veya kolayca uygulanabiliyor, ancak dağıtım uyuşmazlığını ele almanın profesyonel bir yolu gibi göründüğü için kazmaya değer olabileceğini düşünüyorum.

HIZLI güncelleme (iyi bir çözüm) : Bu ağırlıkları bulmak için o araştırma belgesinin (son nokta) KLIEP algoritmasının bir Python uygulamasını buldum . Kullanımı oldukça kolay görünüyor! Temel olarak, ağırlıkları (KLIEP algoritması aracılığıyla) koyarak eğitimi yeniden örnekler, böylece benzer bir tren ve test dağılımına sahip olma varsayımı mümkün olduğunca doğru olur.


5

Test setine çok benzeyen eğitim setinden gözlemleri alt örneklemek istiyorum.

Bunu yapmak isteyeceğinden emin değilim. Tüm amaç, görünmeyen verileri iyi bir şekilde genelleştirmek için algoritmanızı eğitmektir.

Genellikle test verilerini tren verisine uyarlamalıyız (örn. Test verisini tren verilerine göre standart hale getirme ), aksi halde değil. Uygulamada, sen yok test verilerinizi biliyorum.


3

Tren seti alt örneklemesi en iyi çözüm olmayabilir!

Test / yürütme seti ve eğitim seti dağıtımı / özellikleri arasındaki farklar denetimli öğrenme görevlerinde çok yaygındır (Kaggle gibi yarışmaların zor olmasının nedenlerinden biri de budur). Bu nedenle , geçmiş performansın (yalnızca) gelecekteki performansı tahmin etmek için bir rehber olarak kullanılabileceğini söyleriz , ancak bunu göstermez / garanti etmez . Bu nedenle, genelleştirilebilir modeller, tren (alt) setinde çok iyi performans gösterebilen ancak görünmeyen veriler üzerinde kötü performans gösteren ince ayarlı modellere göre her zaman tercih edilmiştir.

Bu fark normal olmakla birlikte, geçmiş ve gelecek örnek arasındaki çok büyük boşluk , kendi başına aktif bir araştırma alanı olan kavram sapmasının örnekleri olarak ifade edilebilir . Sorunuz göz önüne alındığında, davanızın normal bir ML davası olduğunu veya konsept sapmasının gerçekten gerçekleştiğini değerlendiremiyorum.

Bunlar benim önerilerim:

  1. Yüksek genelleme kapasitesine sahip bir dizi modeli eğitin. Tren veri kümenizden önyükleme örneklemesi kullanarak , hataların sapma ve sapma bileşenlerini kolayca hesaplayabilirsiniz . Hatırlama bir aradığınızı düşük varyans (verilerindeki değişimler performansı üzerinde marjinal bir etki yaratacağını) modeli yerine düşük önyargı ama yüksek varyans modelleri (eğitiminize o kudreti overfit (alt) seti). Şimdi, en iyi algoritmaları seçebilir ve bunları test setine göre değerlendirebilirsiniz. Eğitim süresinde test setine bakmamamız gerektiğini unutmayın!

  2. Birkaç rastgele altörnekleme yerine standartlaştırma / normalleştirme ve özellik seçimi / mühendislik konularını arayın. Bu teknikler daha genel modellerin öğrenilmesinde pratik olabilir. Örneğin, dağıtım şekli (her ne olursa olsun) neredeyse aynı kalırken bazen özellik alanı aralığı zamanla değişebilir (örneğin, sola veya sağa kaydırılan aynı dağıtım). Böyle bir durumda, basit bir standardizasyon (yani tren ve test örneklerini, farklı haritalama fonksiyonları kullanarak [0,1] gibi önceden tanımlanmış bir alana eşleme) semptomları azaltabilir.

  3. Sistematik altörnekleme , yalnızca sorunla ilgili bazı bilgilere dayanarak yaparsanız (sadece test veri kümesinde daha iyi bir doğruluk elde etmek amacıyla değil) uygun bir çözüm olabilir. Örneğin, tren verilerindeki bazı kayıtların uzun zaman önce, uzak alandan örneklendiğini veya gelecekte hiçbirinin olmayacağı belirli faktörlerden etkilendiğini biliyor olabilirsiniz (test veri toplamada). Böyle bir durumda, ileride bu tür kalıpları görmeyeceğinizden emin olduğunuz için alakasız olabilecek örnekleri kaldırabilirsiniz (yani , test setine bakmak yerine eğitim alt kümesinin seçiminin arkasında bir mantıkınız olmalıdır . gerçekte, ona erişiminiz yok). Böyle bir durumda, aykırı değer kaldırma olarak adlandırıyorum altörnekleme yerine.


1
Makine Öğreniminde Veri Kümesi Kayması , alana iyi ve titiz bir genel bakış sağlar. " Değişken (giriş) kayması , yalnızca giriş dağılımının değiştiği, girişleri verilen çıkışların koşullu dağılımının değişmeden kaldığı anlamına gelir." p(y|x)
ijoseph

-1

Python'da iyi bir paket var (scikit öğren)

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

Bu paketi kullanarak gözlemlerinizi egzersiz setinden alt örnekleyebilirsiniz.


1
Soruyu anladığım kadarıyla, dikkate alınmazsa "Değişken Değişimi" ne yol açacak olan tren / test dağılımları farklıdır. Burada bahsedilen scikit öğrenmesinde "train_test_split" uygulamasını kullanan basit alt örnek, bölünme sırasındaki dağılımları dikkate almayacaktır! Bu nedenle cevap ilgili değildir.
TwinPenguins
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.