2016-04-12 4 views
2

私はこれと同じパンダのデータフレームを持っています(残りの数字はもっとたくさんあります)。sklearnクラシファイアのパンダデータフレームをフィルタリングする2つの方法の違いは何ですか?

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'] 

私は

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) 

を使用して、それを処理した場合、それは私が

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) 

を使用して、それを処理する場合、私はダミークラシファイアにエラーが発生しますSklearns DummyClassifier() で正常に動作します。

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

私は2つのフレームを比較して、それはあなたのテストをインデックス化し、列車が間違って設定されますので、それが動作しない動作することを示すために、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」はどこから来ますか?あなたのコードは検証できません。適切なインポートを追加し、実行するサンプルを作成してください。 – Chiel

+0

元のdfから分割されています。 70列を匿名化する方法や、サンプルフレームを生成するためのより良い方法を見つけ出すことなく、より多くの情報を提供する方法についてのヒントはありますか? – KillerSnail

+0

動作するコードを作れますか?それから私はそれを試すことができます。 – Chiel

答えて

0

あなたのコードの巨大な行列を返します。このコードではなく、このようになります。あなたは、ターゲット・セット(Train_Y、Test_y)にデータフレームを戻ってきているので、

#! 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) 

、それはあなたの2番目のコード例では動作しない理由は、あります。これは問題です.DummyClassifier predictメソッドは、DataFrames自体にはありませんが、列であるSeriesが行うargmaxメソッドを呼び出します。したがって、2番目のコード例を動作させるには、列名を指定してSeriesを取り除くだけで済みます。

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 
関連する問題