bounty 3 天后到期。这个问题的答案有资格获得 +50 声望奖励。
loretoparisi正在寻找规范的答案。
我有一个“理想”公式,其中我有一个值的总和,例如
score[i] = SUM(properties[i]) * frequency[i] + recency[i]
与 properties
作为值的向量,frequency
和 recency
标量值,取自给定的 N 项数据集。虽然这里的所有变量都是数字和离散整数值,但 recency
value 是给定时间范围内的 UNIX 时间戳(例如从现在开始的 1 个月,或从现在开始的 1 周,等等)。在数据集中,每一项
i
有一个日期值表示为 recency[i]
,以及频率值 frequency[i]
,以及列表 properties[i]
. item[i]
的所有属性因此在每一天都被评估为 recency[i]
在建议的时间范围内。根据这个公式,对
score
的近因贡献item[i]
的值是负贡献:时间戳越旧,得分越好(因此该公式中的 +
符号)。我的想法是在给定范围内使用重新缩放方法,例如
scaler = MinMaxScaler(feature_range=(min(recencyVec), max(recencyVec)))
scaler = scaler.fit(values)
normalized = scaler.transform(values)
哪里recencyVec
收集所有 recency
每个数据点的向量,其中 min(recencyVec)
是第一天和max(recencyVec)
是最后一天。使用 scikit-learn 对象 MinMaxScaler ,从而转换
recency
按照 How to Normalize and Standardize Time Series Data in Python 中的建议,通过将每个特征缩放到给定范围来获取值这是这个数值公式的正确方法吗?当与其他离散数值相加时,哪种替代方法可以将时间戳值归一化?
最佳答案
是 recency
那么绝对的 UNIX 时间戳?或者你已经减去了当前的时间戳?如果不是,那么根据您的目标,只需从 recency
中减去当前的 unix 时间戳就足够了。 ,以便它始终如一地描述“从现在开始的秒数”,或时间增量而不是绝对 unix 时间。
当然,这会产生相当大的分数,但它会保持一致。
您使用的缩放比例取决于您的目标(可接受的 score
是多少?),但许多都是有效的,只要它们是单调的。除了最小-最大缩放(我建议使用 0
作为最小值并将最大值设置为某个已知的最大时间偏移),您可能还需要考虑对数转换。
关于python - 如何标准化unix时间戳以求和为离散数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69771922/