牛客题解 | 为数据集行创建复合超向量

题目

题目链接

复合超向量是一种将多个向量组合成一个向量的方法,其计算公式为:

c o m p o s i t e   h y p e r v e c t o r = ∑ i = 1 n w i × v i composite\ hypervector = \sum_{i=1}^{n} w_i \times v_i composite hypervector=i=1nwi×vi
其中, w i w_i wi 是权重, v i v_i vi 是向量。
在本题中,这是一个使用超维计算(HDC)的任务,需要通过以下步骤处理数据:

  1. 为每个特征创建两个基本超向量:
  • 一个表示特征名称
  • 一个表示特征值
    在创建过程中,需要使用随机种子来确保每次运行代码时生成的超向量是相同的。
  1. 使用绑定操作(bind)组合特征名称和值的超向量
    本题使用了点积操作来实现绑定操作,即:
    h v 1 ⋅ h v 2 = ∑ i = 1 n w i × v i hv_1 \cdot hv_2 = \sum_{i=1}^{n} w_i \times v_i hv1hv2=i=1nwi×vi
    实际上,在绑定操作中,更常使用的是异或操作,具体实现方式交由读者自行探索。
  2. 使用捆绑操作(bundle)将所有特征的超向量组合成一个复合超向量
    本题的捆绑操作使用了求和操作,即:
    ∑ i = 1 n h v i \sum_{i=1}^{n} hv_i i=1nhvi
    然后对结果进行符号化,即:
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标准代码如下

def create_hv(dim):
    return np.random.choice([-1, 1], dim)
def create_col_hvs(dim, seed):
    np.random.seed(seed)
    return create_hv(dim), create_hv(dim)
def bind(hv1, hv2):
    return hv1 * hv2
def bundle(hvs, dim):
    bundled = np.sum(list(hvs.values()), axis=0)
    return sign(bundled)
def sign(vector, threshold=0.01):
    return np.array([1 if v >= 0 else -1 for v in vector])
def create_row_hv(row, dim, random_seeds):
    row_hvs = {col: bind(*create_col_hvs(dim, random_seeds[col])) for col in row.keys()}
    return bundle(row_hvs, dim)
if __name__ == "__main__":
    row = eval(input())
    dim = int(input())
    random_seeds = eval(input())
    print(create_row_hv(row, dim, random_seeds))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值