TypeError:需要整数(得到类型为字节)在导入sklearn时

8
import pandas
from sklearn import tree
import pydotplus
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import matplotlib.image as pltimg

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
y_pred = dtree.predict(X)
y_pred

错误信息:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-33-745bbfa9769b> in <module>
      1 import pandas
----> 2 from sklearn import tree
      3 import pydotplus
      4 from sklearn.tree import DecisionTreeClassifier
      5 import matplotlib.pyplot as plt

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/__init__.py in <module>
     62 else:
     63     from . import __check_build
---> 64     from .base import clone
     65     from .utils._show_versions import show_versions
     66 

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/base.py in <module>
     12 from scipy import sparse
     13 from .externals import six
---> 14 from .utils.fixes import signature
     15 from .utils import _IS_32BIT
     16 from . import __version__

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/__init__.py in <module>
     12 from .murmurhash import murmurhash3_32
     13 from .class_weight import compute_class_weight, compute_sample_weight
---> 14 from . import _joblib
     15 from ..exceptions import DataConversionWarning
     16 from .fixes import _Sequence as Sequence

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/_joblib.py in <module>
     20         from joblib import parallel_backend, register_parallel_backend
     21 else:
---> 22     from ..externals import joblib
     23     from ..externals.joblib import logger
     24     from ..externals.joblib import dump, load

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/__init__.py in <module>
    117 from .numpy_pickle import load
    118 from .compressor import register_compressor
--> 119 from .parallel import Parallel
    120 from .parallel import delayed
    121 from .parallel import cpu_count

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/parallel.py in <module>
     26 from .my_exceptions import TransportableException
     27 from .disk import memstr_to_bytes
---> 28 from ._parallel_backends import (FallbackToBackend, MultiprocessingBackend,
     29                                  ThreadingBackend, SequentialBackend,
     30                                  LokyBackend)

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/_parallel_backends.py in <module>
     20     from .pool import MemmappingPool
     21     from multiprocessing.pool import ThreadPool
---> 22     from .executor import get_memmapping_executor
     23 
     24     # Compat between concurrent.futures and multiprocessing TimeoutError

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/executor.py in <module>
     12 from .disk import delete_folder
     13 from ._memmapping_reducer import get_memmapping_reducers
---> 14 from .externals.loky.reusable_executor import get_reusable_executor
     15 
     16 

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/externals/loky/__init__.py in <module>
     10 
     11 from .backend.context import cpu_count
---> 12 from .backend.reduction import set_loky_pickler
     13 from .reusable_executor import get_reusable_executor
     14 from .cloudpickle_wrapper import wrap_non_picklable_objects

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/externals/loky/backend/reduction.py in <module>
    123 # global variable to change the pickler behavior
    124 try:
--> 125     from sklearn.externals.joblib.externals import cloudpickle  # noqa: F401
    126     DEFAULT_ENV = "cloudpickle"
    127 except ImportError:

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/externals/cloudpickle/__init__.py in <module>
      1 from __future__ import absolute_import
      2 
----> 3 from .cloudpickle import *
      4 
      5 __version__ = '0.6.1'

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/externals/cloudpickle/cloudpickle.py in <module>
    165 
    166 
--> 167 _cell_set_template_code = _make_cell_set_template_code()
    168 
    169 

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/externals/joblib/externals/cloudpickle/cloudpickle.py in _make_cell_set_template_code()
    146         )
    147     else:
--> 148         return types.CodeType(
    149             co.co_argcount,
    150             co.co_kwonlyargcount,

TypeError: an integer is required (got type bytes)

我一直遇到这种类型错误,但并不知道该怎么做。我相当确定scikit-learn已经安装了。在创建要使用的训练集后,X和y都已经定义好了。我尝试重新安装scikit-learn,降级Python并通过终端进行安装,但都没有帮助。我无法找出问题所在,真的很感谢能够得到一些帮助。


2
你在哪里定义了 Xy - chepner
features = ["loan_amnt","funded_amnt","int_rate","grade","annual_inc"] X = trainingData[features] y = trainingData["default_risk"] - Salem Arthur
谢谢,@Iguananaut!让我来做这个。 - Salem Arthur
看,这很重要。问题似乎与你的代码无关;它发生在导入sklearn本身时。 - Iguananaut
你是怎么创建你的 conda 环境的?你能否从头开始设置一个全新的环境,以重现问题? - Iguananaut
显示剩余3条评论
4个回答

5

我能够在conda环境中通过运行conda install python==3.8 scikit-learn来重现问题,但是随后手动降级joblib,通过运行pip install joblib<0.14,因为joblib<0.14与Python 3.8不兼容。

我不确定您是如何陷入这种情况的,但首先卸载可能误安装的任何joblib包应该可以解决问题:

$ pip uninstall joblib

然后使用conda进行强制重新安装/升级:

$ conda update --force-reinstall joblib

确认正确的版本已经安装:

$ python -c 'import joblib; print(joblib.__version__)'
0.17.0

如果其他方法都失败了,请尝试创建新的Anaconda安装。请确保使用conda install而不是pip安装软件包。


非常感谢您的帮助!但是我还是没有成功。我尝试了从创建虚拟环境到像您上面展示的卸载和重新安装joblib等所有方法。老实说,我不知道为什么会发生这种情况。 - Salem Arthur
如果你运行 python -c 'import sys, joblib; print(sys.version); print(sys.path); print(joblib.__version__)' 会发生什么? - Iguananaut
3.8.5 (default, Sep 4 2020, 02:22:02) [Clang 10.0.0 ] ['', '/Users/salemnk/opt/anaconda3/lib/python38.zip', '/Users/salemnk/opt/anaconda3/lib/python3.8', '/Users/salemnk/opt/anaconda3/lib/python3.8/lib-dynload', '/Users/salemnk/opt/anaconda3/lib/python3.8/site-packages', '/Users/salemnk/opt/anaconda3/lib/python3.8/site-packages/aeosa'] 0.17.0``` - Salem Arthur
抱歉让你等这么久!这是我得到的回复。 - Salem Arthur
我想问一下。print(sklearn); print(sklearn. __version__)显示什么?看起来在您的回溯中,它实际上正在使用joblib的供应商副本,而sklearn开发人员表示它不会在较新版本中使用。 - Iguananaut
嘿@Iguananaut,非常感谢您的帮助!在重新安装anaconda、确保我的sklearn依赖项版本匹配并删除这行代码 - from sklearn import tree 后,我终于让它正常工作了。之后,我使用Rosetta 2安装了homebrew,然后通过brew安装了graphviz。 - Salem Arthur

1

在我的情况下,scikit中的joblib需要重新安装。

pip uninstall joblib


0
这种情况发生在我身上,是因为我安装了sklearn而不是scikit-learn

0

在我的情况下,我做了

pip uninstall sklearn --yes

跟随着

pip install sklearn

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