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 特征超过特定阈值。
我使用 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 特征超过特定阈值。