RandomizedSearchCV调参出现测试得分非有限警告如何解决
问题根源
你遇到的警告完全是max_features超参数的取值范围非法导致的,和数据集编码、类别覆盖问题无关:
随机森林的max_features参数如果传入浮点型数值,代表节点分裂时抽样使用的特征占总特征数的比例,合法取值区间为*(0, 1]*。而你的代码中使用np.arange(0, 1, 0.05)生成参数候选值,生成的数组第一个元素为0,当随机搜索抽到该参数值时,单棵决策树节点分裂时无法选择任何特征,模型训练失败,对应交叉验证折的得分直接返回nan,最终触发UserWarning。你移除该参数后所有参数均为合法取值,自然不会出现警告。
你现有编码逻辑是正常的,因为移除max_features后调参流程完全正常,不需要调整数据预处理逻辑。
解决方法
- 调整
max_features的候选值范围,把起始值调整为大于0的数值,示例如下:
'max_features': np.arange(0.1, 1, 0.05) # 最小取0.1,确保所有取值合法
- 后续调参时如果遇到类似nan警告,可以给
RandomizedSearchCV添加error_score='raise'参数,遇到参数非法时会直接抛出明确错误,比返回nan更方便定位问题:
random_model_search = RandomizedSearchCV( estimator=classifier, param_distributions=param_grid, n_iter=100, scoring="f1", return_train_score=True, n_jobs=-1, cv=3, random_state=random, error_score='raise' # 出错直接抛出异常 )
内容的提问来源于stack exchange,提问作者ectoplasm
相关产品推荐
相关产品推荐

