我正在阅读 Aurélien Géron 的《使用 Scikit-Learn 和 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)变量'split'代表什么?它是否包括训练和测试分裂......?
2) 在第二行代码中,split.split 是什么意思?我想我对 StratifiedShuffleSplit 如何划分训练集和测试集以及为什么他需要创建这个“for”循环以创建strat_train_set 和strat_test_set 的大部分内容感到困惑。
谢谢,
格雷格