导入sklearn时出现ImportError: 无法导入名称'tree'。

4

我最近使用pip安装了Scipy、Numpy和Scikit-learn,但当我运行下面的程序时:

from sklearn import tree

features = [[140, 1], [130, 1], [150, 1], [170, 1]] #input
labels = [0, 0, 1, 1] #output

clf = tree.DecisionTreeClassifier()  
clf = clf.fit(features, labels) #fit = find patterns in data

print (clf.predict([[160, 0]]))

Shell会打印出这个错误信息

Traceback (most recent call last):
  File "C:/Machine Learning/sklearn.py", line 1, in <module>
    from sklearn import tree
  File "C:/Machine Learning\sklearn.py", line 1, in <module>
    from sklearn import tree
ImportError: cannot import name 'tree'

有人知道如何解决这个问题吗?我已经尝试卸载和重新安装它,但是我仍然遇到了相同的错误。非常感谢提前!


2
你把文件命名为 sklearn.py。请停止这样做。 - user2357112
我改了名字,但是还是出现同样的错误 :/ - AlphaBetaGamma96
3
删除可能从您的文件编译而来的任何 sklearn.pyc 文件,重新启动 Python,然后再尝试。 - user2357112
2个回答

2
解决方法是将“Machine Learning”文件夹下的“sklearn.py”重命名为任何其他名称,但不要命名为“sklearn.py”。
为什么呢?这是Python模块搜索顺序的机制。尝试在“sklearn.py”中添加以下行:
import sys
print(sys.path)

输出列表的第一个元素始终是空字符串,这意味着当前目录在模块搜索中具有最高优先级。在“C:\Machine Learning”文件夹下运行from sklearn import tree将导入本地同名的“sklearn.py”作为“sklearn”模块,而不是全局导入机器学习模块。


我已经更改了名称并将其保存在另一个目录中,即包含所有站点包的目录中。但是我仍然遇到相同的错误。我是使用sklearn的新手,而且只有一个月前才开始学习Python。 - AlphaBetaGamma96
好的。您能检查一下您的工作区中是否有任何 *.pyc 文件(py2)或 __pycache__ 文件夹(py3),并将它们全部删除吗?另外,您能否编写一个新的 .py 文件,尝试 import sklearn 然后 print(sklearn) 并在此处发布结果? - Philip Tzou

1
我遇到了同样的问题。使用sublime text 3作为编辑器和构建工具。在我的情况下,解决方法非常简单。
我的工作文件也被命名为'sklearn.py',所以当我尝试"import sklearn"时,它会导入当前工作目录中找到的自己的文件,而不会出错。但是当我尝试'from sklearn import tree'时,它失败了。
只需将我的工作文件程序更名为其他名称即可解决该问题。
谢谢。

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