R'de sınıflandırma modelleri için artımlı öğrenme


11

Aşağıdaki kodu kullanarak sahtekarlık tespiti için bir sınıflandırıcı (Karar ağacı, rastgele orman, lojistik regresyon gibi standart sınıflandırıcılardan herhangi biri olabilir) varsayalım

library(randomForest)
rfFit = randomForest(Y ~ ., data = myData, ntree = 400) # A very basic classifier 

Say, Y is a binary outcome - Fraud/Not-Fraud

Şimdi, görünmeyen bir veri setini tahmin ettim .

pred = predict(rfFit, newData)

Daha sonra, sınıflandırma ile ilgili olarak araştırma ekibinden geri bildirim aldım ve bir sahtekarlığı Sahtekarlık Dışı olarak sınıflandırmakla ilgili bir hata yaptığımı fark ettim (yani Bir Yanlış Olumsuz ) . Yine de algoritmamın bir hata yaptığını anlamasına izin verebileceğim var mı? Yani algoritma hataları düzeltmek için bir geribildirim döngü eklemenin herhangi bir yolu?

Başımın üstünden düşünebileceğim bir seçenek adaboost classifier, yeni sınıflandırıcının eskisinin hatasını düzeltmesi için bir inşa etmektir . veya bir şey duydum Incremental Learningveya Online learning. İçinde mevcut uygulamalar (paketler) var Rmı?

Doğru yaklaşım mı? veya Modeli sıfırdan oluşturmak yerine ince ayar yapmanın başka bir yolu var mı?


bir çözüm buldun mu? Bende aynı sorun var.
Blu3nx

@ Blu3nx lütfen yorum yazmak için cevap kullanmayın. Cevaplar cevap vermek içindir.
Tim

Bir cevap değil, ama sadece myData $ Fraud'a gitmenizi engelleyen şey nedir [positionofincorrectvariable] = Doğru Değer?
Dale C

Yanıtlar:


2

Artırıcı bir strateji modelinizin performansını artırabilir, bu yüzden denemeye değer. Artan / çevrimiçi öğrenme ile ilgili olarak, R'de onu uygulayan herhangi bir paketin farkında değilim (diğerleri, lütfen yanılıyorsam beni düzeltin). Scikit Learn'de artımlı öğrenmeye izin veren çekirdek dışı sınıflandırıcılar vardır. Bununla birlikte, R'yi kullanmaya bağlıysanız, kendi artımlı modelinizi yazmaktan başka seçeneğiniz olmayabilir. Her iki durumda da, Scikit Learn'ün temel dışı sınıflandırıcılarına bakmak size nereden başlayacağınız konusunda bir fikir verebilir.

Akılda tutulması gereken bir diğer ayrıntı, modeli tek bir yanlış pozitif veya yanlış negatifte güncellemenin, modelin performansını ne ölçüde artıracağıdır. Dolandırıcılık alanında, dolandırıcılıktan sonra dolandırıcılıktan sonra binlerce ila milyonlarca kez daha fazla örnek vardır. Bu nedenle, her dolandırıcılık örneğini doğru bir şekilde ayırt etmeyi öğrenmeye çalışmak önemlidir, ancak bir modeli tek bir sahtekarlık örneğinde güncellemek muhtemelen modeli önemli ölçüde değiştirmeyecektir. Modelin sahtekarlık örneklerine daha fazla önem vermesini sağlamak için diğer stratejileri düşünün.

İnsan araştırmacılarından gelen geri bildirimlere dayanarak denetlenen modelinizi geliştirmenin en basit yolu, düzeltilmiş örneklerden (yani, doğru bir şekilde etiketlendikten sonra yanlış tahmin edilen örnekler) ayrı bir model oluşturmak olacaktır. Daha sonra iki modelinizin, tahmini sınıf üyeliklerini toplayarak gelecekteki örneklerin sınıflandırılması için "oy" vermesini sağlayabilirsiniz. Örneğin, Modela düşünebilirler Instance1 ise, [0.35: 0.65, Sigara Sahtecilik Sahtecilik] olan ModelB inanmaktadır Instance1 [: 0.47, Sigara Sahtecilik: 0.53 Sahtecilik] şeklindedir. Bu nedenle topluluğun tahmini [Fraud: (0.65 + 0.47) /2=0.56, Fraud Olmayan: (0.35 + 0.53) /2=0.44] olacaktır.

Orijinal modeliniz şansa göre daha iyi performans gösteriyorsa, doğru şekilde sınıflandırdığı örneklerin sayısı yanlış sınıflandırılan sayıdan daha büyük olacaktır. Bu nedenle, orantısız sayıda örnek üzerinde eğitildikleri takdirde, modellere eşit ağırlık atfetmek istemezsiniz. Bu eşitsizliğin üstesinden gelmek için iki basit seçenek vardır: 1) orijinal modelin eğitim aldığı sayıya yaklaşık olarak eşit olacak kadar düzeltilmiş örnek birikinceye kadar bekleyin veya 2) modelin bir doğrulama kümesinde nasıl performans gösterdiğine bağlı olarak her bir modele ağırlık atayın.


0

Geçmişte çevrimiçi ve artımlı öğrenme hakkında biraz araştırma yaptım. Dikkate almanız gereken bazı fikirler var.

Her sınıflandırıcı artımlı öğrenmeyi 'yapabilir', tek sorun, bazılarında bunu yapmanın çok daha zor olmasıdır. Bunun gibi artımlı bir öğrenme algoritması yoktur, sadece ortak algoritmaları kullanarak bu satın almanın bir yolu vardır. Normalde, bunlardan birini seçer ve eğitim şeklinizi uyarlar ve verileri toplu olarak veya çevrimiçi bir şekilde beslersiniz.

Bunu iki şekilde yapabilirsiniz: a) Yeni bir numune (veya numune seti) her geldiğinde modeli sıfırdan yeniden eğitin. Açıkçası bu ideal değildir, ancak modeliniz çok karmaşık değilse (yani, gelen örnekler arasında bütün bir eğitimi gerçekleştirebilirsiniz) ve veri kümesi boyutunuzu (eski verileri, yeni verileri veya rastgele verileri atmak ve sabit sayıda eğitim örneği tutmak) ), bazı senaryolarda çalışabilir. Destek vektör makineleri ile bu 'sahte-artımlı' öğrenmenin güzel bir örneği burada bulunabilir .

b) Tahmin yanlış olduğunda bu parametreleri sadece 'biraz' değiştirerek model parametrelerinizi / ağırlıklarınızı güncellemenin bir yolunu bulun. Sinir Ağları doğal olarak bunun için harikadır, çünkü bir modeli eğitebilir, ağırlıkları kaydedebilir ve daha sonra yeni veri kümeleriyle yeniden eğitebilirsiniz. Ayrıca, yeni girdilerinizle daha fazla / daha az alaka düzeyi vermek için öğrenme hızını değiştirebilirsiniz. Durumunuz için herhangi bir algoritma seçerseniz, bu benim seçimim olacaktır. Ancak, diğer birçok yöntem vardır: Bayesian örneğin sayısal artışlarla / belirli parametrelere alçalmalar uygulamak dağılımları değiştirme yaklaşımları (bakınız bu Başka bir örnek için).

Biraz okuma yapın ve öğrenme algoritması davranışınız ne olursa olsun önceki yaklaşımları arayın. Başlangıçta bu veya bu kütüphaneyi kullanmak yerine her şeyi kendiniz ayarlamak göz korkutucu görünebilir, ancak modelinizin tüm öğrenme sürecinden sorumlu hissettiğiniz noktaya geldiğinizde aşırı soğuk olur.

İyi şanslar!

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.