我正在遵循Hands on Machine learning with Sci-kit learn and tensorflow 2nd edition
的代码。在创建训练和测试数据集部分中,他们按照此过程创建训练和测试数据集,如下所示:
from zlib import crc32
def test_set_check(identifier, test_ratio):
return crc32(np.int64(identifier)) & 0xffffffff < test_ratio * 2**32
def split_train_test_by_id(data, test_ratio, id_column):
ids = data[id_column]
in_test_set = ids.apply(lambda id_: test_set_check(id_, test_ratio))
return data.loc[~in_test_set], data.loc[in_test_set]
housing_with_id = housing.reset_index() # adds an `index` column
train_set, test_set = split_train_test_by_id(housing_with_id, 0.2, "index")
根据作者:
您可以计算每个实例标识符的哈希值,如果该哈希值小于或等于最大哈希值的20%,则将该实例放入测试集中。这样可以确保即使刷新数据集,测试集在多个运行中也将保持一致。新的测试集将包含20%的新实例,但将不包含训练集中的任何先前实例。
因此,我想了解以下代码行的作用:crc32(np.int64(identifier)) & 0xffffffff < test_ratio * 2**32
非常感谢您的帮助!
答案 0 :(得分:0)
这可能有点晚了,但是如果您仍在寻找答案,这里是crc32函数的documentation的形式:
在3.0版中进行了更改:始终返回无符号值。产生 在所有Python版本和平台上都使用相同的数值,请使用 crc32(data)和0xffffffff。
因此,从本质上讲,它只是确保谁运行此功能,无论他们运行的是Python 2还是3,都无关紧要。