LatentDirichletAllocation未安装在SciKit-Learn的decomposition模块中。

3
我在SciKit-Learn软件包中遇到了一些奇怪的问题。 SciKit-Learn软件包中有一个名为“decomposition”的模块,应该包含LatentDirichletAllocation([…])函数。请查看此处的文档: "https://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition"
当我尝试导入“分解”模块时: from sklearn import as decomposition 它会出现错误:
Traceback (most recent call last):
  File "tf_1_day_scikit_dnn.py", line 12, in <module>
    from sklearn import decomposition
  File "/home/developer1/.local/lib/python3.6/site-packages/sklearn/decomposition/__init__.py", line 19, in <module>
    from ._online_lda import LatentDirichletAllocation
ImportError: cannot import name 'LatentDirichletAllocation'

命令: ls -al ~/.local/lib/python3.6/site-packages/sklearn/decomposition 显示:

drwxr-xr-x  4 developer1 developer1   4096 Dec  9 00:45 .
drwxr-xr-x 33 developer1 developer1   4096 Dec  9 00:45 ..
-rw-r--r--  1 developer1 developer1   5490 Dec  9 00:44 _base.py
-rw-r--r--  1 developer1 developer1    480 Dec  9 00:44 base.py
-rwxr-xr-x  1 developer1 developer1 179440 Dec  9 00:44 _cdnmf_fast.cpython-36m-x86_64-linux-gnu.so
-rwxr-xr-x  1 developer1 developer1 175344 Dec  3 00:09 cdnmf_fast.cpython-36m-x86_64-linux-gnu.so
-rw-r--r--  1 developer1 developer1    498 Dec  9 00:44 cdnmf_fast.py
-rw-r--r--  1 developer1 developer1  54528 Dec  9 00:44 _dict_learning.py
-rw-r--r--  1 developer1 developer1    507 Dec  9 00:44 dict_learning.py
-rw-r--r--  1 developer1 developer1  12572 Dec  9 00:44 _factor_analysis.py
-rw-r--r--  1 developer1 developer1    513 Dec  9 00:44 factor_analysis.py
-rw-r--r--  1 developer1 developer1  20866 Dec  9 00:44 _fastica.py
-rw-r--r--  1 developer1 developer1    490 Dec  9 00:44 fastica_.py
-rw-r--r--  1 developer1 developer1  14076 Dec  9 00:44 _incremental_pca.py
-rw-r--r--  1 developer1 developer1    513 Dec  9 00:44 incremental_pca.py
-rw-r--r--  1 developer1 developer1   1401 Dec  9 00:44 __init__.py
-rw-r--r--  1 developer1 developer1  13597 Dec  9 00:44 _kernel_pca.py
-rw-r--r--  1 developer1 developer1    498 Dec  9 00:44 kernel_pca.py
-rw-r--r--  1 developer1 developer1  47255 Dec  9 00:44 _nmf.py
-rw-r--r--  1 developer1 developer1    477 Dec  9 00:44 nmf.py
-rwxr-xr-x  1 developer1 developer1  62056 Dec  3 00:09 _online_lda.cpython-36m-x86_64-linux-gnu.so
-rwxr-xr-x  1 developer1 developer1  62064 Dec  9 00:44 _online_lda_fast.cpython-36m-x86_64-linux-gnu.so
-rw-r--r--  1 developer1 developer1    513 Dec  9 00:44 online_lda_fast.py
-rw-r--r--  1 developer1 developer1  30471 Dec  9 00:44 _online_lda.py
-rw-r--r--  1 developer1 developer1    498 Dec  9 00:44 online_lda.py
-rw-r--r--  1 developer1 developer1  22807 Dec  9 00:44 _pca.py
-rw-r--r--  1 developer1 developer1    477 Dec  9 00:44 pca.py
drwxr-xr-x  2 developer1 developer1   4096 Dec  9 00:45 __pycache__
-rw-r--r--  1 developer1 developer1    855 Dec  9 00:44 setup.py
-rw-r--r--  1 developer1 developer1  13654 Dec  9 00:44 _sparse_pca.py
-rw-r--r--  1 developer1 developer1    498 Dec  9 00:44 sparse_pca.py
drwxr-xr-x  3 developer1 developer1   4096 Dec  9 00:45 tests
-rw-r--r--  1 developer1 developer1   8346 Dec  9 00:44 _truncated_svd.py
-rw-r--r--  1 developer1 developer1    507 Dec  9 00:44 truncated_svd.py

大多数功能都在这里,但是没有"LatentDirichletAllocation"函数的痕迹。然而我在_online_lda.py文件中看到了LatentDirichletAllocation类的定义。

命令python3 -c "import sklearn; sklearn.show_versions()"打印所有所需版本:

System:
    python: 3.6.8 (default, Oct  7 2019, 12:59:55)  [GCC 8.3.0]
executable: /usr/bin/python3
   machine: Linux-4.15.0-65-generic-x86_64-with-Ubuntu-18.04-bionic

Python dependencies:
       pip: 9.0.1
setuptools: 42.0.2
   sklearn: 0.22
     numpy: 1.17.4
     scipy: 1.3.3
    Cython: None
    pandas: 0.25.3
matplotlib: 3.1.2
    joblib: 0.14.0

Built with OpenMP: True

所以我认为所有的要求都已经满足了。(顺便提一下,SciKit-Learn 在我尝试导入"decomposition"模块之前都工作正常).

我按照这里描述的方法安装了 SciKit-Learn 包:https://scikit-learn.org/stable/install.html,使用命令 pip3 install -U scikit-learn。我重新安装了几次,但结果都是相同的。

我做错了什么?我需要将缺失的 "LatentDirichletAllocation" 函数添加到 "decomposition" 模块中吗?如果需要,应该如何操作?我需要用不同的方式安装整个包吗?

谢谢。


sklearn在0.22版本中出现了问题,请将其更改为0.21.3或更低版本。 - Sanket Patel
我已经这样做了。请参见下面的“已接受答案”。但是,让0.22版本也能正常工作将是很好的。看起来“glemaitre”(请参见他的答案)已经找到了解决方法... - user12187347
3个回答

3
验证过的“answered”并不是正确的解决方法,因为它只会使scikit-learn降级。您将无法从新功能和错误修复中受益。
相反,向问题跟踪器报告并提供反馈将会很有帮助: https://github.com/scikit-learn/scikit-learn/issues/15884 这将使我们能够找到问题的根源并提出适当的解决方案,这似乎影响了几个人。
编辑: 经过一些调查,您需要删除以下文件:
- ~/.local/lib/python3.6/site-packages/sklearn/decomposition/_online_lda.cpython-36m-x86_64-linux-gnu.so - ~/.local/lib/python3.6/site-packages/sklearn/feature_extraction/_hashing.cpython-36m-x86_64-linux-gnu.so - ~/.local/lib/python3.6/site-packages/sklearn/datasets/_svmlight_format.cpython-36m-x86_64-linux-gnu.so
显然,在更新到scikit-learn时,so文件不会被删除。这可能是由于旧的pip版本引起的。

1
确实,我接受的答案并不是正确的答案。但当时它是我唯一得到的答案。有了这个答案,我能够使用SciKit-learn。这是我第一次使用SciKit-learn,我对最新版本0.22中的这个问题感到沮丧。 - user12187347
我不确定应该在哪里删除_online_lda.cpython-36m-x86_64-linux-gnu.so文件 - 你能否澄清一下? - user12187347
1
根据您提供的信息,它应该位于以下位置:~/.local/lib/python3.6/site-packages/sklearn/decomposition/_online_lda.cpython-36m-x86_64-linux-gnu.so - glemaitre
请注意,FeatureHasher 也发生了类似的情况,需要手动删除 _hashing.cpython-*****.so 文件。 - glemaitre

3

我今天也遇到了同样的问题。我通过回退scikit-learn到之前的版本0.21来解决了这个问题:

pip3 install scikit-learn==0.21

编辑:我认为 glemaitre 的答案 (https://dev59.com/Wrfna4cB1Zd3GeqP2Pm3#59328446) 展示了更好的解决方案。


谢谢你的回答...但我仍然希望有其他解决问题的方法。 - user12187347
确实,这解决了问题 - 再次感谢您。不过最新的0.22版本不能使用,这并不好 :( - user12187347
谢谢你的回答。这也解决了我的问题。 想知道是否有其他替代方法来修复相同的问题? - Ravi Kiran Gururaja

0

尝试:


针对 Python 3

pip3 uninstall scikit-learn
pip3 install -U scikit-learn==0.21.3

针对 Python 2

pip uninstall scikit-learn
pip install -U scikit-learn==0.20.4

版本0.22没有问题,目前是最后一个稳定版本。出现问题的是使用pip系统更新软件包。 - glemaitre

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