Performansı artırmak için makine öğreniminde seyrek ve yoğun verileri birleştirme


17

Kestirimci olan seyrek özelliklerim var, ayrıca kestirimci olan bazı yoğun özelliklere de sahibim. Sınıflandırıcının genel performansını artırmak için bu özellikleri bir araya getirmem gerekiyor.

Şimdi, bunları bir araya getirmeye çalıştığımda, yoğun özellikler seyrek özelliklere daha fazla hakim olma eğilimindedir, bu nedenle AUC'de sadece yoğun özelliklere sahip modele kıyasla sadece% 1 iyileşme sağlar.

Birisi benzer sorunlarla karşılaştı mı? Girişleri gerçekten takdir ediyorum, sıkışmış bir tür. Zaten farklı sınıflandırıcılar, sınıflandırıcılar kombinasyonu, özellik dönüşümleri ve farklı algoritmalar ile işleme denedim.

Yardımınız için şimdiden teşekkür ederiz.

Düzenle :

Yorumlarda verilen önerileri zaten denedim. Gözlemlediğim şey, verilerin neredeyse% 45'i için, seyrek özellikler gerçekten iyi performans gösteriyor, sadece seyrek özelliklerle 0.9 civarında AUC elde ediyorum, ancak geri kalanlar için yoğun özellikler 0.75 civarında AUC ile iyi performans gösteriyor. Bu veri kümelerini ayırmayı denedim, ancak 0.6 AUC elde ediyorum, bu yüzden sadece bir model geliştiremiyorum ve hangi özelliklerin kullanılacağına karar veremiyorum.

Kod pasajı ile ilgili olarak, çok şey denedim, tam olarak ne paylaşacağımdan emin değilim :(


Özellikleriniz ne kadar seyrek? % 1 veya daha az doldurulmuş mu?
João Almeida

2
Ayrıca, özellikleriniz seyrek ise, veri kümenizin yalnızca küçük bir bölümünü sınıflandırmaya yardımcı olmaları gerektiğini unutmayın, bu da genel olarak doğruluğun önemli ölçüde değişmemesi gerektiği anlamına gelir. Veri kümenizin özelliklerinin ne olduğunu bilmediğim için bu bir tahmin.
João Almeida

@ JoãoAlmeida O kadar seyrek değiller. Yaklaşık% 5 doludur. Sorun, tahminlerin farklı olduğu iki modelden tahminlerdeki farka baktığımda, seyrek özelliklere sahip modelin daha iyi performans gösterme eğiliminde olması, bu yüzden onları yoğun özelliklerle birleştirdiğimde AUC'deki artışı görmesini bekledim. . Bir destek alıyorum, ama çok düşük görünüyor.
Sagar Waghmode

uğultu ... Senin için hiçbir fikrim yok
João Almeida

Ben aynı sorunu bir araya geldi, belki sadece tek bir modelde yoğun ve seyrek özelliği koymak iyi bir seçim değil. belki geniş ve derin modeli deneyebilirsiniz. seyrek özellikler için geniş ve yoğun özellikler için derin, bu yöntemi denediyseniz, lütfen bana cevabı söyleyin.
Jianye Ji

Yanıtlar:


6

Bu, Temel Bileşen Analizi için bir iş gibi görünüyor. Scikit PCA iyi uygulanmış ve bana birçok kez yardımcı oldu.

PCA, belirli bir şekilde özelliklerinizi birleştirir. Bileşen sayısını sınırlandırarak modelinizi gürültüsüz verilerle (en iyi durumda) alırsınız. Çünkü modeliniz verileriniz kadar iyi.

Aşağıda basit bir örneği ele alalım.

from sklearn.pipeline import Pipeline
pipe_rf = Pipeline([('pca', PCA(n_components=80)),
                    ('clf',RandomForestClassifier(n_estimators=100))])
pipe_rf.fit(X_train_s,y_train_s)

pred = pipe_rf.predict(X_test)

Neden 80 tane seçtim? Kümülatif varyans çizdiğimde, bunu aşağıya aldım, bu bana ~ 80 bileşenle neredeyse tüm varyansa ulaştığımı söylüyor. birikimli varyans

Bu yüzden bir deneyin, modellerinizde kullanın. Yardım etmeli.


4

Özellikleri birleştirmenin en iyi yolu topluluk yöntemleri kullanmaktır. Temel olarak üç farklı yöntem vardır: torbalama, artırma ve istifleme. Ya özellik seçimi ile artırılmış Adabbost (bu hem seyrek hem de yoğun özellikleri düşünün) ya da istifleme tabanlı (rastgele özellik - rastgele altuzay) kullanabilirsiniz İkinci seçeneği tercih ederek bir grup temel öğreniciyi (kararlar. Ağaçlar) rastgele kullanarak eğitebilirsiniz alt kümeler ve rastgele özellik (tüm özellikleri kapsayana kadar eğitim üssü öğrencilerini saklayın) Bir sonraki adım, meta verileri oluşturmak için Eğitim kümesini test etmektir. Bir meta sınıflandırıcıyı eğitmek için bu meta verilerini kullanın. Meta sınıflandırıcı hangi özelliğin daha önemli olduğunu ve ne tür bir ilişkinin kullanılması gerektiğini belirleyecektir.


Lütfen ilgili belgeleri paylaşır mısınız? Ne demek istediğini tam olarak anlamadın mı?
Sagar Waghmode

"İstifleme tekniklerindeki sorunlar, 1999" istifleme hakkında bir makale okuyabilirsiniz. Tüm vektörden (örneğin Hog ​​durumunda 1x36) tek bir özellik olarak bahsettiğimi bilmek çok önemlidir, ancak içindeki boyutlardan değil. Hangi özelliğin hangi temel öğrenci ile kullanıldığını takip etmeniz gerekir. Aşırı sığdırma problemi konusunda dikkatli olun
Beşar Haddad

Veri tabanı, sınıf sayısı, örnek sayısı, kod, ne denediğiniz, ne fark ettiğiniz hakkında daha fazla bilgi verirseniz, veri dengesizliği probleminiz, gürültülü örnekleriniz, vb. Tüm bu ayrıntılar önemlidir ve en iyi yöntemi seçmede yardımcı olabilir. Bana bu konuda daha fazla bilgi verin ve ben daha iyi bir şekilde yardımcı olabilirim
Beşar Haddad

1

Değişken gruplar çok doğrusal olabilir veya seyrek ve yoğun dönüşüm ters gidebilir. Oy veren bir sınıflandırıcı / topluluk sınıflandırması kullanmayı düşündünüz mü? http://scikit-learn.org/stable/modules/ensemble.html Bu şekilde yukarıdaki her iki sorunla da başa çıkabilirsiniz.


Oy verme sınıflandırıcılarının yanı sıra topluluk tekniklerini de denedim. Hala şans yok.
Sagar Waghmode

Öyleyse, iki veri kümesinden tahminler arasında çok fazla çakışma görüyor musunuz? Gerçekten de yeni bilgi yok mu? Yani veriler aynı hikayeyi anlatıyor.
Diego

evet, aynen bunu yaptım. Tahminler tamamen farklı olmasa da, tahminlerin farklı olduğu örneklerin sayısı verilerin oldukça yüksektir (yaklaşık% 15-20). Bu örnekler için seyrek özelliklere sahip model, yoğun özelliklere sahip modelden daha iyi performans gösterir. Demek istediğim, seyrek özellikler daha iyi performans gösteriyorsa, neden şimdiye kadar denediğim modellerin hiçbirinde önemli özellikler olarak gelmiyorlar.
Sagar Waghmode

Hangi tahmin algoritmasını kullanıyorsunuz?
Diego

Birkaç algoritmayı denedim ve Gradient Boosted Model'e yerleştim, ayrıca problemim için Rastgele Ormanları çok kullanıyorum.
Sagar Waghmode

1

Yukarıdaki önerilerin bazılarına ek olarak, iki adımlı bir modelleme yaklaşımı kullanmanızı tavsiye ederim .

  1. Önce seyrek özellikleri kullanın ve en iyi modeli geliştirin.
  2. Bu modelden öngörülen olasılığı hesaplayın.
  3. Olasılık tahminini, yoğun özellikleri içeren ikinci modele (girdi özelliği olarak) besleyin. Başka bir deyişle, ikinci modeli oluşturmak için tüm yoğun özellikleri ve olasılık tahminini kullanın .
  4. Son sınıflandırma daha sonra ikinci modele dayanacaktır.

0

PCA'yı yalnızca seyrek özelliklerde deneyin ve PCA çıkışını yoğun özelliklerle birleştirin.

Böylece yoğun (orijinal) özellikler + yoğun özellikler (başlangıçta seyrek) elde edersiniz.

Soru için +1. Lütfen bizi sonuçlarla güncelleyin.


Vay canına, bu aslında AUC'yi düşürdü :( Ne anlama geldiğini, özellik önemini ve hepsini kontrol etmek gerektiğinden emin değilim ama felsefem, yaklaşık 2.3k seyrek özellikten, 0.97 varyans oranını açıklayan 1k özellikleri kullandım, Bu bilgi kaybı
AUC'yi düşürmüş

İlginç. Paylaşım için teşekkürler. Sizinkine çok benzer bir veri setimiz var (1k-2k seyrek özellikler). Meraktan kaç tane ürettiniz? Bu sayı çok düşükse, bu AUC'nin neden düştüğünü açıklayabilir.
Tagar

Daha önce de söylediğim gibi, 0.97 varyansı açıklayan 1k temel bileşenler ürettim.
Sagar Waghmode
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.