AdaBoost - 如何使用分布 D
AdaBoost - How to use the distribution D
我打算在 Python 中实现 AdaBoost 算法。
我在名为 classifiers
的列表中有 m 个弱分类器。
我有向量 _D,其中包含当前迭代的分布值。
我的代码如下所示(向量是 numpy 数组):
for t in range(m):
chosen_examples_indexes = []
for i, d in enumerate(_D):
if np.random.binomial(1, d) == 1:
chosen_examples_indexes.append(i)
training_examples = examples[chosen_examples_indexes]
问题是_D iw的使用是否正确。如果不是,正确的用法是什么?
AdaBoost 在其核心版本中使用分布 D 来 加权 你的样本,而不是对它们进行采样(尽管在极限情况下这几乎是一样的,在固定长度的情况下这完全不同)。
因此在您的符号中,您只需做
X, y = # get training data from examples
for t in range(m):
classifiers[t].fit(X, y, sample_weights=_D)
# update _D based on results
如果你的分类器不支持 sample_weights 那么问题就更多了,解决方案或多或少与你提供的一样,但是权重应该总是 preferred 如果仅可能,因为它是对我们感兴趣的内容的直接优化,而不是随机近似(来自采样)。
for t in range(m):
chosen_examples_indexes = np.array([np.random.random() < _d for _d in _D])
training_examples = examples[chosen_examples_indexes]
X, y = # get training data from training_examples
classifiers[t].fit(X, y)
# update _D based on results
我打算在 Python 中实现 AdaBoost 算法。
我在名为 classifiers
的列表中有 m 个弱分类器。
我有向量 _D,其中包含当前迭代的分布值。
我的代码如下所示(向量是 numpy 数组):
for t in range(m):
chosen_examples_indexes = []
for i, d in enumerate(_D):
if np.random.binomial(1, d) == 1:
chosen_examples_indexes.append(i)
training_examples = examples[chosen_examples_indexes]
问题是_D iw的使用是否正确。如果不是,正确的用法是什么?
AdaBoost 在其核心版本中使用分布 D 来 加权 你的样本,而不是对它们进行采样(尽管在极限情况下这几乎是一样的,在固定长度的情况下这完全不同)。
因此在您的符号中,您只需做
X, y = # get training data from examples
for t in range(m):
classifiers[t].fit(X, y, sample_weights=_D)
# update _D based on results
如果你的分类器不支持 sample_weights 那么问题就更多了,解决方案或多或少与你提供的一样,但是权重应该总是 preferred 如果仅可能,因为它是对我们感兴趣的内容的直接优化,而不是随机近似(来自采样)。
for t in range(m):
chosen_examples_indexes = np.array([np.random.random() < _d for _d in _D])
training_examples = examples[chosen_examples_indexes]
X, y = # get training data from training_examples
classifiers[t].fit(X, y)
# update _D based on results