这个问题与 什么是转换循环序数属性的好方法密切相关? 以及 处理经度/纬度特征的方法
他们对标准化小时变量和纬度变量的方法给出了非常明确的答案。
这个问题的添加是关于如何处理具有weekday和hour特征的规范化。我想知道这是因为它们是相同信息的不同粒度级别,因此是严格相关的。
目标是运行将归一化的工作日和小时特征与其他传统数字特征相结合的 k-means 算法。
这个问题与 什么是转换循环序数属性的好方法密切相关? 以及 处理经度/纬度特征的方法
他们对标准化小时变量和纬度变量的方法给出了非常明确的答案。
这个问题的添加是关于如何处理具有weekday和hour特征的规范化。我想知道这是因为它们是相同信息的不同粒度级别,因此是严格相关的。
目标是运行将归一化的工作日和小时特征与其他传统数字特征相结合的 k-means 算法。
@AN6U5 答案中的基本转换在以下几行中完成:
df['hourfloat']=df.hour+df.minute/60.0
df['x']=np.sin( 2.np.pi df.hourfloat/24.)
df['y']=np.cos( 2. np.pi df.hourfloat/24.)
在第一行中,他通过将分钟除以 60 将分钟转换为小时,例如 20 分钟转换为 0.3333 小时
之后,在第 2 行和第 3 行中,他将此浮点数从极坐标转换为笛卡尔坐标(https://en.wikipedia.org/wiki/Polar_coordinate_system)
因此,将这一点从一个小时变为工作日,您只需要调整第一行。
想象一个时钟,其中 00:00 是星期一,然后是星期二(顺时针),依此类推……您需要将小时转换为工作日(为简单起见,我假设工作日的值是 0-7)。因此,首先你将你的小时除以 24 将其转换为天,然后再将其再除以 7 以得到一个以周为单位的浮点数。然后将您的工作日添加到小时,然后按照给定的方式执行第 2 行和第 3 行,只是将 24 更正为 7。
作为一个公式:小时/(24 * 7)+工作日=周浮动我自己没有尝试过,但我认为应该这样做。
或者,当您有两个循环特征时,您可以将 weekday 和 hour 转换为球坐标。这将为您留下三个坐标,x、y 和 z,但也保留了一个特征本身内的“接近性”。