我有一个pandas数据框架,它包含字符串和浮点数列,需要将它们分割成平衡的片,以便训练sklearn管道。
理想情况下,我会在数据帧上使用StratifiedKFold来获取较小的数据块以进行交叉验证。但它抱怨我有不可排序的类型,比如:

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()

有很多方法可以获取折叠索引并在数据帧上进行切片,但我不认为这能保证我的类是平衡的。
分割我的数据帧的最佳方法是什么?

最佳答案

sklearn.cross_validation.StratifiedKFold自0.18版起已弃用,并将在0.20中删除。So here is an alternative approach:

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]

07-24 14:27