Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

310
Views
AttributeError: el objeto 'str' no tiene atributo 'decode' al ajustar el modelo de regresión logística

Actualmente estoy tratando de crear una clasificación binaria utilizando la regresión logística. Actualmente estoy en la determinación de la importancia característica. Ya hice el preprocesamiento de datos (One Hot Encoding y muestreo) y lo ejecuté con XGBoost y RandomFORestClassifier, no hay problema

Sin embargo, cuando traté de ajustar un modelo LogisticRegression (abajo está mi código en Notebook),

 from sklearn.linear_model import LogisticRegression #Logistic Regression # fit the model model = LogisticRegression() # fit the model model.fit(np.array(X_over), np.array(y_over)) # get importance importance = model.coef_[0] # summarize feature importance df_imp = pd.DataFrame({'feature':list(X_over.columns), 'importance':importance}) display(df_imp.sort_values('importance', ascending=False).head(20)) # plot feature importance plt.bar(list(X_over.columns), importance) plt.show()

dio un error

 ... ~\AppData\Local\Continuum\anaconda3\lib\site-packages\joblib\parallel.py in <listcomp>(.0) 223 with parallel_backend(self._backend, n_jobs=self._n_jobs): 224 return [func(*args, **kwargs) --> 225 for func, args, kwargs in self.items] 226 227 def __len__(self): ~\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\linear_model\_logistic.py in _logistic_regression_path(X, y, pos_class, Cs, fit_intercept, max_iter, tol, verbose, solver, coef, class_weight, dual, penalty, intercept_scaling, multi_class, random_state, check_input, max_squared_sum, sample_weight, l1_ratio) 762 n_iter_i = _check_optimize_result( 763 solver, opt_res, max_iter, --> 764 extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG) 765 w0, loss = opt_res.x, opt_res.fun 766 elif solver == 'newton-cg': ~\AppData\Local\Continuum\anaconda3\lib\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'

Lo busqué en Google y la mayoría de las respuestas decían que este error se debe a que la biblioteca scikit-learn intentó decodificar una cadena ya decodificada. Pero no sé cómo resolverlo en mi caso aquí. Me aseguré de que todos mis datos sean enteros o float64, y no cadenas.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Traté de actualizar mi scikit-learn usando el siguiente comando, pero eso no resolvió el error de AttributeError: 'str' object has no attribute 'decode'

 pip install scikit-learn -U

Finalmente, el siguiente fragmento de código resolvió el problema, agregue el solucionador como liblinear

 model = LogisticRegression(solver='liblinear')
over 4 years ago · Santiago Trujillo Report

0

En la versión más reciente de scikit-learn (ahora 0.24.1) se solucionó el problema encerrando una parte del código en un bloque try-catch que informo a continuación: el archivo es

 optimize.py -> _check_optimize_result(solver, result, max_iter=None, extra_warning_msg=None)

y la pieza de código es

 if solver == "lbfgs": if result.status != 0: try: # The message is already decoded in scipy>=1.6.0 result_message = result.message.decode("latin1") except AttributeError: result_message = result.message warning_msg = ( "{} failed to converge (status={}):\n{}.\n\n" "Increase the number of iterations (max_iter) " "or scale the data as shown in:\n" " https://scikit-learn.org/stable/modules/" "preprocessing.html" ).format(solver, result.status, result_message)

que era solo

 if solver == "lbfgs": if result.status != 0: warning_msg = ( "{} failed to converge (status={}):\n{}.\n\n" "Increase the number of iterations (max_iter) " "or scale the data as shown in:\n" " https://scikit-learn.org/stable/modules/" "preprocessing.html" ).format(solver, result.status, result.message.decode("latin1"))

antes de. Entonces, actualizar scikit-learn resuelve el problema.

over 4 years ago · Santiago Trujillo Report

0

Hay un error con solver='lbfgs'. Cambiar a 'sag' funciona a su alrededor.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!