【问题标题】:unable to import cross_validation无法导入 cross_validation
【发布时间】:2019-03-16 07:34:20
【问题描述】:

在构建新的神经网络时 我似乎无法拆分数据。 由于某些未知原因,它不会导入 train.test.split

ImportError: 无法导入名称“cross_validation”

#split dataset in result y and data X
X = np.array(df.drop(['Survived'],1)) # not sure why this wasnt needed
y = np.array(df['Survived'])
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,y,test_size=0.2)

我尝试了各种方法来导入该 sklearn 函数(已标记):

#from sklearn.model_selection import GridSearchCV, KFold
#from sklearn import module_selection # =>   cross_validation.train_test_split
#from sklearn import cross_validation
#from sklearn.svm.libsvm import cross_validation
#from sklearn import preprocessing, cross_validation

from sklearn import preprocessing, cross_validation
 #here are the machine algorythms
from sklearn.neighbors import KNeighborsClassifier  
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB    #added myself (https://machinelearningmastery.com/compare-machine-learning-algorithms-python-scikit-learn/)
from sklearn import model_selection
from sklearn.metrics import classification_report, accuracy_score

我的背景我是 python 初学者, 我在 C# 中制作了手动(从头开始)神经网络 RNN LSTN,但不是在 python 中 现在我想参加 kaggle Titanic 挑战(所以我不能在这里发布我所有的代码,但我只展示这个问题区域)

使用的版本:
蟒蛇:3.6.6
python : 由 conda-forge 打包
python :(默认,2018 年 7 月 26 日,11:48:23)[MSC v.1900 64 位 (AMD64)]
keras:配置为 > tensorflow 1.9.0
熊猫:0.23.4
numpy : 1.15.2
sklearn:0.20.0
matplotlib:3.0.0

附加说明,该函数本身可以在其他使用相同内核的 jupyter notebook 中工作,(我什至尝试过他们的导入行)但现在它不工作了。

【问题讨论】:

  • 不,我不这么认为,我得到的错误是:ImportError: cannot import name 'cross_validation'
  • 只需导入model_selection 代替cross_validation 并使用model_selection.train_test_split
  • 你确定当你说"yes i'm sure both use the same Kernel TensorF"时,这意味着另一个笔记本实际上也在导入cross_validation模块并且没有被注释掉。

标签: python-3.x scikit-learn


【解决方案1】:

我有同样的问题,并找出它是一个版本问题

如果您使用的是旧版JUPITER NOTEBOBER P>

from sklearn.cross_validation import train_test_split

或者使用这个

from sklearn.model_selection import train_test_split

【讨论】:

    【解决方案2】:

    我对此并不完全确定,我正在运行一些 jupyter 笔记本。 那时有些人正在积极运行张量流。
    即使我阻止了他们,我也无法运行新的泰坦尼克号 kaggle 任务。
    但是重新启动后它又可以工作了。

    我确实讨厌这样的解决方案,因为它们让我不知道原因是什么。
    我一般怀疑python环境的稳定性,(我习惯于更稳定的C#), 而且我注意到人们报告说并行处理效果不佳,所以可能一些笔记本并排会导致 tensorflow 问题。

    Package             Version  
    ------------------- ---------
    absl-py             0.5.0    
    astor               0.7.1    
    backcall            0.1.0    
    certifi             2018.8.24
    colorama            0.3.9    
    cycler              0.10.0   
    decorator           4.3.0    
    gast                0.2.0    
    grpcio              1.15.0   
    h5py                2.8.0    
    ipykernel           5.0.0    
    ipython             7.0.1    
    ipython-genutils    0.2.0    
    jedi                0.13.1   
    jupyter-client      5.2.3    
    jupyter-core        4.4.0    
    Keras               2.2.4    
    Keras-Applications  1.0.4    
    Keras-Preprocessing 1.0.2    
    kiwisolver          1.0.1    
    Mako                1.0.7    
    Markdown            3.0.1    
    MarkupSafe          1.0      
    matplotlib          3.0.0    
    mkl-fft             1.0.6    
    mkl-random          1.0.1    
    numpy               1.15.2   
    pandas              0.23.4   
    parso               0.3.1    
    pickleshare         0.7.5    
    pip                 18.1     
    prompt-toolkit      2.0.5    
    protobuf            3.6.1    
    Pygments            2.2.0    
    pygpu               0.7.6    
    pyparsing           2.2.1    
    pyreadline          2.1      
    python-dateutil     2.7.3    
    pytz                2018.5   
    PyYAML              3.13     
    pyzmq               17.0.0   
    scikit-learn        0.20.0   
    scipy               1.1.0    
    setuptools          40.4.3   
    simplegeneric       0.8.1    
    sip                 4.19.12  
    six                 1.11.0   
    tensorboard         1.9.0    
    tensorflow          1.9.0    
    termcolor           1.1.0    
    Theano              1.0.3    
    tornado             5.1.1    
    traitlets           4.3.2    
    wcwidth             0.1.7    
    Werkzeug            0.14.1   
    wheel               0.32.1   
    wincertstore        0.2      
    

    【讨论】:

    • 也许你可以检查一下你在 notebook 中使用的内核,比如 pip 版本和安装的内核的包。你可以在 notebook 中执行! pip list 来查看包的版本。
    • @ShiXiuFeng 我添加了所有使用过的版本你有没有发现什么奇怪的地方? (顺便说一句,感谢该命令非常方便)。
    • 您提到“但它在我的其他 jupyter 书籍中工作”,这些“其他 jupyter 笔记本”是本地运行还是远程运行?它们是否与当前笔记本共享相同的内核?
    • 这一切都在同一台笔记本电脑,同一内核上,(并且在重新启动后工作),这很奇怪。它对我来说不再是一个紧迫的问题,(我现在可以继续使用 kagle titanic)。
    【解决方案3】:

    交叉验证,用于分割训练和测试数据,可以用作:

    from sklearn.model_selection import train_test_split
    

    那么如果 X 是你的特征并且 y 是你的标签,你可以得到你的训练测试数据:

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=3)
    

    在哪里,

    test_size:(乘以 100)给出分配给测试的总数据的百分比(即此处为 30%)

    random_state:用于在任何情况下生成相同的训练测试拆分,前提是其他参数保持不变。这对于许多人一起学习很有帮助,这样他们就可以获得相同的最终结果,这显然取决于数据是如何分割以进行训练和测试的

    最后这是主要来源:

    https://scikit-learn.org/stable/modules/cross_validation.html

    【讨论】:

      【解决方案4】:

      对于旧版本--->
      from sklearn.cross_validation import train_test_split

      对于新版本--->
      from sklearn.model_selection import train_test_split

      【讨论】:

        【解决方案5】:

        该模块自 0.20 起已被删除。

        自 0.18 版后已弃用:此模块将在 0.20 中删除。请改用 sklearn.model_selection.cross_val_score。

        【讨论】:

        • 但它在我的其他 jupyter 书籍中工作,你确定吗,因为当我询问数据拆分函数时,你会谈论分数函数(它的表现如何)。
        • @user613326 然后检查其他 jupyter notebook 的环境。您确定为他们使用相同的虚拟环境吗?
        • @user613326 cross_validation 是包含您使用的功能(数据拆分)的模块,该模块已弃用,功能不重要。我怀疑jupyter notebook的环境会导致这个问题,学习使用virtualenv和其他工具来管理你的python包可能会有所帮助。
        • 我不知道为什么我的回答被否决了,我认为这很清楚。
        • @user613326,tensorflow只是keras框架的后端,tf和sklearn没有任何联系。你在做 kaggle 泰坦尼克号任务吗?
        猜你喜欢
        • 2019-03-31
        • 2019-03-16
        • 2019-10-04
        • 2019-05-27
        • 2019-04-30
        • 2019-08-09
        • 2019-03-24
        • 2021-11-20
        • 2019-01-10
        相关资源
        最近更新 更多