如何在Python3中使用for循环调用不同的预处理函数?

我目前正在研究scikit learnpreprocessing函数。

我想知道是否可以遍历一个预定义的预处理函数列表,这样我就不必为每个函数编写完整的设置代码了。

例如,一个函数的代码如下:

T = preprocessing.MinMaxScaler()X_train = T.fit_transform(X_train) X_test = T.transform(X_test)

我尝试通过遍历预定义列表来使用不同的预处理函数:

pre_proc = ['Normalizer','MaxAbsScaler','MinMaxScaler','KernelCenterer', 'StandardScaler']     for proc in pre_proc:         T = 'preprocessing.'+ proc +'()'         X_train = T.fit_transform(X_train)         X_test = T.transform(X_test)

目前这会产生以下结果,这并不令人意外:

-->   37    X_train = T.fit_transform(X_train)      38    X_test = T.transform(X_test)       39     for i in np.arange(startpt_c,endpt_c, step_c):      AttributeError: 'str' object has no attribute 'fit_transform'

我认为我需要将字符串转换为正确的对象类型,然后才能调用方法,即让它被识别为函数。

有没有一种方法可以满足我使用循环的目标呢?

设置:在Azure ML studio中使用Jupyter notebook运行Python 3,操作系统为Windows 864位机器。


回答:

问题出在你代码的这一行

pre_proc = ['Normalizer','MaxAbsScaler','MinMaxScaler','KernelCenterer', ...

你在这里所做的是创建一个名为pre_proc的列表,实际上它只是一个字符串列表。Python不知道你实际上是想把它们作为函数。因此,当你尝试使用T = 'preprocessing.'+ proc +'()'时,Python会抛出一个错误,说T是一个字符串,没有像fit_transform这样的方法。所以,不要使用字符串,而应该使用实际的函数名称,即不要用引号括起来。使用它们的方式如下:

pre_proc = [preprocessing.Normalizer, preprocessing.MaxAbsScalar, preprocessing.MinMaxScalar, preprocessing.KernelCenterer, preprocessing.StandardScaler]

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注