问题描述
我使用 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
这没有经过测试,还有很多工作要做才能找到正确的惩罚。另一种选择是永远不要建议/尝试高于特定阈值的功能。