我正在研究一种简单的方法,以紧凑的方式定义要自动实例化和评估的不同分类实验,以获得针对特定问题的最佳算法和参数组合。
下面是使笛卡尔积产生所有可能的参数值组合的代码的特定部分:
def unpack_parameters(parameters_list):
parameters = []
for parameter_name, parameter_values in parameters_list.items():
if len(parameters) == 0:
parameters = [{parameter_name: parameter_value} for parameter_value in parameter_values]
else:
parameters = [dict(parameter.items() + {parameter_name: parameter_value}.items())
for parameter_value in parameter_values for parameter in parameters]
return parameters
¿我可以通过使用递归得到相同的结果吗?
上面的代码有效并产生了预期的结果。我也知道我可以使用 itertools.product 来获得相同的结果。但这是一个学习是否可以在这里使用递归的问题,而不是它是否是解决特定问题的正确工具(尽管我不介意对此发表评论)。
如果有人感兴趣,这里是如何使用此代码的:
experiment_definitions = {
'sklearn.tree.DecisionTreeClassifier':
{'criterion': ['entropy', 'gini'],
'min_samples_split': [2, 4, 8, 16, 32, 64]}
}
classifiers = {}
for classifier_class, parameters_list in experiment_definitions.items():
classifiers[classifier_class] = unpack_parameters(parameters_list)
要产生这个:
{'sklearn.tree.DecisionTreeClassifier':
[{'min_samples_split': 2, 'criterion': 'entropy'}, {'min_samples_split': 4, 'criterion': 'entropy'}, {'min_samples_split': 8, 'criterion': 'entropy'}, {'min_samples_split': 16, 'criterion': 'entropy'}, {'min_samples_split': 32, 'criterion': 'entropy'}, {'min_samples_split': 64, 'criterion': 'entropy'}, {'min_samples_split': 2, 'criterion': 'gini'}, {'min_samples_split': 4, 'criterion': 'gini'}, {'min_samples_split': 8, 'criterion': 'gini'}, {'min_samples_split': 16, 'criterion': 'gini'}, {'min_samples_split': 32, 'criterion': 'gini'}, {'min_samples_split': 64, 'criterion': 'gini'}]}
呼啦一阵风
POPMUISE
相关分类