从数据中学习 OWA 算子权重(决策融合 - 模糊系统)

问题描述 投票:0回答:0

我正在尝试实施本文中的示例 1:学习加权 OWA 运算符的权重 (https://ieeeexplore.ieee.org/document/343740)

它非常简单明了,表明为了更新权重,我们需要更新 lambda 表达式,为了更新 lambda 表达式,有这个公式:

在 150 次迭代后的文章 lambdas 是: l1=-0.61; l2 = -0.29; l3 = -0.05; lq = 1.51

但是我的代码得到了不同的结果!这是我的代码:

iterations = 150
beta = 0.35

samples = [[0.4, 0.1, 0.3, 0.8, 0.24],
           [0.1, 0.7, 0.4, 0.1, 0.16],
           [1.0, 0.0, 0.3, 0.5, 0.15],
           [0.2, 0.2, 0.1, 0.4, 0.17],
           [0.6, 0.3, 0.2, 0.1, 0.18]]

sensors = {0: {'lambda': 0}, 1: {'lambda': 0}, 2: {'lambda': 0}, 3: {'lambda': 0}}


def calculate_lambda(sample, aggregated_value):
    sample.sort(reverse=True)
    def calculate_sum():
        dk = 0
        for i in range(4):
            dk += math.exp(sensors[i]['lambda'])
        return dk

    lambda_j = calculate_sum()

    def calculate_dkHat():
        dk = 0
        for i in range(4):
            dk += sample[i] * (math.exp(sensors[i]['lambda']) / lambda_j)
        return dk

    for i in range(4):  # calculate lambda for each sensor
        a = math.exp(sensors[i]['lambda']) / lambda_j
        dkHat = calculate_dkHat()
        derivative = a * (sample[i] - dkHat) * (dkHat - aggregated_value)
        sensors[i]['lambda'] = sensors[i]['lambda'] - beta * derivative


# main loop
for iteration in range(150):
    for sample in samples:
        calculate_lambda(sample[:4], sample[4])

print(sensors)

有人知道我错过了什么吗?或者有人以前实施过这篇文章的例子吗?

machine-learning artificial-intelligence bigdata computer-science fuzzy
© www.soinside.com 2019 - 2024. All rights reserved.