我已经使用名为动态加权多数的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个列表作为输入:
输出为:
在基于y_predicts的值(分类问题中为两个类别的0或1)的DWM函数中,我们计算每个类别的权重之和。列表结果中每个元素的值根据temp1_sum或temp0_sum的大小设置为1或0。
问题在于,集成中分类器的数量会发生变化,因此权重列表中的项目数也会发生变化。我不知道如何更改DWM函数以处理可变长度的权重列表。