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

题目

题目链接

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

\[composite\ hypervector = \sum_{i=1}^{n} w_i \times v_i \]

其中,\(w_i\) 是权重,\(v_i\) 是向量。
在本题中,这是一个使用超维计算(HDC)的任务,需要通过以下步骤处理数据:

  1. 为每个特征创建两个基本超向量:
  • 一个表示特征名称
  • 一个表示特征值
    在创建过程中,需要使用随机种子来确保每次运行代码时生成的超向量是相同的。
  1. 使用绑定操作(bind)组合特征名称和值的超向量
    本题使用了点积操作来实现绑定操作,即:

\[hv_1 \cdot hv_2 = \sum_{i=1}^{n} w_i \times v_i \]

实际上,在绑定操作中,更常使用的是异或操作,具体实现方式交由读者自行探索。
3. 使用捆绑操作(bundle)将所有特征的超向量组合成一个复合超向量
本题的捆绑操作使用了求和操作,即:

\[\sum_{i=1}^{n} hv_i \]

然后对结果进行符号化,即:
alt

标准代码如下

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))
posted @ 2025-03-12 12:39  wangxiaoxiao  阅读(14)  评论(0)    收藏  举报