扩展带vs不带循环的元组

时间:2019-02-28 15:59:13

标签: python-3.x scikit-learn

我正在学习 Aurelien Geron 动手机器学习书中的练习。

假设data是一个数据帧:

income_cat  index
0         5.0      0
1         5.0      1
2         5.0      2
3         5.0      3
4         5.0      4

from sklearn.model_selection import StratifiedShuffleSplit
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)

选项A(来自图书):

for test_indices, train_indices in split.split(data, data.income_cat):
    print(test_indices, train_indices)

选项B:

 test_indices, train_indices = split.split(data, data.income_cat)
 print(test_indices, train_indices)    

选项B为什么不起作用?这是一个python问题,而不是sklearn问题。

一个元组应该同时循环或不循环,我会丢失什么? 选项A和B之间的唯一区别是for循环。

选项A的输出:

[4 2 1 0] [3]

选项B的输出:

ValueError: not enough values to unpack (expected 2, got 1)

1 个答案:

答案 0 :(得分:2)

StratifiedShuffleSplit.split返回generator而不是列表。在引擎盖下的for循环中,生成器上称为__next__方法,它返回序列的下一个元素(生成器最终生成)。返回的元素解包为两个变量:test_indices, train_indices

您可以通过使用辅助函数__next__显式调用next()来达到相同的结果:

 test_indices, train_indices = next(split.split(data, data.income_cat))