【问题标题】:Python error, cannot import name Imputer on Spark ( Bluemix )Python 错误,无法在 Spark (Bluemix) 上导入名称 Imputer
【发布时间】:2016-03-31 11:43:00
【问题描述】:

我有一个问题,我在 spark 上编写了我的脚本,当我运行脚本时,我遇到了导入问题,但我不明白为什么,因为当我通过 spyder 在本地运行相同的脚本时,我没有得到这个错误。 那么为什么我会收到这个错误?是 Bluemix 出了问题吗?

脚本:

from sklearn.ensemble import GradientBoostingClassifier
from sklearn import preprocessing
from sklearn.preprocessing import Imputer
from sklearn.metrics import roc_auc_score

我的错误是:

<ipython-input-2-13d49864f8d7> in <module>()
     66 from sklearn import preprocessing
     67 #from sklearn.preprocessing import Imputer
---> 68 from sklearn.metrics import roc_auc_score


ImportError: cannot import name roc_auc_score

or 

from sklearn.ensemble import RandomForestClassifier
      4 import sklearn.preprocessing as p
----> 5 from sklearn.preprocessing import Imputer
      6 #import sklearn.metrics as sm
      7 from sklearn.metrics import roc_auc_score

ImportError: cannot import name Impute

【问题讨论】:

    标签: python apache-spark ibm-cloud spyder


    【解决方案1】:

    一种解决方法是在用户站点包中安装较新版本的scikit-learn,然后从系统站点包中导入该版本而不是scikit-learn 0.11

    1.) 安装较新版本的scikit-learn(忽略输出“Successfully installed scikit-learn-0.11”):

    !pip install --user --upgrade scikit-learn
    

    2.) 显示用户名:

    !whoami
    

    3.) 在系统站点包的路径之前设置用户站点包的路径。将第 2 步中的用户名用于变量 USER_NAME:

    import sys
    sys.path.insert(0,"/gpfs/fs01/user/USER_NAME/.local/lib/python2.7/site-packages")
    

    4.) 检查scikit-learn 版本:

    import sklearn
    sklearn.__version__
    

    以下代码应在前面的步骤之后运行:

    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn import preprocessing
    from sklearn.preprocessing import Imputer
    from sklearn.metrics import roc_auc_score
    

    重新启动内核后,必须再次执行第 3 步才能从用户 site-packages 导入较新版本的 scikit-learn

    【讨论】:

    • 感谢您的回答。但是我做了你所有的建议,我仍然得到同样的错误,因为当我输入这个代码“import sklearn sklearn.__version__”我得到这个'0.11'。所以更新不成功
    • 您是在新的 Python 笔记本中尝试过,还是在之前计算过涉及旧包的代码的同一笔记本中尝试过?在后一种情况下,您必须重新启动内核以清除环境。我将再次尝试解决方法,但它对我有用。
    • 我再次应用了解决方法,它对我有用。如果您愿意,可以将 notebook 分享给 Bluemix 支持,然后我可以仔细查看。
    【解决方案2】:

    scikit_learn 的版本0.11,预装在Bluemix 笔记本中,在preprocessing 中没有Imputer。因此ImportError

    在 Bluemix 笔记本中,您可以在 Environment 选项卡的右侧栏中找到库的版本。

    【讨论】:

    • 同意@Philipp Langer 并且在以后的版本中引入了 Imputer。升级的一种方法是,有趣的是,Bluemix 上的 Pip 正在安装旧版本。 !pip install --user --upgrade scikit-learn==0.17.1 您使用的是 pip 版本 7.1.0,但版本 8.1.1 可用。您应该考虑通过“pip install --upgrade pip”命令进行升级。收集 scikit-learn==0.17.1 使用缓存的 scikit-learn-0.17.1.tar.gz 安装收集的包:scikit-learn 运行 setup.py install for scikit-learn 成功安装 scikit-learn-0.11
    【解决方案3】:

    所以我不得不使用,

    from sklearn.impute import SimpleImputer 
    imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
    

    而不是

    from sklearn.preprocessing import Imputer
    imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
    

    否则会报如下错误。

    from sklearn.preprocessing import Imputer
    ImportError: cannot import name 'Imputer' from 'sklearn.preprocessing'
    

    【讨论】:

      【解决方案4】:

      在 juypter 笔记本中,它工作正常

      from sklearn.impute import SimpleImputer 
      imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
      

      【讨论】:

        猜你喜欢
        • 2020-04-13
        • 2014-01-29
        • 1970-01-01
        • 2016-12-03
        • 2019-10-04
        • 2018-05-03
        • 2018-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多