用于输入长度可变的python中的动态加权多数函数

时间:2018-11-30 18:47:10

标签: python machine-learning classification ensemble-learning

我已经使用名为动态加权多数的python 3.6实现了一个函数(在下面的代码中为DWM),我将其用于分类问题。

def DWM(weights, y_predicts):
results = [] * 5

for k in range(5):
    temp0_sum = 0.0
    temp1_sum = 0.0
    for m in range(4):
        if y_predicts[m][k] == 0:
            temp0_sum += weights[m]
        elif y_predicts[m][k] == 1:
            temp1_sum += weights[m]

    if temp0_sum > temp1_sum:
        results.append(0)
    elif temp0_sum < temp1_sum:
        results.append(1)
    for m in range(4):
        if y_predicts[m][k] == results[k]:
            weights[m] = weights[m]
        elif y_predicts[m][k] != results[k]:
            weights[m] *= 0.5

return results, weights

weights = [1, 1, 1, 1]
y_predicts = [] * len(weights)
y_predicts.append([1, 1, 0, 0, 1])
y_predicts.append([1, 1, 0, 1, 0])
y_predicts.append([0, 1, 0, 0, 0])
y_predicts.append([1, 1, 0, 0, 0])

results, weights = DWM(weights, y_predicts)
print(results)
print(weights)

在此代码中(针对我的分类问题),每个数据点都是一个长度为5的列表,这意味着我们对每个数据都有5个属性。

我们有4个分类器的集合,并有一个列表,称为权重。 此功能以2个列表作为输入:

  1. weights:具有4个分类器的分类器集合的权重
  2. y_predicts:保留每个分类器结果的列表

输出为:

  1. results:DWM为数据计算的最终标签。
  2. weights:分类器的更新权重

在基于y_predicts的值(分类问题中为两个类别的0或1)的DWM函数中,我们计算每个类别的权重之和。列表结果中每个元素的值根据temp1_sum或temp0_sum的大小设置为1或0。

问题在于,集成中分类器的数量会发生变化,因此权重列表中的项目数也会发生变化。我不知道如何更改DWM函数以处理可变长度的权重列表。

0 个答案:

没有答案