Python: 放入Pipeline时Scikit Learn MLPClassifier报错

4

我正在使用OneVsRestClassifierMLPClassifier来进行文本数据分类。我将此用于对问题集合X和多标签和多类字符串Y进行分类。请查看下面的代码片段。

text_clf = Pipeline([('scale',StandardScaler(with_mean=False)),('clf',OneVsRestClassifier(MLPClassifier(learning_rate = 'adaptive', solver = 'lbfgs',random_state=9000)))])
parameters = {'clf__alpha':[10.0 ** ~ np.arange(1, 7).any()],'clf__hidden_layer_sizes': [(100,),(50,)],'clf__max_iter': [1000,500],'clf__activation':('relu','tanh')}
grid = GridSearchCV(text_clf, parameters, cv=3, n_jobs=-1, scoring= 'accuracy') 
with parallel_backend('threading'):
    grid.fit(X,Y)

我遇到了以下错误:
ValueError: Invalid parameter activation for estimator OneVsRestClassifier(estimator=MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,
   beta_2=0.999, early_stopping=False, epsilon=1e-08,
   hidden_layer_sizes=(100,), learning_rate='adaptive',
   learning_rate_init=0.001, max_iter=200, momentum=0.9,
   n_iter_no_change=10, nesterovs_momentum=True, power_t=0.5,
   random_state=9000, shuffle=True, solver='lbfgs', tol=0.0001,
   validation_fraction=0.1, verbose=False, warm_start=False),
      n_jobs=None). Check the list of available parameters with `estimator.get_params().keys()`.

据我的理解,MLPClassifier支持多标签分类。这是否意味着需要重新审查parameters?如果是这样的话,有没有人可以给出任何线索,在哪里更改parameters
真的非常感谢任何帮助。
1个回答

3

您的MLPClassifier被嵌套在OneVsRestClassifier中作为其估计器。

换句话说,参数应该指定所有alphahidden_layer_sizes等都是针对嵌套估计器而不是OneVsRestClassifier

像下面这样更改您的参数就可以了:

parameters = {'clf__estimator__alpha':[10.0 ** ~ np.arange(1,7).any()],
    'clf__estimator__hidden_layer_sizes': [(100,),(50,)],
    'clf__estimator__max_iter': [1000,500],
    'clf__estimator__activation':('relu','tanh')}

谢谢C.Kim。然而,它会给出一个用户警告,如“UserWarning: Label not 42 is present in all training examples. str(classes[c]))”。有什么线索可以解释为什么会出现这样的警告吗? - pythondumb
@pythondumb 从外观上看,grid.fit 中的 x 存在问题。也许 https://dev59.com/_lgQ5IYBdhLWcg3wZDGd 可以帮助你解决问题 :) - Chris
非常感谢!让我使用Labelencoder,看看它是如何工作的。 - pythondumb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接