我是朱莉娅的新手(与MATLAB一起使用)。我使用一些数据集,清理它并使用ScikitLearn中可用的工具编码分类变量,然后运行干净数据的XGBoost。
但是,我不能通过经过训练的XGBoost模型进行预测,因为ScitkitLearn和XGBoost都有一个名为predict
的函数。请参阅下面的错误消息:
警告: ScikitLearn和XGBoost都导出了“预测”;它在模块Main中的使用必须是限定错误: LoadError: UndefVarError:预测未定义
问题是我不能将XGBoost的XGBoost函数定义为XGBoost.predict
,因为这不起作用,这似乎是我所知道的唯一解决方案。
此外,我无法找到或理解如何在不加载预测函数的情况下只从ScikitLearn加载特定模块。例如,import MLDataUtils.splitobs
格式适用于大多数包,但ScikitLearn.preprocessing
不起作用。
发布于 2019-09-30 08:54:15
下面是您的问题的MWE (两个相同名称的export
模块):
module A
export f
f() = println("f from A")
end
module B
export f
f() = println("f from B")
end
现在,考虑一下using
A
和B
并尝试调用f
的情况
julia> using .A, .B
julia> f()
WARNING: both B and A export "f"; uses of it in module Main must be qualified
ERROR: UndefVarError: f not defined
这一失败的原因是,朱莉娅不知道f
的含义;是A.f
还是B.f
?您可以通过显式地消除对f
的任何调用的歧义来解决这个问题。
julia> using .A, .B
julia> A.f()
f from A
julia> B.f()
f from B
如果您希望能够单独通过名称(f
)调用其中一个函数,那么您(用户)必须选择f
应该指向什么。您可以通过显式地将其定义为import语句的一部分来做到这一点:
julia> using .A, .B
julia> using .B: f # explicitly choosing f to be B.f
julia> f() # no error
f from B
julia> A.f()
f from A
julia> B.f()
f from B
另一种选择是在您的命名空间中显式地定义您自己的名称f
:
julia> using .A, .B
julia> const f = B.f # defining a new name in this namespace pointing to B.f
f (generic function with 1 method)
julia> f() # no error
f from B
julia> A.f()
f from A
julia> B.f()
f from B
https://stackoverflow.com/questions/58159369
复制相似问题