有没有什么办法可以选择二元粒子群优化中选择了多少个特征?

问题描述

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

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

解决方法

一种简单的方法是对使用任意数量的特征引入惩罚。在下面的代码中,我定义了一个目标

    # 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,10)

feature_overflow_penalty = (features_overflow / 10)

并定义一个新目标:

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

这没有经过测试,还有很多工作要做才能找到正确的惩罚。另一种选择是永远不要建议/尝试高于特定阈值的功能。