Я реализовал функцию с Python 3.6 с именем Dynamic Weighted Majority (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 списка в качестве входных данных:
- weights: веса ансамбля классификаторов с 4 классификаторами
- y_predicts: список, в котором хранятся результаты каждого классификатора
выходные данные:
- результаты: конечные метки, которые DWM рассчитывает для данных.
- веса: обновленные веса классификаторов
В функции DWM, основанной на значениях y_predicts (0 или 1 как два класса в задаче классификации), мы вычисляем сумму весов для каждого класса.Значение для каждого элемента результатов списка устанавливается в 1 или 0 в зависимости от размера temp1_sum или temp0_sum.
проблема в том, что количество классификаторов в ансамбле варьируется и поэтому количество элементов всписок весов изменится.я понятия не имею, как изменить функцию DWM, чтобы иметь дело со списком веса переменной длины.