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' 错误的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: fit() 缺少 1 个必需的位置参数:'y',