2016-06-24 31 views
10

karışımını tutamazsınız scikit-learn modelinden linear_model.LinearRegression kullanıyorum. Çalışır ve mükemmeldir. Kesin sonuçların doğruluğunu, precision_score metriğini kullanarak değerlendirmek için bir sorunum var. Bu benim gerçek Veri geçerli:Doğruluk Puanı: ValueError: İkili ve sürekli

array([1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0]) 

Ve bu benim öngörü Veri geçerli:

array([ 0.07094605, 0.1994941 , 0.19270157, 0.13379635, 0.04654469, 
    0.09212494, 0.19952108, 0.12884365, 0.15685076, -0.01274453, 
    0.32167554, 0.32167554, -0.10023553, 0.09819648, -0.06755516, 
    0.25390082, 0.17248324]) 

Kodum:

accuracy_score(y_true, y_pred, normalize=False) 

Ve bu hata iletisi:

"ValueError: Can't handle mix of binary and continuous"

Yardım? Teşekkür ederim.

+1

dtypes nelerdir? "Y_true" öğesini "numpy.int8" öğesine atayabilir misiniz? Belki de kategorik değişkenleri tahmin etmek yerine lojistik regresyon mu arıyorsunuz? – Benjamin

+0

Bu 'type_of_target (y_true) 've' type_of_target (y_pred) '(' utils.multiclass.py' içinde) kontrol ediyor. Dizi sadece 2 benzersiz değere sahipse, 'ikili' olarak sınıflandırılır. – hpaulj

cevap

8
accuracy_score(y_true, y_pred.round(), normalize=False) 

Eğer threshold iki sınıfları ayırmak için değeriniz olduğu y_pred.round() ait (y_pred>threshold).astype(int) yerine eşik kullanım hakkında daha fazla kontrole sahip olmak isterseniz.

+1

Kesim noktasını 0,5 olarak ayarlayabilir veya örneğin rok eğrisine göre başka bir eşik belirleyebilir ve duyarlılığa karşı özgüllüğün farklı bir derecesine sahip olabilirsiniz. Https://stats.stackexchange.com/questions/29719/ nasıl belirlenir-en iyi-kesme-noktası-ve-kendi-güven aralığı-kullanarak-roc-eğrisi-i istatistiklerle ilgili daha fazla ayrıntı oluşturur. – natbusa

+0

Öngörülen dizininizle ilgili bir not. Orada negatif değerlerin olduğunu görüyorum.Normalde 0 ile 1 arası olasılıklara sahip olmalısınız. Softmax işlevini kullanarak olasılıklara dönüştürebilirsiniz. Bkz. Http://stackoverflow.com/questions/34968722/softmax-function-python – natbusa

1

Sorun, tahminlerinizin değil, gerçek y'nin ikili (sıfırlar ve olanlar) olmasıdır. Muhtemelen olasılıklar ve tahminler üretmediniz, bu yüzden sonuç :) Sınıf üyeliği oluşturmayı deneyin ve işe yaramalısınız!

1

accuracy_score bir sınıflandırma metriğidir, bir gerileme sorunu için kullanamazsınız.

JohnnyQ zaten işaret, sorun i sen senin y_pred olmayan ikili (0 değil de 1) değerlere sahip olmasıdır:

You can see the available regression metrics here

1

Belki bu bu soruyu bulan kişinin yardımcı olur. e.

print(((y_pred != 0.) & (y_pred != 1.)).any()) 

eklerken çıktı True göreceksiniz. (Komut, 0 veya 1 olmayan herhangi bir değer olup olmadığını öğrenir).

Sen kullanarak olmayan ikili değerlerini görebilirsiniz:

non_binary_values = y_pred[(y_pred['score'] != 1) & (y_pred['score'] != 0)] 
non_binary_idxs = y_pred[(y_pred['score'] != 1) & (y_pred['score'] != 0)].index 

bir baskı deyimi çıktısını alabilirsiniz yukarıda derivated değişkenler.

Son olarak, bu fonksiyon olmayan tüm ikili girişlerin verilerinizi temizleyebilirsiniz:

def remove_unlabelled_data(X, y): 
    drop_indexes = X[(y['score'] != 1) & (y['score'] != 0)].index 
    return X.drop(drop_indexes), y.drop(drop_indexes)