2

私はsklearnパイプラインを訓練するために平衡スライスに分割する必要があるstring列とfloat列を含むpandas DataFrameを持っています。異種データフレーム上のStratifiedKfold

理想的には、DataFrameに対してStratifiedKFoldを使用して、より小さいチャンクを相互検証することができます。しかし、それは私がこのように、unorderable種類を持っていると文句を言い:

import pandas as pd 
from sklearn.cross_validation import StratifiedKFold 

dataset = pd.DataFrame(
    [ 
     {'title': 'Dábale arroz a la zorra el abad', 'size':1.2, 'target': 1}, 
     {'title': 'Ana lleva al oso la avellana', 'size':1.0, 'target': 1}, 
     {'title': 'No te enrollé yornetón', 'size':1.4, 'target': 0}, 
     {'title': 'Acá sólo tito lo saca', 'size':1.4, 'target': 0}, 
    ]) 
skfs = StratifiedKFold(dataset, n_folds=2) 

>>> TypeError: unorderable types: str() > float() 

があり折り目のインデックスを取得する方法であり、データフレームの上にスライスんが、私は私のクラスが行っている保証がバランスされることはないと思います。

私のDataFrameを分割する最も良い方法は何ですか?

答えて

4

StratifiedKFoldは、入力としてlabelをとります。あなたのlabeltargetであると仮定すると、あなたはなります

from sklearn.cross_validation import StratifiedKFold 
skf = StratifiedKFold(dataset.target, n_folds=2) 
for train_index, test_index in skf: 
    X_train, X_test = dataset.loc[train_index, ['title', 'size']], dataset.loc[test_index, ['title', 'size']] 
    Y_train, Y_test = dataset.loc[train_index, 'target'], dataset.loc[test_index, 'target'] 
+0

バージョン0.18から非推奨:このモジュールは0.20で削除されます。代わりにsklearn.model_selection.StratifiedKFoldを使用してください。 – Matt

1

sklearn.cross_validation.StratifiedKFoldは、バージョン0.18以降廃止され、0.20で削除されます。したがって、別の方法があります:

from sklearn.model_selection import StratifiedKFold 

skf = StratifiedKFold(n_splits=2) 
t = dataset.target 
for train_index, test_index in skf.split(np.zeros(len(t)), t): 
    train = dataset.loc[train_index] 
    test = dataset.loc[test_index]