2016-04-12 6 views
2

Aynı pandalar veri çerçevesine sahibim (geri kalanı sayısal olan çok daha fazla sütun var).sklearn sınıflandırıcı için pandalar veri çerçevesini filtrelemenin iki yolu arasındaki fark nedir?

import pandas as pd 
from sklearn.dummy import DummyClassifier 

df = pd.DataFrame({'Time':['2013-08-01 00:00:00', '2014-09-01 12:10:00', '2015-02-02 10:10:00', '2016-01-01 00:00:00'], 'Model_Targ':['a', 'b', 'a', 'b'], 'Col2':[-0.945000, -0.855000, -0.860000, -0.945000], 'Col3':[64.384028, 64.485417, 64.609028, 64.723611]}) 
df['Time'] = pd.to_datetime(df['Time']) 

TrainSet = df[df['Time']<'2015-01-01'] 
TestSet = df[df['Time']>'2015-01-01'] 

Bunu ben kukla sınıflandırıcı şu hata mesajı

Columns_to_drop = df.filter(like='Targ', axis = 1).columns.values.tolist() 
Columns_to_drop.append('Time') 

Train_Y = TrainSet.filter(like='Targ', axis = 1) 
Train_X = TrainSet.drop(Columns_to_drop, axis=1) 

Test_y = TestSet.filter(like='Targ', axis = 1) 
Test_x = TestSet.drop(Columns_to_drop, axis=1) 

kullanarak işlemek eğer bunu Sklearns DummyClassifier() yılında çalışıyor

Train_Y = TrainSet.iloc[:, 1] 
Train_X = TrainSet.drop(TrainSet.columns[[0,1]], axis=1) 

Test_y = TestSet.iloc[:,1] 
Test_x = TestSet.drop(TestSet.columns[[0,1]], axis=1) 

kullanarak işlemek eğer.

clf = DummyClassifier() 
clf.fit(Train_X , Train_Y) 
Predict_y = clf.predict(Test_x) 

Ben iki çerçeve karşılaştırıldığında ve bu testinizi endeksli ve tren yanlış ayarlar çünkü çalışmıyor çalıştığını göstermek için TRUE

/usr/local/lib/python2.7/dist-packages/sklearn/dummy.pyc in predict(self, X) 
    174 
    175    elif self.strategy == "stratified": 
--> 176     ret = proba[k].argmax(axis=1) 
    177 
    178    elif self.strategy == "uniform": 

AttributeError: 'list' object has no attribute 'argmax' 
+0

'TestSet' nereden geliyor? Kodunuz doğrulanabilir değil, lütfen doğru içerikleri ekleyin ve çalışan bir örnek oluşturun. – Chiel

+0

, orijinal df'den bir bölümdür. 70 sütun ya da örnek bir çerçeve oluşturmanın daha iyi bir yolunu anonimleştirmek için bir yol bulmak zorunda kalmadan daha fazlasını nasıl sağlayacağınıza dair herhangi bir ipucu var mı? – KillerSnail

+0

Çalışan bir kod yapabilir misiniz? Sonra deneyebilirim. – Chiel

cevap

0

Kişisel kod dev matrisi döndürür. Bu kod yerine bu olmalıdır: Hedef setleri (Train_Y, Test_y) için DataFrames dönüyor çünkü

#! Index([u'Col2', u'Col3', u'Model_Targ', u'Time'], dtype='object') 
Train_Y = TrainSet.iloc[:, 2] 
Train_X = TrainSet.drop(TrainSet.columns[[2,3]], axis=1) 

Test_y = TestSet.iloc[:,2] 
Test_x = TestSet.drop(TestSet.columns[[2,3]], axis=1) 

Şimdi sıra ikinci kod örneğinde çalışmıyor sebebi vardır. Bu bir sorundur, çünkü DummyClassifier predict yöntemi, DataFrames'ın sahip olmadığı argmax yöntemini çağırır, ancak bunların Serileri olan sütunları yapar. Yani, ikinci kod örneğini çalışmak için, sadece Diziyi çıkarmak için sütun adını belirtmeniz gerekir.

import pandas as pd 
from sklearn.dummy import DummyClassifier 

df = pd.DataFrame({'Time':['2013-08-01 00:00:00', '2014-09-01 12:10:00', '2015-02-02 10:10:00', '2016-01-01 00:00:00'], 'Model_Targ':['a', 'b', 'a', 'b'], 'Col2':[-0.945000, -0.855000, -0.860000, -0.945000], 'Col3':[64.384028, 64.485417, 64.609028, 64.723611]}) 
df['Time'] = pd.to_datetime(df['Time']) 

TrainSet = df[df['Time']<'2015-01-01'] 
TestSet = df[df['Time']>'2015-01-01'] 

Columns_to_drop = df.filter(like='Targ', axis = 1).columns.values.tolist() 
Columns_to_drop.append('Time') 

Train_Y = TrainSet.filter(like='Targ', axis = 1)['Model_Targ'] #! 
Train_X = TrainSet.drop(Columns_to_drop, axis=1) 

Test_y = TestSet.filter(like='Targ', axis = 1)['Model_Targ'] #! 
Test_x = TestSet.drop(Columns_to_drop, axis=1) 

clf = DummyClassifier() 
clf.fit(Train_X , Train_Y) 
Predict_y = clf.predict(Test_x) 
print Predict_y