python - sklearn 0.17和0.18 - 如何仅检索StratifiedKFold对象的第一个值?

时间:2016-05-11 14:14:53

标签: python scikit-learn

我有一个python问题。 我用scikit-learn 0.17 有人给我一个我必须运行的示例代码。 代码是在python 2中,scikit-learn 0.18,dev版本。 我在没有问题的情况下在python 3中转换了代码。 但他使用了这个功能:

sklearn.model_selection.StratifiedKFold(n_folds=3, shuffle=False, random_state=None)

在scikit-learn 0.17中,我的功能看起来像这样:

sklearn.cross_validation.StratifiedKFold(y, n_folds=3, shuffle=False, random_state=None)

正如你所看到的,它们看起来非常相似:只有“y”才会改变。

所以我有两个解决方案:更新到0.18(我使用的是Windows,我不能使用linux)我试过这个,但是我没有成功编译源代码。

第二种解决方案是使用0.17的StratifiedKFold。 我成功解决了这个问题(我不知道它是否正在做它想做的事情,但是x))。

所以,我的问题(最后):

我必须调整这两行:

skf = StratifiedKFold(n_folds=5)
train_idx, test_idx = skf.split(patch_arr, labels).next()

目前,我写了这个(遮住你的眼睛):

skf = StratifiedKFold(labels, n_folds=5)
for train_idx, test_idx in skf:
    break 

程序运行,但我的代码很糟糕。有没有其他方法只检索前几个(train_idx,test_idx)? 我尝试使用skf [0]和skf.next(),但这都不起作用。

(为了您的信息,train_idx和test_idx是两个数组)

你有什么想法吗? 我觉得奇怪的是我也无法在我的解决方案中使用patch_arr,但如果我可以避免花费更多时间来更新scikit-image,我将非常高兴:)

1 个答案:

答案 0 :(得分:1)

以下就足够了。

train_idx, test_idx = next(iter(skf))