簡體   English   中英

StratifiedKfold在異構DataFrame上

[英]StratifiedKfold over heterogeneous DataFrame

我有一個pandas DataFrame,它包含需要拆分成平衡切片的字符串和浮點列,以便訓練sklearn管道。

理想情況下,我會在DataFrame上使用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()

有一些方法可以獲得折疊索引並對DataFrame進行切片,但我認為這並不能保證我的類會得到平衡。

拆分DataFrame的最佳方法是什么?

StratifiedKFold需要分割數量,而.split()方法使用標簽的類分布來對樣本進行分層。 假設您的labeltarget ,您將:

from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=2)
X=dataset.drop('target', axis=1)
y=dataset.target
for train_index, test_index in skf.split(X, y):
    X_train, X_test = X.iloc[train_index], X.iloc[test_index]
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM