You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

特征选择中RBFOpt算法类型设置报错,求正确配置方法

解决RBFOpt设置算法类别时的AttributeError问题

问题原因

RBFOpt的API在版本迭代后,algorithm_class参数不再通过RbfoptAlgorithm枚举类指定,而是直接接受字符串格式的算法名称作为有效值。你尝试的MSRSM、DIRECT、GA都是合法的算法标识,但不能通过枚举类调用。

另外补充一个适配场景的优化点:你的需求是特征选择(每个特征是选/不选的二元决策),所以变量类型应该设置为'B'(binary)而非'C'(continuous),这样更贴合问题的离散特性,能提升优化精度。

修正后的完整代码

import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from rbfopt import RbfoptUserBlackBox, RbfoptSettings, RbfoptAlgorithm

# 假设df已提前加载,包含10个特征和目标列Outcome_Sold
target_col = 'Outcome_Sold' 

# 定义RBFOpt的目标函数
def objective_function(features):
    # 将模型输出的连续值转为二元选择逻辑(大于0.5视为选中特征)
    selected_features = [df.columns[i] for i in range(10) if features[i] > 0.5]
    if not selected_features:
        return 1.0  # 避免空特征集导致模型训练报错,返回最差得分
    X = df[selected_features].values
    y = df[target_col].values
    model = RandomForestRegressor()
    model.fit(X, y)
    return -model.score(X, y)  # 最小化负R²分数,等价于最大化R²

# 特征选择的上下界(0=不选,1=选)
lower_bound = [0] * 10  
upper_bound = [1] * 10  

# 变量类型改为二元类型,匹配特征选择场景
var_type = ['B'] * 10  

# 创建黑盒函数实例
black_box = RbfoptUserBlackBox(10, lower_bound, upper_bound, var_type, 
                               obj_funct=objective_function)

# 设置RBFOpt参数:直接用字符串指定算法类别
settings = RbfoptSettings()
settings.algorithm_class = 'MSRSM'  # 替换为'DIRECT'或'GA'均可
settings.num_global_search = 50
settings.num_rbf = 500

# 执行优化流程
algorithm = RbfoptAlgorithm(settings, black_box)
best_val, best_x, _ = algorithm.optimize()
print(f"最优负R²得分: {best_val}")
print(f"选中的特征索引(大于0.5视为选中): {[i for i, val in enumerate(best_x) if val > 0.5]}")

关键修改说明

  1. 移除了RbfoptAlgorithm枚举类的调用,直接用字符串赋值给settings.algorithm_class
  2. 将var_type从连续类型改为二元类型,适配特征选择的离散决策需求
  3. 增加空特征集的处理逻辑,避免模型训练报错
  4. 补充完整的优化执行代码,可直接运行验证结果

内容的提问来源于stack exchange,提问作者JohnH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:14:54