2015-01-07 23 views
7

makine öğrenme için NaN'ler eksik nasıl baş edilir.?? makine öğrenme algoritması uygulamadan önce veri kümelerinde eksik değerleri ele nasıl piton

Ben eksik NAN değerleri düşmeye akıllı bir şey olmadığını fark ettim. Genelde pandaları kullanarak enterpolasyon yapar (ortalama hesaplar) ve bu tür çalışmalarda bulunan verileri doldurur ve sınıflandırma doğruluğunu geliştirir, ancak yapılacak en iyi şey olmayabilir.

İşte çok önemli bir sorudur. Veri kümesindeki eksik değerleri işlemenin en iyi yolu nedir? Bu veri kümesini görmek Örneğin

, sadece% 30 orijinal veri var.

Int64Index: 7049 entries, 0 to 7048 
Data columns (total 31 columns): 
left_eye_center_x   7039 non-null float64 
left_eye_center_y   7039 non-null float64 
right_eye_center_x   7036 non-null float64 
right_eye_center_y   7036 non-null float64 
left_eye_inner_corner_x  2271 non-null float64 
left_eye_inner_corner_y  2271 non-null float64 
left_eye_outer_corner_x  2267 non-null float64 
left_eye_outer_corner_y  2267 non-null float64 
right_eye_inner_corner_x  2268 non-null float64 
right_eye_inner_corner_y  2268 non-null float64 
right_eye_outer_corner_x  2268 non-null float64 
right_eye_outer_corner_y  2268 non-null float64 
left_eyebrow_inner_end_x  2270 non-null float64 
left_eyebrow_inner_end_y  2270 non-null float64 
left_eyebrow_outer_end_x  2225 non-null float64 
left_eyebrow_outer_end_y  2225 non-null float64 
right_eyebrow_inner_end_x 2270 non-null float64 
right_eyebrow_inner_end_y 2270 non-null float64 
right_eyebrow_outer_end_x 2236 non-null float64 
right_eyebrow_outer_end_y 2236 non-null float64 
nose_tip_x     7049 non-null float64 
nose_tip_y     7049 non-null float64 
mouth_left_corner_x   2269 non-null float64 
mouth_left_corner_y   2269 non-null float64 
mouth_right_corner_x   2270 non-null float64 
mouth_right_corner_y   2270 non-null float64 
mouth_center_top_lip_x  2275 non-null float64 
mouth_center_top_lip_y  2275 non-null float64 
mouth_center_bottom_lip_x 7016 non-null float64 
mouth_center_bottom_lip_y 7016 non-null float64 
Image      7049 non-null object 
+4

"* Veri kümesindeki eksik değerleri işlemenin en iyi yolu nedir? *" I Bu sorunun cevabının hem duruma özgü hem de görüşü temel aldığını iddia eder. – CoryKramer

+0

Eksik değerler içeren satırları bırakabilirsiniz, ancak bu, performansı düşürebilir veya eksik değerleri, değeri etkilemeyen bir değere ayarlayabilir, ancak çok fazla eksik değeriniz varsa, bu durum hala modelinize çarpabilir. . Ortalama/medyanı kullanabilirsiniz ancak tüm yaklaşımların performansını ölçmek ve en iyi olanı görmek zorundasınız, bu özelliklerde herhangi bir değer olup olmadığına ve hangi modele sahip olduğunuza bağlıdır. – EdChum

cevap

9
What is the best way to handle missing values in data set? 

YOK iyi yolu yoktur, her bir çözüm/algoritması (ve hatta birlikte kendi strateji ve melodi yaratmak için bazılarını karıştırabilirsiniz ilgili parametreler birini gelip kendi artıları ve eksileri vardır Verilerinizi en iyi şekilde karşılar, bu konuyla ilgili birçok araştırma/makale bulunmaktadır). Örneğin

, Mean ithamlarla hızlı ve basit, ama varyansı hafife olacak ve KNN ithamlarla büyük bir veri setinde ideal olmayabilir iken dağıtım şekli, orta değere sahip olan NaN değiştirerek bozulur Zaman karmaşıklığı açısından, tüm veri noktaları üzerinde yinelemek ve her bir NaN değeri için hesaplama yapmak ve NaN özelliğinin diğer özniteliklerle ilişkili olduğu varsayımı olduğundan. ek olarak

How to handle missing values in datasets before applying machine learning algorithm?? 

ayrıca K-En Yakın Komşu ithamlarla ve Regresyon ithamlarla bakmak olabilir, Bahsettiğiniz ikame yöntemleridir anlamına gelir ve mevcut API'leri kontrol etmek scikit-learn güçlü Imputer sınıfa bakınız kullanmak.

KNN ithamlarla

bu NaN noktasının k en yakın komşuları ortalamasını hesaplayın.

Regresyon ithamlarla

bir regresyon modeli diğer değişkenlere dayalı bir değişkenin gözlenen değerlerini tahmin etmek tahmin edilmektedir ve bu model daha sonra o değişkeni eksik olduğu durumlarda değerlerini impute için kullanılır.

Here scikit's 'linkler' bölüm eksiklikleri. Ben de töhmet için Orange kütüphanede duymuş, ancak henüz kullanmak için bir şansım olmadı.

2

eksik verilerle başa tek ve en iyi yolu yok. En titiz yaklaşım, eksik değerleri PyMC gibi olasılıksal bir çerçevede ek parametreler olarak modellemektir. Bu şekilde, sadece tek bir cevap yerine olası değerler üzerinde bir dağılım elde edersiniz.Burada, PyMC: http://stronginference.com/missing-data-imputation.html

kullanarak eksik verilerle uğraşmak için bir örnek var. Eğer bu delikleri gerçekten nokta tahminleriyle birleştirmek istiyorsanız, “imputation” gerçekleştirmek istiyorsunuz demektir. Özelliklerinizin ortak dağıtımını gerçekten kestikleri için, ortalama doldurma gibi basit deneme yöntemlerinden uzaklaşırdım. Bunun yerine, softImpute gibi bir şeyi deneyin (bu, düşük değer yaklaşımıyla eksik değeri elde etmenizi sağlar). SoftImpute dosyasının orijinal sürümü R için yazılmıştır ancak burada bir Python sürümü (kNN imputation gibi diğer yöntemlerle birlikte) yaptım: https://github.com/hammerlab/fancyimpute