Rastgele ormanlardaki oylardan bir “kesinlik puanı” oluşturmak?


36

Ben ayrımı edecek bir sınıflandırıcı eğitmek için arıyorum Type Ave Type Bhangi yaklaşık yarısını, yaklaşık 10.000 nesnelerin oldukça geniş bir eğitim seti ile nesneleri Type Aolmak üzere yarısı Type B. Veri kümesi, hücrelerin fiziksel özelliklerini (boyut, ortalama yarıçap vb.) Ayrıntılandıran 100 sürekli özellikten oluşur. Verilerin çift saçılım ve yoğunluk grafiklerinde görselleştirilmesi, kanserli ve normal hücrelerin birçok özelliğin dağılımında önemli örtüşme olduğunu gösterir.

Şu anda rastgele ormanları bu veri kümesi için bir sınıflandırma yöntemi olarak araştırıyorum ve bazı iyi sonuçlar görüyorum. R'yi kullanarak rastgele ormanlar nesnelerin yaklaşık% 90'ını doğru şekilde sınıflandırabilir.

Denemek ve yapmak istediğimiz şeylerden biri, nesnelerin sınıflandırılmasından ne kadar emin olduğumuzu ölçen bir tür "kesinlik puanı" oluşturmaktır. Sınıflandırıcımızın asla% 100 doğru olmayacağını biliyoruz ve tahminlerde yüksek doğruluk elde edilse bile, eğitimli teknisyenlerin hangi nesnelerin gerçekte Type Ave hangileri olduğunu tanımlamasını isteyeceğiz Type B. Yani yerine uzlaşmaz tahminler sağlayarak Type Aveya Type Bbiz nasıl anlatacağız her nesne için bir puan sunmak istiyorum Aya Bbir nesnedir. Örneğin, 0 ile 10 arasında değişen bir puan tasarlarsak, 0 puanı bir nesnenin Type Anesnelere çok benzer olduğunu gösterirken, 10'un puanı bir nesnenin çok benzer olduğunu gösterir Type B.

Böyle bir puan almak için rastgele ormanlardaki oyları kullanabileceğimi düşünüyordum. Rastgele ormanlardaki sınıflandırma, üretilen ağaçların ormanı içerisinde oyların çoğunluğu ile yapıldığından, ağaçların% 100'ü tarafından oylanan Type Anesnelerin, ağaçların% 51'i tarafından oylanan nesnelerden farklı olacağını varsayacağım . olmak Type A.

Şu anda, bir nesnenin Type Aveya olarak sınıflandırılması gereken oyların oranı için keyfi bir eşik belirlemeye çalıştım Type Bve eşik geçilmezse, şu şekilde sınıflandırılacak Uncertain. Örneğin, ağaçların% 80'inin veya daha fazlasının bir sınıflandırma için bir karara varması gerektiğine karar vermesi şartını zorlarsam, sınıf tahminlerinin% 99'unun doğru olduğunu, ancak nesnelerin yaklaşık% 40'ının eşittir Uncertain.

Tahminlerin kesinliğini değerlendirmek için oylama bilgilerinden yararlanmak mantıklı olur mu? Yoksa düşüncelerimle yanlış yöne mi gidiyorum?


Ayrı bir eğitim ve test veri kümeniz olduğundan emin olun. Test setinizi mümkün olduğunca az kullandığınızdan emin olun (ideal olarak sadece bir kez).
Boris Gorelik

@bgbg 70/20/10 bölümündeki bir eğitim / doğrulama / test şeması kullanıyorum. Verilerin% 70'ini içeren bir model eğitimi alıyorum ve% 20'lik doğrulama setindeki sonuçlara göre parametreleri ayarlıyorum. Bu iki setteki parametreleri ayarladıktan sonra, modeli% 10 test setinde değerlendiriyorum. Breiman, yerleşik OOB hata oranının ayrı bir test seti gereksiz kıldığını iddia etse de, iddiasına dikkat ediyorum.
ialm

Yanıtlar:


19

Mükemmel bir anlam ifade ediyor ve çalıştığım rastgele ormanların tüm uygulamaları (MATLAB gibi) bunun için de olası çıktılar sağlıyor.

R uygulaması ile çalışmadım, ancak zor kararın yanı sıra oylardan yumuşak çıktılar elde etmenin basit bir yolu olmasaydı şok olurdum.

Düzenleme: Sadece R'ye bir bakış attı ve predict.randomForest de olasılıkları verir.


1
Cevabın için teşekkürler. Haklısın, her nesnenin aldığı oy oranını çıkaran bir senaryo hazırladım. Yine de, bu oyların ne kadar faydalı olacağını merak ediyorum? Tavsiye edeceğiniz sonraki adımlar var mı? Ek RF çalışmalarıyla oy oranlarının değişkenliğine bakmalı mıyım? RF'nin onun için stokastik bir unsuru olduğunu biliyorum. Bakmam gereken herhangi bir teşhis var mı?
ialm

3
@Jonathan Bu sınıf için oyların bir kısmının bir fonksiyonu olarak, bazı sınıfları oluşturan gerçek nesnenin kesirini içeren bir arsaya bakmayı deneyebilirsiniz. Güven puanı gerektiren bir problem üzerinde çalışıyordum ve çok güzel bir lojistik eğri elde etmeyi başardım.

@mbq Üzgünüm, bununla ne demek istediğinizi netleştirebilir misiniz? Önerinizle ilgileniyorum ve yarın takip edecek!
ialm

1
Ayrıca, bir RF'deki değişkenlik eğitim aşamasına gelir, bu nedenle RF'den birkaç kez test numunelerinin alınması sonuçları değiştirmez. Yeterince ağaç aldığınızdan emin olmak için AUC'ye karşı RF'deki ağaç sayısına bakar ve minimum yaprak parametresini AUC'ye göre optimize ederdim.
benhamner

2
@Jonathan Bence mbq (başka isimler olsa da) kalibrasyon isimli bir şeye atıfta bulunuyor. Örneğin bu sorulara göz atın: Çok sınıf artırdı sınıflandırıcı Kalibre , “gerçek değerler” denetimli sınıflandırma bakın ne?
steffen

17

R kullanıyorsanız, şapka paketi sizi tekerleği yeniden icat etmekten kurtaracaktır. Örneğin, aşağıdaki kod, rastgele bir orman modeli için ayarlama parametrelerini seçmek için çapraz doğrulama kullanır ve ardından her çapraz doğrulama katlaması için ortalama ve standart doğruluk sapmasını çıkarır. Son olarak, model için sınıf olasılıklarını hesaplar.

library(caret)
library(PerformanceAnalytics)
data(iris)

#Make a yes/no dataset
Dataset <- iris
Dataset$Class <- ifelse(Dataset$Species=='versicolor','Yes','No')
Dataset$Class  <- as.factor(Dataset$Class)
Dataset$Species<- NULL
chart.Correlation(Dataset[-5], col= Dataset$Class)

#Fit an RF model
model <- train(Class~.,Dataset,
                method='rf',TuneLength=3,
                trControl=trainControl(
                    method='cv',number=10,
                    classProbs = TRUE))
model$results

#Predict class probabilities (i.e. 'certainty' scores)
pred <- predict(model,iris,"prob")
head(pred)

Şapka ile ilgili güzel bir şey, farklı öngörü modellerini karşılaştırmayı çok kolaylaştırmasıdır. Bir SVM denemek istiyorsanız Örneğin, metin yerine method='rf'birlikte method='svmLinear'ya method='svmRadial'. da dayalı olarak ayarlama parametrelerini seçebilir AUC trainControl parametresine bir satır ekleyerek ziyade doğruluğu: summaryFunction=twoClassSummary.

Son olarak, orada chart.Correlation(Dataset[-5], col= Dataset$Class)modeli kurmak için gerekli olmayan fakat veri setinizin güzel bir şekilde görüntülenmesini sağlayan PerformanceAnalytics paketinden bir miktar kod var .


Beni caret paketinin hayranı yapıyorsun. Sanırım sadece farklı sınıflandırma yöntemlerini denemek için ikinci bir R iş parçasını açık tutacağım ve karnemin CV ve parametre ayarlaması yapıp, karşılaştırılabilir sonuçlar alıp almadığımı göreceğim.
ialm

@Jonathan bunu duyduğuma sevindim! Harika bir paket. modelLookup()Neyin mümkün olduğuna ilişkin bir liste için komutu deneyin .
Zach

probTipi predictkullanılarak da mevcuttur randomForest(veya benzeri diğer paketler kullanılmadan modelinizi eğitmek için caretya PerformanceAnalytics).
Hack-R

2

RandomForest R paket analizi hakkında daha fazla detaya almak için oldukça iyi bir pakettir. Size oylar (kesir veya ham sayım olarak) sunar ve ayarlama ve çapraz onaylama için yerleşik kapasite sunar ve hatta özellikleriniz hakkında daha fazla bilgi verebilir (100'ünüzden hangisinin hangisi olduğunu bilmek istiyorsanız). analizde en önemlisi).

Zaten bu paketi kullanıyorsanız, o zaman belki daha yakından bakmak istersiniz ve o zaman belki de kontrol etmeyin.

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.