我有一个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]