Imputer 的 fit 方法抛出缺少 1 个必需的位置参数:'X' 错误

Posted

技术标签:

【中文标题】Imputer 的 fit 方法抛出缺少 1 个必需的位置参数:\'X\' 错误【英文标题】:fit method of Imputer throwing missing 1 required positional argument: 'X' errorImputer 的 fit 方法抛出缺少 1 个必需的位置参数:'X' 错误 【发布时间】:2018-12-02 15:34:57 【问题描述】:

我正在尝试在数据预处理阶段解决丢失数据的问题,并且一直在认真学习 udemy 教程。

这是我的数据集“Data.csv”

Country Age Salary  Purchased
France  44  72000   No
Spain   27  48000   Yes
Germany 30  54000   No
Spain   38  61000   No
Germany 40          Yes
France  35  58000   Yes
Spain       52000   No
France  48  79000   Yes
Germany 50  83000   No
France  37  67000   Yes 

这是完整的代码。

    # Data Preprocessing

    #Importing Libraries

    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd

    dataset = pd.read_csv('Data.csv')
    X = dataset.iloc[:, :-1].values
    Y = dataset.iloc[:, -1].values

    # Taking care of missing data

    from sklearn.preprocessing import Imputer
    imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)

    #This line below throws the error
    imputer = Imputer.fit(X[:, 1:3])
    X[:, 1:3] = imputer.transform(X[:, 1:3])

上面的代码在教程视频中运行得非常好,但是当我运行上面的代码时,我得到以下错误:

**imputer = Imputer.fit(X[:, 1:3])
Traceback (most recent call last):

  File "<ipython-input-3-dddb27392326>", line 1, in <module>
    imputer = Imputer.fit(X[:, 1:3])

TypeError: fit() missing 1 required positional argument: 'X'**

我使用以下规格:

操作系统:Win 8.1 教程有一个 MAC IDE:Spyder 3.2.8 Python 3.6

谁能帮我调试一下这个错误。

【问题讨论】:

【参考方案1】:

我正在使用 sklearn 版本 0.19.1。因此,代码中存在错误,您正在调用类方法 Imputer.fit 而不是实例方法 imputer.fit,因为 imputer 是代码中 Imputer 的实例。您也可以像这样使用Imputer 的fit_transform 方法一次性拟合和转换数据

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import Imputer
import pandas as pd

dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:, :-1].values
Y = dataset.iloc[:, -1].values

# Taking care of missing data
imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)

X[:, 1:3] = imputer.fit_transform(X[:, 1:3])

这会将数组X 更改为

array([['France', 44.0, 72000.0],
   ['Spain', 27.0, 48000.0],
   ['Germany', 30.0, 54000.0],
   ['Spain', 38.0, 61000.0],
   ['Germany', 40.0, 63777.77777777778],
   ['France', 35.0, 58000.0],
   ['Spain', 38.77777777777778, 52000.0],
   ['France', 48.0, 79000.0],
   ['Germany', 50.0, 83000.0],
   ['France', 37.0, 67000.0]], dtype=object)

附带说明,避免使用与类本身相同的名称来命名类实例。我没有更改答案中的名称以指出代码中的错误。

【讨论】:

您的 fit_transform() 方法起到了作用,但从我所读到的 fit_transform() 结合了训练集的均值和标准差的计算,并将其隐式应用于同一数据集,这两个函数都是分别由 fit() 和 transform() 执行。因此,如果我需要来自不同数据集的拟合来转换不同的数据集 fit_transform() 将不起作用。我理解正确吗? 是的,您的假设是正确的。在这种情况下,请分别使用 fit() 和 transform() 函数。如果我的回答对你有帮助,请把它标记为正确的:)

以上是关于Imputer 的 fit 方法抛出缺少 1 个必需的位置参数:'X' 错误的主要内容,如果未能解决你的问题,请参考以下文章

“fit() 缺少 1 个必需的位置参数:'y'”错误

TypeError: fit() 缺少 1 个必需的位置参数:'y',

逻辑回归:fit() 缺少 1 个必需的位置参数:'y'

StandardScaler:TypeError:fit()缺少1个必需的位置参数:'X'

为分类变量sklearn创建我的自定义Imputer

为分类变量 sklearn 创建我的自定义 Imputer