我有一个功能预处理问题,对于我来说,它有点太复杂了。 我想从其他3个中生成一个“跨功能”,让我详细介绍一下:
我的ML问题是向用户推荐商品。 在我的示例中,有关于用户的功能和关于商品的功能。我正在尝试预测用户是否会喜欢此商品。 我们使用张量流示例。
我的用户功能中有一个项目ID的“映射”到用户的“亲和力”。我们称其为“项目关联性地图”
亲和力本身是由另一个过程计算的。
由于Tensorflow示例中没有地图类型,因此我们有2个功能:一个是商品ID的有序列表,另一个是亲和力的有序列表。它们是同步的。因此,我的“项目关联性地图”实际上由要素item_affinities_ids
和item affinities
表示。
是的,我正在使用商品相似性信息作为输入,并尝试预测其他商品相似性。但是这些是不同的,输入是针对与我要预测的产品用例不同的用例计算的。
我还具有第3个功能,即我要为其计算新亲和力的商品的item_id
。
在天真的numpy中,我可以这样:
item_name = np.array(["item-a"])
item_affinities_ids = np.array(["item-0", "item-a", "item-b"])
item_affinities = np.array([0.2, 0.3, 0.4])
indices = np.where(item_affinities_ids == item_name)
return item_affinities[indices]
现在,在现实生活中,事情可能会变得更加复杂:
item_affinities_ids
和item affinities
表示为SparseTensor
。但是,如果其中一个存在,则另一个也存在,并且可以保证它们是同步的(相同大小,相同顺序)。item_id
可能不存在于“项目关联图”中。在那种情况下,我想要一个默认值(0.0)。我正在寻找可满足所有这些要求的张量流实施。 到目前为止,我有:
# using constants for the demonstration. In real life it would be tensors.
item_name = tf.constant([["item-a"], ["item-3"]])
item_affinities_ids = tf.constant([["item-0", "item-a", "item-b"], ["item-2", "item-1", "item-3"]])
item_affinities = tf.constant([[0.2, 0.3, 0.4], [0.2, -0.9, 0.4]])
return tf.boolean_mask(item_affinities, tf.equal(item_affinities_ids, item_name))
但是它不能处理SparseTensor以及item_id不在item_affinities
列表中的情况。
我正在寻找任何人来帮助我。