Binary Particle Swarm Optimization 有什么方法可以选择选择多少个特征?

Is there any way to choose how many features are selected in Binary Particle Swarm Optimization?

我使用 pyswarms 库将 BPSO 实现为一种特征选择方法。 I followed this tutorial.

有没有办法限制特征的最大数量?如果没有,是否有其他粒子群(或 genetic/simulated 退火)python-具有此功能的实现?

一种简单的方法是对使用任意数量的功能进行惩罚。在下面的代码中我定义了objective

    # Perform classification and store performance in P
    classifier.fit(X_subset, y)
    P = (classifier.predict(X_subset) == y).mean()
    # Compute for the objective function
    j = (alpha * (1.0 - P)
        + (1.0 - alpha) * (1 - (X_subset.shape[1] / total_features)))

    return j

如果特征数量约为 max_num_features,您可以做的是增加惩罚,例如

features_count = np.count_nonzero(m)
features_overflow = np.clip( max_num_features - features_count, 0, 10)

feature_overflow_penalty = (features_overflow / 10)

并定义一个新的 objective:

j = (alpha * (1.0 - P)
        + (1.0 - alpha) * (1 - (X_subset.shape[1] / total_features))) - feature_overflow_penalty

这还没有经过测试,需要做一些工作才能找到合适的惩罚。另一种方法是永远不要 suggest/try 特征超过特定阈值。