machine-learning - 评估替代分类器时,RandomizedSearchCV 在 Pipeline 中不起作用

标签 machine-learning scikit-learn

在 Scikit Learn 中,RandomizedSearchCV 可用于评估管道中的不同参数,但仅限于分类器共享相似/相同参数的某些情况。当您为不同的分类器传递参数 block 时,当 GridSearchCV 成功时,它会失败。

您会在下面的代码中注意到,网格搜索和随机搜索的问题设置是相同的,但只有随机搜索失败。

numpy.random.seed(52)
MY_RAND_SEED=numpy.random.seed(52)


pipe = Pipeline([
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler' , StandardScaler()),
    ('classify', LogisticRegression())
])

X, y = make_classification(n_samples= 500, n_features=58, n_redundant=13, n_informative=7, n_clusters_per_class=2)

param_grid_linear = [
    {'classify' : [LogisticRegression(),],
     'classify__penalty' : ['l1', 'l2'],
     'classify__C' : numpy.logspace(-4, 4, 50),
     'classify__solver' : ['liblinear']},
    {'classify' : [LogisticRegression(),],
     'classify__penalty' : ['l2'],
     'classify__C' : numpy.logspace(-4, 4, 50),
     'classify__solver' : ['lbfgs']},
    {'classify': [SVC(),],
     'classify__kernel': ['linear',],
     'classify__C': numpy.linspace(0.001,200, 10),},
]


innercv=StratifiedKFold(n_splits=5, shuffle=True, random_state=numpy.random.seed(52))
gridA = GridSearchCV(pipe, param_grid_linear, scoring='accuracy', iid=False, verbose=1, n_jobs=12)
gridA.fit(X, y)
print("finished grid search")

gridB = RandomizedSearchCV(pipe, param_grid_linear, scoring='accuracy', n_iter=5, iid=False, verbose=1, n_jobs=12)
gridB.fit(X, y)

最佳答案

显然,通常只传递字典列表作为参数 {dict, dict, dict},但是要执行我上面建议的操作,需要传递字典列表列表,目前仅 GridSearchCV 接受该列表。 RandomizedSearchCV 现在不接受这一点,但会在 sklearn 的 future 版本中接受。以下是我在 GitHub 上收到的回复:

来自:Thomas J Fan 日期:2019 年 8 月 14 日星期三晚上 7:13

这个问题已在 #14549 中解决 此功能尚未发布,但您可以通过安装 scikit-learn 的 nightly build 来尝试: pip install --pre -f https://sklearn-nightly.scdn8.secure.raxcdn.com scikit学习

关于machine-learning - 评估替代分类器时,RandomizedSearchCV 在 Pipeline 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57502137/

相关文章:

machine-learning - 解释使用一对一选择输出的多类 SVM

python - 使用sklearn NMF组件重建新数据与inverse_transform不匹配

python - Scikit Learn RFECV 值错误 : continuous is not supported

python - 检测图片中表格的模型

machine-learning - 逻辑回归曲线的拒绝输入

python - 从 csv 获取 Pandas 系列

python - 从 sklearn PCA 获取特征值和向量

python - sklearn Predict_proba 返回无穷大概率

java - 将新实例添加到集群器

python - 如何提高前馈神经网络的准确性?