pyweka的MultiSearch函数可用参数有哪些?运行示例报参数非法如何解决?
报错原因
你传入MultiSearch的-sample-size、-initial-folds、-subsequent-folds、-num-slots不属于MultiSearch类本身的合法参数,这些配置是MultiSearch内部调用的搜索算法的参数,直接放在外层options里就会触发非法参数报错。
MultiSearch合法参数列表
你可以运行print(MultiSearch.to_help())打印完整的参数说明,常用合法参数如下:
-S <整数>:随机数种子,你代码里保留的该参数是合法的-E <字符串>:模型选优的评估指标缩写,和multi.evaluation赋值作用一致-folds <整数>:交叉验证的折数-output-debug-info:开启调试日志输出-algorithm <搜索算法类>:指定参数搜索的执行算法,默认使用weka.classifiers.meta.multisearch.DefaultSearch
修复方案
将原本传入外层的算法参数转移给内部的默认搜索算法即可,修复后的代码如下:
from weka.classifiers import MultiSearch, Classifier, DefaultSearch from weka.core.multisearch import MathParameter, ListParameter # 初始化MultiSearch,仅传入本身支持的参数 multi = MultiSearch(options=["-S", "1"]) multi.evaluation = "CC" multi.folds = 2 # 配置内部搜索算法,传入采样、折数、线程相关参数 search_alg = DefaultSearch(options=[ "-sample-size", "100.0", "-initial-folds", "2", "-subsequent-folds", "2", "-num-slots", "1" ]) multi.algorithm = search_alg # 后续参数配置、分类器定义、训练逻辑不变 mparam = MathParameter() mparam.prop = "classifier.kernel.gamma" mparam.minimum = -3.0 mparam.maximum = 3.0 mparam.step = 1.0 mparam.base = 10.0 mparam.expression = "pow(BASE,I)" lparam = ListParameter() lparam.prop = "classifier.C" lparam.values = ["-2.0", "-1.0", "0.0", "1.0", "2.0"] multi.parameters = [mparam, lparam] cls = Classifier( classname="weka.classifiers.functions.SMOreg", options=["-K", "weka.classifiers.functions.supportVector.RBFKernel"]) multi.classifier = cls multi.build_classifier(data) print("Model:\n" + str(multi)) print("\nBest setup:\n" + multi.best.to_commandline())
扩展说明
如果需要查看内部搜索算法的所有可配置参数,可以运行如下代码获取完整帮助:
print(DefaultSearch.to_help())
内容的提问来源于stack exchange,提问作者Pablo Moreira Garcia
相关产品推荐
相关产品推荐

