Machine learning 在评估替代分类器时,RandomizedSearchCV在管道中不起作用

Machine learning 在评估替代分类器时,RandomizedSearchCV在管道中不起作用,machine-learning,scikit-learn,Machine Learning,Scikit Learn,在Scikit Learn中,RandomizedSearchCV可用于评估管道中的不同参数,但仅在分类器共享相似/相同参数的某些情况下。当您为不同的分类器传递参数块时,GridSearchCV成功时将失败 您将在下面的代码中注意到,gridsearch和random search的问题设置相同,但只有random search失败 numpy.random.seed(52) MY_RAND_SEED=numpy.random.seed(52) pipe = Pipeline([ (

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

您将在下面的代码中注意到,gridsearch和random search的问题设置相同,但只有random search失败

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的未来版本中提供。以下是我在GitHub上收到的回复:

发件人:托马斯J范 日期:2019年8月14日星期三晚上7:13

这一问题在14549年得到了解决 此功能尚未发布,但您可以通过安装scikit learn的夜间版本来尝试:
pip install--f scikit learn之前的版本显然,通常只传递字典列表作为参数{dict,dict,dict},但要执行我上面建议的操作,需要传递字典列表,目前只有GridSearchCV接受。 RandomizedSearchCV现在不接受这一点,但将在sklearn的未来版本中提供。以下是我在GitHub上收到的回复:

发件人:托马斯J范 日期:2019年8月14日星期三晚上7:13

这一问题在14549年得到了解决 此功能尚未发布,但您可以通过安装scikit learn的夜间版本来尝试:
pip安装——f scikit之前的学习

顺便说一句,它失败了,属性错误AttributeError:'list'对象没有属性'values'。经过进一步调查,我发现方括号对于RandomizedSearchCV是个问题,但对于GridSearchCV则不是。我不知道是否有解决方法。顺便说一句,它失败了,出现了属性错误AttributeError:“list”对象没有属性“values”。经过进一步调查,我发现方括号对于RandomizedSearchCV是个问题,但对于GridSearchCV则不是。我不知道是否有解决办法。