我正在阅读Aurélien Géron著的“用Scikit进行机器学习-学习和Tensorflow”一书。在一个关于加州房价的回归项目中,他研究了分层抽样的概念。
我想我理解他的解释:“人口被划分为同质的亚组,称为地层,每个阶层抽样正确的实例数,以保证测试集代表整个人口。”
所以用我自己的话说,简单地用sklearn的train_test_split分割数据集就会使训练和测试集很容易被错误地反映出分类变量的比率(即总体有40%的类别,60%的类别,但是这些类别的训练/测试集的比率是完全不同的),所以分层确保样本是‘随机的’,但是在测试和训练分割中仍然保持适当的比率。如果我错了,请纠正我。
以下是他基于收入类别的分层抽样的代码(住房是主要数据):
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in split.split(housing, housing['income_cat']):
strat_train_set = housing.loc[train_index]
strat_test_set = housing.loc[test_index]
我对这段代码很困惑:
1)变量“拆分”代表什么?它包括火车和试车.?
2)在第2行代码中,split.split是什么意思?我想我对StratifiedShuffleSplit如何划分训练集和测试集以及为什么他需要创建这个“for”循环来创建strat_train_set和strat_test_set感到困惑。
谢谢,
格雷格
发布于 2019-04-29 21:51:25
split
是允许我们进行分层拆分的对象,而split.split
是拆分的对象方法/函数,称为拆分,可用于执行分层拆分。
取决于您希望使用n_split参数拆分的拆分数,因此使用for循环。
发布于 2020-01-12 23:40:21
“StratifiedShuffleSplit”函数接受如何进行拆分的参数,并返回一个函数来执行拆分。
第一行中的“拆分”变量用于存储此函数。在Python中,函数/过程可以作为变量存储。
'n_splits‘表示折叠的数量。“test_size”表示测试数据集在完整数据集中的比例。
当n_splits>1时,for循环允许迭代多个拆分。例如,如果n_splits=2和test_size=0.2,数据集的“外壳”被分成两组(80%的训练和20%的测试)。
@Greg Rosen
发布于 2020-04-21 21:09:31
我也有类似的怀疑行动,然后我进行了科学学习的GitHub回购。回购链接到讨论中的文件
并发现:
快乐的建筑模型!
https://datascience.stackexchange.com/questions/51155
复制