我又来解析代码了,今天解析的部分是优化测试集。
1、使用每个实例的ID来判定这个实例是否应该放入测试集(假设每个实例都有唯一并且不变的ID)
import hashlib #提供字符加密功能,将md5和sha模块整合到了一起
def test_set_check(identifier,test_ratio,hash):
return hash(np.int64(identifier)).digest()[-1] < 256 * test_ratio #求出ID哈希值最后一个字节是否满足<256*ratio
def split_train_test_by_id(data, test_ratio, id_column, hash=hashlib.md5):
ids = data[id_column] #按索引找出id
in_test_set = ids.apply(lambda id_:test_set_check(id_, test_ratio, hash)) #对所有数据进行划分
return data.loc[~in_test_set], data.loc[in_test_set] #返回满足条件的划分为训练集和测试集
函数说明:
hash.digest() 返回摘要,作为二进制数据字符串值
np.int64()强转为int64类型,和int不是一个类型。
apply() 将函数应用到由各列或行形成的数组上
lambda匿名函数
loc通过标签索引行数据
2、使用行索引作为ID
housing_with_id = housing.reset_index() #使用行索引做id
housing_with_id["id"] = housing["longitu