【问题标题】:Manual normalization function taking too long to execute手动标准化功能执行时间过长
【发布时间】:2019-03-21 17:23:19
【问题描述】:

我正在尝试手动实现标准化功能,而不是使用 scikit learn 的。原因是,我需要手动定义最大和最小参数,而 scikit learn 不允许这种更改。

我成功地实现了这个以标准化 0 和 1 之间的值。但是运行需要很长时间。

问题: 还有其他有效的方法可以做到这一点吗?我怎样才能让它执行得更快。

下面是我的代码:

scaled_train_data = scale(train_data)

def scale(data):
    for index, row in data.iterrows():
        X_std = (data.loc[index, "Close"] - 10) / (2000 - 10)
        data.loc[index, "Close"] = X_std

    return data

2000 和 10 是我手动定义的属性,而不是取数据集的最小值和最大值。

提前谢谢你。

【问题讨论】:

    标签: python tensorflow machine-learning scikit-learn normalizing


    【解决方案1】:

    使用 numpy 的矩阵。您也可以手动设置最小值和最大值。

    import numpy as np
    data = np.array(df)
    _min = np.min(data, axis=0)
    _max = np.max(data, axis=0)
    normed_data = (data - _min) / (_max - _min)
    

    【讨论】:

    • for循环并分别计算每列的X_std会花费很长时间。
    【解决方案2】:

    为什么要循环?你可以使用

    train_data['close'] = (train_data['close'] - 10)/(2000 - 10) 
    

    利用向量化的 numpy 函数。当然,如果你愿意,你也可以把它放在一个函数中。

    或者,如果您想重新调整到线性范围,您可以使用http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html。这样做的好处是您可以保存它,然后以相同的方式重新调整测试数据。

    【讨论】:

    • 谢谢你成功了。 MinMAxScaler 的问题是我不想在数据列中获得最小值和最大值。我想输入一个手动的广义值。 scikit learn 自动获取列的最小值和最大值并将其标准化。如果我错了纠正我。这就是为什么我想手动执行此操作
    • 好吧,你可以添加你想要缩放的范围,例如:sklearn.preprocessing.MinMaxScaler(feature_range=(-1, 3))。我不知道您如何选择数字 2000 和 10,但如果您选择它们​​以缩放到特定范围,则可以使用此选项。这是真的,据我所知,你不能输入那些(可能是因为它已经是像上面那样的单行了)。
    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2018-01-19
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多