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?
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?
Yanıtlar:
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:
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.
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.
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:
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!
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.
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.
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.