[英]Convert heterogeneous pandas.DataFrame to homogeneous one
[英]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()
方法使用標簽的類分布來對樣本進行分層。 假設您的label
是target
,您將:
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.