6

Ben sınıflandırıcı doğru olup olmadığını öngörüsünün üzerinde nasıl emin gösteriliyor yapar tahminler her birinin güven puanı almak istiyorum.Sınıflandırıcınızın sklearn'deki bir tahmin için güven puanını nasıl alırsınız?

Böyle bir şey istiyorum:

Nasıl emin öngörüsünün üzerinde sınıflandırıcı mı?

Sınıf 1: Bu olduğunu% 81 sınıfı 1
Sınıf 2:% 10
Sınıf 3:% 6
Sınıf 4:% 3 benim kod

Örnekler:

features_train, features_test, labels_train, labels_test = cross_validation.train_test_split(main, target, test_size = 0.4) 

# Determine amount of time to train 
t0 = time() 
model = SVC() 
#model = SVC(kernel='poly') 
#model = GaussianNB() 

model.fit(features_train, labels_train) 

print 'training time: ', round(time()-t0, 3), 's' 

# Determine amount of time to predict 
t1 = time() 
pred = model.predict(features_test) 

print 'predicting time: ', round(time()-t1, 3), 's' 

accuracy = accuracy_score(labels_test, pred) 

print 'Confusion Matrix: ' 
print confusion_matrix(labels_test, pred) 

# Accuracy in the 0.9333, 9.6667, 1.0 range 
print accuracy 



model.predict(sub_main) 

# Determine amount of time to predict 
t1 = time() 
pred = model.predict(sub_main) 

print 'predicting time: ', round(time()-t1, 3), 's' 

print '' 
print 'Prediction: ' 
print pred 

Score() işlevini kullanacağımdan şüpheleniyorum, ancak doğru şekilde uygulamaya devam ediyorum. Doğru fonksiyon olup olmadığını bilmiyorum, ama bir sınıflandırıcının tahmininin güven yüzdesini nasıl elde edebilirim? gibi bu tahmin edicilerin için

class_probabilities = model.predict_proba(sub_main) 
+1

gerçekten yararlı bir soru. Sınıf isimlerini olasılıklarla ilişkilendirmenin bir yolu var mı? örneğin, bir girdi için aşağıdaki olasılıklar listesine sahip olursam [0.33 0.25 0.75]. Üçüncüsünün seçileceğini biliyorum, ancak üçüncü sınıf hangi sınıftan bahsediyor? – AbtPst

+0

olasılıkları "classifier.classes_" ile uyumludur. . Veri kümesi küçük :-(Ayrıca, bunlar da() 'classifier.predict' ile eşleştirmeye garanti edilmez Ama eğer onlar olmayan anlamda. '([Link sayfasını dokümanlara] (http: // scikit- learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC.predict) – AneesAhmed777

cevap

8

, bu size SVC inşa biçimini değiştirmek gerekir benziyor Justin Peel önerdi, senin tahmininde olasılık üretmek için sadece predict_proba() kullanabilirsiniz.

predict_proba() yöntemini uygulayamayan tahminciler için, önyükleme konsepti kullanarak kendiniz güven aralığı oluşturabilirsiniz (birçok alt örnekte nokta tahminlerinizi tekrar tekrar hesaplayabilirsiniz).

bu iki durumda da göstermek için herhangi ayrıntılı örnekler gerekiyorsa bana bildirin.

+0

Ah tamam, teşekkürler! Ve yüzdesi forma class_probabilities çevirmek nasıl? Örneğin, ben [[1.614297 var e-03 3.99785477e-04 5.44054423e-02 9.9254921e-01]] çıktı olarak ama, bu değerleri nasıl yorumlanacağı bilmiyorum dursun onları kendim dönüştürmek. tam olarak ne yapıyoruz bu değerler yani? – user3377126

+0

Aldırma, tamamdır. teşekkür ederiz! – user3377126

3

predict_proba() yöntemi uygulayan:

model = SVC(probability=True) 

ve sonra predict_proba yöntemi kullanın: SVC documentation Başına

+0

Ah tamam, teşekkürler! Ve yüzdesi forma class_probabilities çevirmek nasıl? Örneğin, ben var [[1.614297e-03 3.99785477e-04 5.44054423e-02 9.9254921e-01]] olarak çıktı, ama bu değerleri nasıl yorumlayacağımı bilmiyorum, kendimi dönüştürmeme izin verin. Bu değerler tam olarak ne anlama geliyor? – user3377126

+3

@use r3377126 Onlar zaten yüzde formunda. :) Her satırın toplamı tam olarak 1'e eşit olmalıdır. Son eleman aslında 0.992'dir; bu, algo'nun prob% 99.2 ile bu sınıfa ait olduğunu tahmin ettiği anlamına gelir. Not e-03 sadece bilimsel gösterimdir. –

+0

Şimdi görüyorum, teşekkürler! :) Cevabını kabul ederdim, ama Justin Peel ilk önce benim için çalıştığım örnekle ilgili yorumda bulunduğundan dolayı, ona verdim, bu konuda üzgünüm ama tavsiye için teşekkürler! – user3377126

İlgili konular