我很困惑,为啥我必须单独导入函数,如果我导入整个库,这些函数不能导入

Posted

技术标签:

【中文标题】我很困惑,为啥我必须单独导入函数,如果我导入整个库,这些函数不能导入【英文标题】:am confused, why do I have to import functions individually, Can't these be imported if i import the whole library我很困惑,为什么我必须单独导入函数,如果我导入整个库,这些函数不能导入 【发布时间】:2020-10-17 22:03:45 【问题描述】:
import sklearn

# Spot check algorithm
models = []
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnanlysis()))
models.append(('KNN', KNeighbourClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))
#evaluate each model in turn
results = []
names = []
for name, model in models:
    kfold = model_selection.KFold(n_splits = 10, random_state = seed)
    cv_results = model_selection.cross_val_score(model, X_train, 
    Y_train, cv = kfold, scoring = scoring)
    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
    print(msg)

运行此代码时出现错误 名称“LogisticRegression”未定义 每个功能都一样

但是当我分别导入每个函数时,这些函数可以正常工作

请帮忙,我试过寻找补救措施,但找不到。

【问题讨论】:

这能回答你的问题吗? module 'sklearn' has no attribute 'cross_validation' 【参考方案1】:

这样是行不通的。如果您只想导入sklearn,则应为每个模型指定模块以使其正确导入。例如:

import sklearn

# Spot check algorithm
models = []
models.append(('LR', sklearn.models.LogisticRegression()))

但是,IMO 可读性较差,因此您可能希望将导入分开。另外,如果你只导入sklearn,你会有很多未使用的导入,这也是不必要的。

【讨论】:

【参考方案2】:

查看何时导入模块

import module

所以任何函数、类或任何驻留在模块中的东西都不能直接访问,因为通过导入模块我们定义了模块而不是函数或类。

因此,如果您只想编写一个类的名称并运行它,那么您需要从模块中导入所有内容。

from module import *

'*' 在这里意味着我们正在从模块中导入所有内容或“全部”。 但如果您只想导入模块,您也可以使用

module.Class()

这定义了类,我们必须从模块中访问它,因为它是导入的模块,而不仅仅是它的类和函数。

也是我们使用的原因

from module import Class

是因为这只是导入特定的类或函数。 这有助于减少导入的东西的数量,而不是导入整个模块。 所以它在一定程度上有助于提高程序的速度和性能 计算机。

我希望这会有所帮助 并希望您在这场持续的大流行中安全!

【讨论】:

【参考方案3】:

您可以在 import 语句中指定要使用的 sklearn 中的哪些函数。

from sklearn import LogisticRegression, LinearDiscriminantAnanlysis # and the list continues

这样,您可以避免每次要使用sklearn 中的子模块时都必须输入sklearn.function_name。它也可以说更有效,因为您只加载您将使用的模块,而不是像import sklearn 这样的一揽子语句,它告诉程序没有关于您将使用sklearn 的哪个段的先验信息.

【讨论】:

以上是关于我很困惑,为啥我必须单独导入函数,如果我导入整个库,这些函数不能导入的主要内容,如果未能解决你的问题,请参考以下文章

如何将 conda 库导入单独的 Spyder 发行版?

为啥 Gitlab 无法从本地网络导入存储库,状态码为 128?

lodash如何允许导入单个模块?

如何在 Xamarin 中制作自定义库并导入到单独的应用程序?

用kettle将mysql数据导入到hive中为啥执行效率很低

为啥我在导入客户端库时收到 ReferenceError: self is not defined?