Scikit learn (Python 3.5):我需要导入一个库来完成这项工作吗?

Posted

技术标签:

【中文标题】Scikit learn (Python 3.5):我需要导入一个库来完成这项工作吗?【英文标题】:Scikit learn (Python 3.5): Do I need to import a library to make this work? 【发布时间】:2017-09-03 15:08:23 【问题描述】:

我正在通过Python Data Science Essentials (2nd Edition) 工作。

本书提供以下代码:

chosen_random_state = 1
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.30, ran-dom_state=chosen_random_state)
print ("(X train shape %s, X test shape %s, \ny train shape %s, y test shape %s" \
% (X_train.shape, X_test.shape, y_train.shape, y_test.shape))
h1.fit(X_train,y_train)
print (h1.score(X_test,y_test)) 

当我尝试运行它时,我收到以下错误:

--------------------------------------------------------------------------- 
NameError                                 Traceback (most recent call last) <ipython-input-137-c5136df13468> in <module>()
          1 chosen_random_state = 1
    ----> 2 X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.30, random_state=chosen_random_state)
          3 print ("(X train shape %s, X test shape %s, \ny train shape %s, y test shape %s" % (X_train.shape, X_test.shape, y_train.shape, y_test.shape))
          4 h1.fit(X_train,y_train)
          5 print (h1.score(X_test,y_test))
    
    NameError: name 'cross_validation' is not defined

我怀疑我可能必须导入本书未提及的库。我已经搜索了手册,但找不到此功能。这是我需要创建的功能还是有人可以将我指向相关库?

【问题讨论】:

【参考方案1】:
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.30, ran-dom_state=chosen_random_state)
print ("(X train shape %s, X test shape %s, \ny train shape %s, y test shape %s" \
% (X_train.shape, X_test.shape, y_train.shape, y_test.shape))
h1.fit(X_train,y_train)   
 X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.30, ran-dom_state=chosen_random_state)
    print ("(X train shape %s, X test shape %s, \ny train shape %s, y test shape %s" \
    % (X_train.shape, X_test.shape, y_train.shape, y_test.shape))
    h1.fit(X_train,y_train)

【讨论】:

欢迎来到 SO。虽然这段代码 sn-p 可能是解决方案,但包含解释确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。【参考方案2】:

sklearncross_validation 子模块是deprecated。你应该使用sklearn.model_selectioninstead

from sklearn import model_selection

...
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.30, random_state=chosen_random_state)
...

【讨论】:

谢谢。这在 Python 3.6 中是否已弃用?当我现在在 Python 3.5 中调用它时它不会发出警告 不在Python 3.6 中。但是当你迁移到新版本的 scikit (0.20) 时,你会在导入 cross_validation 子模块时遇到错误。 谢谢!!现在真的很关心这本书。这是一个“新”版本,总是给我错误/过时的方法 这是因为 sklearn 的升级速度将超过一本书的编写和出版速度。这总是发生。顺便说一句,与python升级无关,而是库本身【参考方案3】:

这应该可以解决您的问题。试试看

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, ran-dom_state=chosen_random_state)

print ("(X train shape %s, X test shape %s, \ny train shape %s, y test shape %s" \
        % (X_train.shape, X_test.shape, y_train.shape, y_test.shape))

h1.fit(X_train,y_train)

【讨论】:

【参考方案4】:

你应该导入

from sklearn import cross_validation

确保您已安装 sklearn。有关如何安装的说明,请参阅this

【讨论】:

谢谢!!!出于某种原因,@marcin swiercyzyna 的方法引发了另一个错误,但这有效!。使用 anaconda,所以这些必须预先安装\【参考方案5】:

你必须导入这个:

from sklearn.svm.libsvm import cross_validation

【讨论】:

感谢您的快速回答。当我按照你说的做时,我得到另一个错误。现在更新答案 提供的另一个答案似乎有效。真的很好奇为什么这有效而旅游没有。是因为通过包含 train_split_test 方法的文件向下钻取到 libsvm?

以上是关于Scikit learn (Python 3.5):我需要导入一个库来完成这项工作吗?的主要内容,如果未能解决你的问题,请参考以下文章

python库安装(numpy+scipy+matplotlib+scikit_learn)

为决策树中的每个数据点找到对应的叶节点(scikit-learn)

scikit-learn( Macine Learning in Python )

Python中计算TF-IDF(scikit-learn)

树莓派上的 scikit-learn/python3

Python---scikit-learn(sklearn)模块