AttributeError: 'str' 对象在二元逻辑回归中没有属性 'decode'

时间:2021-02-08 06:35:11

标签: python scikit-learn error-handling

我正在研究二元逻辑回归(使用完全分类数据)我对它进行了 OneHotEncoded 并尝试运行二元逻辑回归。我在下面收到此错误,我不知道如何处理错误。我知道它在最后一行为您提供了一些信息,但我不知道这里可能有 str 值的地方?

[IN]: train_set, test_set = train_test_split(allyrs, test_size = 0.2, random_state = 42)

设置预测变量,X 用于二进制和多变量

[输入] X = train_set.iloc[:, 31 : 175]

# Set up binary y value
[IN]: y=train_set.iloc[:, 29]

# Set up multi y value
 [IN]: ym=train_set.iloc[:, 30]

# first attempt to feed through is says :
[IN]:
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import LogisticRegressionCV


[IN]:BiLog_cv = LogisticRegressionCV(cv=3, random_state=0).fit(X, y)

[输出]:

AttributeError                            Traceback (most recent call last)
<ipython-input-19-2468362218dc> in <module>
      1 # Binary Logistic Regresiion with Cross Validation - training set
      2     # Fit Model
----> 3 BiLog_cv = LogisticRegressionCV(cv=3, random_state=0).fit(X, y)

~\anaconda3\lib\site-packages\sklearn\linear_model\_logistic.py in fit(self, X, y, sample_weight)
   1883             prefer = 'processes'
   1884 
-> 1885         fold_coefs_ = Parallel(n_jobs=self.n_jobs, verbose=self.verbose,
   1886                                **_joblib_parallel_args(prefer=prefer))(
   1887             path_func(X, y, train, test, pos_class=label, Cs=self.Cs,

~\anaconda3\lib\site-packages\joblib\parallel.py in __call__(self, iterable)
   1039             # remaining jobs.
   1040             self._iterating = False
-> 1041             if self.dispatch_one_batch(iterator):
   1042                 self._iterating = self._original_iterator is not None
   1043 

~\anaconda3\lib\site-packages\joblib\parallel.py in dispatch_one_batch(self, iterator)
    857                 return False
    858             else:
--> 859                 self._dispatch(tasks)
    860                 return True
    861 

~\anaconda3\lib\site-packages\joblib\parallel.py in _dispatch(self, batch)
    775         with self._lock:
    776             job_idx = len(self._jobs)
--> 777             job = self._backend.apply_async(batch, callback=cb)
    778             # A job can complete so quickly than its callback is
    779             # called before we get here, causing self._jobs to

~\anaconda3\lib\site-packages\joblib\_parallel_backends.py in apply_async(self, func, callback)
    206     def apply_async(self, func, callback=None):
    207         """Schedule a func to be run"""
--> 208         result = ImmediateResult(func)
    209         if callback:
    210             callback(result)

~\anaconda3\lib\site-packages\joblib\_parallel_backends.py in __init__(self, batch)
    570         # Don't delay the application, to avoid keeping the input
    571         # arguments in memory
--> 572         self.results = batch()
    573 
    574     def get(self):

~\anaconda3\lib\site-packages\joblib\parallel.py in __call__(self)
    260         # change the default number of processes to -1
    261         with parallel_backend(self._backend, n_jobs=self._n_jobs):
--> 262             return [func(*args, **kwargs)
    263                     for func, args, kwargs in self.items]
    264 

~\anaconda3\lib\site-packages\joblib\parallel.py in <listcomp>(.0)
    260         # change the default number of processes to -1
    261         with parallel_backend(self._backend, n_jobs=self._n_jobs):
--> 262             return [func(*args, **kwargs)
    263                     for func, args, kwargs in self.items]
    264 

~\anaconda3\lib\site-packages\sklearn\linear_model\_logistic.py in _log_reg_scoring_path(X, y, train, test, pos_class, Cs, scoring, fit_intercept, max_iter, tol, class_weight, verbose, solver, penalty, dual, intercept_scaling, multi_class, random_state, max_squared_sum, sample_weight, l1_ratio)
    963         sample_weight = sample_weight[train]
    964 
--> 965     coefs, Cs, n_iter = _logistic_regression_path(
    966         X_train, y_train, Cs=Cs, l1_ratio=l1_ratio,
    967         fit_intercept=fit_intercept, solver=solver, max_iter=max_iter,

~\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)
    760                 options={"iprint": iprint, "gtol": tol, "maxiter": max_iter}
    761             )
--> 762             n_iter_i = _check_optimize_result(
    763                 solver, opt_res, max_iter,
    764                 extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)

~\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'

有人能给我一些见解吗,我只是通过 Categorical NB 运行这个数据集并让它工作。

谢谢

2 个答案:

答案 0 :(得分:1)

在最新版本的 scikit-learn(现在是 0.24.1)中,该问题已修复,将部分代码包含在 try-catch 块中。 Gigioz 在此 stackoverflow question 中对此进行了更详细的解释。

要升级 scikit-learn,请使用以下代码:

pip install -U scikit-learn

并重启内核。

答案 1 :(得分:0)

我对这个包一无所知,但您的结果似乎在第 243 行。函数 decode 在字节数组上调用以将其转换为字符串。但看起来 result.message 已经是一个字符串。尝试只删除 .decode("latin1")

相关问题