【发布时间】:2017-08-23 12:49:03
【问题描述】:
我有一个问题,我想测试多个模型,但这些模型并不都具有相同的命名参数。您将如何使用RandomizedSearchCV 中的管道参数列表,就像您可以在此示例中使用GridSearchCV 一样?
示例来自:
https://scikit-learn.org/stable/auto_examples/compose/plot_compare_reduction.html
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.svm import LinearSVC
from sklearn.decomposition import PCA, NMF
from sklearn.feature_selection import SelectKBest, chi2
pipe = Pipeline([
# the reduce_dim stage is populated by the param_grid
('reduce_dim', None),
('classify', LinearSVC())
])
N_FEATURES_OPTIONS = [2, 4, 8]
C_OPTIONS = [1, 10, 100, 1000]
param_grid = [
{
'reduce_dim': [PCA(iterated_power=7), NMF()],
'reduce_dim__n_components': N_FEATURES_OPTIONS,
'classify__C': C_OPTIONS
},
{
'reduce_dim': [SelectKBest(chi2)],
'reduce_dim__k': N_FEATURES_OPTIONS,
'classify__C': C_OPTIONS
},
]
grid = GridSearchCV(pipe, cv=3, n_jobs=2, param_grid=param_grid)
digits = load_digits()
grid.fit(digits.data, digits.target)
【问题讨论】:
-
你找到解决办法了吗?
-
不幸的是,我从来没有发现一个已经实现的。不过,现在对我来说实现自我似乎不那么困难了。需要创建一个接受输入参数字典的函数(可能需要一个带有键的字典,每个模型的键值是模型参数的字典)返回 cv 分数。您可能希望首先设置 cv 训练/测试集,以便每个实验使用相同的数据。然后我认为你只需要为参数的随机排列创建一个迭代器并调用 eval 函数,存储结果。
-
“我想测试多个模型,它们的命名参数并不相同。”您的示例代码没有演示这个要求。
-
我明白了。您想搜索不同的变形金刚。我这样做的方法是为具有布尔
enabled参数的变形金刚制作包装类。然后将它们全部包含在管道中。如果未启用转换器包装器,则fit和transform什么也不做。如果你愿意,我可以发布代码。
标签: python scikit-learn