类型错误:fit_transform()缺少一个必需的位置参数:'X'。

18

我试图在一个数据集中进行特征缩放(Feature Scaling),但是我遇到了一个错误,不知道该怎么继续处理:

    > Traceback (most recent call last):
    > 
    >   File "<ipython-input-10-71bea414b4d0>", line 22, in <module>
    >     x_train = sc_X.fit_transform(x_train)
    > 
    > TypeError: fit_transform() missing 1 required positional argument: 'X'

这是我的代码:

import pandas as pd

# Importing the dataset
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 3].values
# Taking care of missing data
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values="NaN", strategy="mean", axis=0)
imputer = Imputer.fit(imputer,X[:,1:3])
X[:, 1:3] = Imputer.transform(imputer,X[:, 1:3])

#Spliting the dataset into Training set and Test Set
from sklearn.cross_validation import train_test_split

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size= 0.2, random_state= 0)

#Feature Scalling

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler
x_train = sc_X.fit_transform(x_train)
x_test = sc_X.transform(x_test)
4个回答

44
你正在将sc_X赋值为StandardScaler类的引用。 但fit_transform()不是一个类方法,而是一个实例方法。 这意味着您必须创建类的一个实例。

所以,

sc_X = StandardScaler

应该是:

sc_X = StandardScaler()

这个答案可能需要更多关于为什么上面的第一行是错误的解释。StandardScaler 是一个类,为什么我们不能只传递它的名称?我可能错了,但我认为问题在于类的名称和它的新实例之间的差异,但您不觉得这个答案至少需要再解释一句吗? - Michael Tuchman

1
您需要创建类实例:
sc_X = StandardScaler() 

由于fit_transform()是实例方法而不是类方法


0

imputer 是一个方法,而 Imputer 则是一个类。

因此,请将代码更改为以下内容,并在此代码中的其他相应位置进行更改:

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

0
只需保留StandardScaler函数的括号 答案:- StandardScaler()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接