【问题标题】:Python: getting type error when import function usedPython:使用导入函数时出现类型错误
【发布时间】:2019-03-02 08:17:28
【问题描述】:

我有一个方法如下:

def importFrom(module, name): module = importlib.import_module(module) return getattr(module, name)

然后按如下方式使用:

def imputation_LR (df, name): reg = importFrom('sklearn.linear_model', name) reg.fit(X_train, y_train)

然后调用如下:

data = imputation_LR (data, 'LinearRegression')

并得到以下错误:
reg.fit(X_train, y_train) TypeError: fit() missing 1 required positional argument: 'y'

我觉得这是关于 LinearRegression / LinearRegression() 的事情,但无法弄清楚。

谢谢。

【问题讨论】:

    标签: python-3.x pandas scikit-learn


    【解决方案1】:

    您需要创建一个LinearRegression 对象。您收到错误的原因是因为fit 是一个实例方法(所有这些都将self 作为第一个参数传递)。所以函数接口真的是fit(self, x, y)self 是一个特殊变量,在调用实例方法时由对象引用自动传入。试试这个(注意我添加了(),见内联评论):

    def imputation_LR (df, name): 
        reg = importFrom('sklearn.linear_model', name)() # Note I added () here
        reg.fit(X_train, y_train)
    

    请注意,它位于此处记录的 API 的“方法”部分:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

    如有疑问,请阅读文档。

    附:目前还不完全清楚您为什么要尝试将模块作为字符串导入。您可以使用要获取的包/模块的名称导入:

    from sklearn.linear_model import LinearRegression
    reg = LinearRegression()
    ...
    

    【讨论】:

    • 对于 PS:是的,只要导入包就可以了,但是我想在 importFrom('sklearn.linear_model', name) 中传递模块名称,这样我就可以使用 Linear、Logistic 或其他一些带有 imputation_LR (df, name) 的回归模型。感谢您的解决方案。
    • @alamaranka 您可以只传递类而不是导入新名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多