1

I am creating, tuning, and fitting various sci-kit learn models for a classification problem. The structure of the code below works fine for all other methods (SVM, Logistic Regression, Random Forest, Decision Tree, etc.)

When running the MLPClassifier() and its hyperparameter tuning, I get the error message originating from the last line where I fit:

AttributeError                            Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_8160/4102235488.py in <module>
     19 
     20 reverse_mlp_en_clf = GridSearchCV(reverse_mlp_en, reverse_mlp_en_hyperparameters, cv = 5, verbose = 1, n_jobs = 5, scoring = 'f1')
---> 21 reverse_mlp_en_best_model = reverse_mlp_en_clf.fit(X_en, y_en)

~\AppData\Roaming\Python\Python38\site-packages\sklearn\model_selection\_search.py in fit(self, X, y, groups, **fit_params)
    737             refit_start_time = time.time()
    738             if y is not None:
--> 739                 self.best_estimator_.fit(X, y, **fit_params)
    740             else:
    741                 self.best_estimator_.fit(X, **fit_params)

~\AppData\Roaming\Python\Python38\site-packages\sklearn\neural_network\_multilayer_perceptron.py in fit(self, X, y)
    992         self : returns a trained MLP model.
    993         """
--> 994         return self._fit(X, y, incremental=(self.warm_start and
    995                                             hasattr(self, "classes_")))
    996 

~\AppData\Roaming\Python\Python38\site-packages\sklearn\neural_network\_multilayer_perceptron.py in _fit(self, X, y, incremental)
    372         # Run the LBFGS solver
    373         elif self.solver == 'lbfgs':
--> 374             self._fit_lbfgs(X, y, activations, deltas, coef_grads,
    375                             intercept_grads, layer_units)
    376         return self

~\AppData\Roaming\Python\Python38\site-packages\sklearn\neural_network\_multilayer_perceptron.py in _fit_lbfgs(self, X, y, activations, deltas, coef_grads, intercept_grads, layer_units)
    468                 },
    469                 args=(X, y, activations, deltas, coef_grads, intercept_grads))
--> 470         self.n_iter_ = _check_optimize_result("lbfgs", opt_res, self.max_iter)
    471         self.loss_ = opt_res.fun
    472         self._unpack(opt_res.x)

~\AppData\Roaming\Python\Python38\site-packages\sklearn\utils\optimize.py in _check_optimize_result(solver, result, max_iter, extra_warning_msg)
    241                 "    https://scikit-learn.org/stable/modules/"
    242                 "preprocessing.html"
--> 243             ).format(solver, result.status, result.message.decode("latin1"))
    244             if extra_warning_msg is not None:
    245                 warning_msg += "\n" + extra_warning_msg

AttributeError: 'str' object has no attribute 'decode'

Code is as follows:

# Reverse hyperparameter tuning - MLP English

# Create model

reverse_mlp_en = MLPClassifier()

# Define parameters, store in dictionary

reverse_mlp_en_hidden_layer_sizes = [(50,),(100,),(150,), (200,)]
reverse_mlp_en_activation = ['logistic', 'tanh', 'relu']
reverse_mlp_en_alpha = [0.0001, 0.05]
reverse_mlp_en_learning_rate = ['constant','adaptive']
        
reverse_mlp_en_hyperparameters = dict(hidden_layer_sizes = reverse_mlp_en_hidden_layer_sizes, activation = reverse_mlp_en_activation
                                    , solver = reverse_mlp_en_solver, alpha = reverse_mlp_en_alpha, learning_rate =reverse_mlp_en_learning_rate )

# Get model with the best parameters

reverse_mlp_en_clf = GridSearchCV(reverse_mlp_en, reverse_mlp_en_hyperparameters, cv = 5, verbose = 1, n_jobs = 5, scoring = 'f1')
reverse_mlp_en_best_model = reverse_mlp_en_clf.fit(X_en, y_en)

Libraries are up to date if I am not mistaken.

If anyone has an idea that would be greatly appreciated - I just find it weird how:

  1. The same code, but using different models, works fine and
  2. how the error is only shown after fitting everything (which is taking 40 minutes or so)
Zendakeen
  • 33
  • 4
  • 1
    Please post the full error trace (not in the comments - edit & update your post) - see how to create a [mre]. – desertnaut Dec 15 '21 at 17:28
  • I edited the post with the full error trace. – Zendakeen Dec 15 '21 at 20:04
  • Did you try running the model without GridSearch ? It will take much less time and that way you could debug easier. – teoML Dec 16 '21 at 07:22
  • I also see some similarities to this post: https://stackoverflow.com/questions/66096883/attributeerror-str-object-has-no-attribute-decode-in-binary-logistic-regres – teoML Dec 16 '21 at 07:24

0 Answers0