如何在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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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