【问题标题】:Normalize Dataset in Python在 Python 中规范化数据集
【发布时间】:2021-03-09 18:37:42
【问题描述】:

所以我有一个想要标准化的数据集。数据集包含一堆数字,所以我只想发布其中的一行:

    1,1,22,22,22,19,18,14,49.895756,17.775994,5.27092,0.771761,0.018632,0.006864,0.003923,0.003923,0.486903,0.100025,1,0

有人知道怎么做吗?我不允许使用 Scikit-Learn。

【问题讨论】:

  • 提供您的真实数据,以便我们知道您是要按行还是按列进行标准化

标签: python normalize


【解决方案1】:

为了标准化数据集,您只需计算数据集的平均值 df['column_name'].mean() 和标准差 df['column_name'].std(),然后从数据集中的每个值中减去平均值,然后将结果除以标准差。

所以结果看起来像这样:

avg = df['column_name'].mean()
std = df['column_name'].std()
normalized = (df['column_name'] - avg) / std

【讨论】:

    【解决方案2】:

    标准化获取所有值并对其进行转换,使它们位于 0 和 1 之间。

    要执行此操作:

    1. 先求最小值(称为a)和最大值(称为b)
    2. 获取数据集中的每个值(称为 d)并找到 (d-a)/(b-a)。

    (d-a) 确保范围从 [a,b] 到 [0,b-a],然后除以 (b-a) 得到范围 [0,1]。

    在 Python 中,您首先将数据集转换为 numpy 数组(一种更高效的数据结构)

    import numpy as np
    d = np.array(your_dataset)
    

    然后找到最大值和最小值

    a = d.min()
    b = d.max()
    

    最后你执行操作

    d = (d-a)/(b-a)
    

    【讨论】:

    • 好的,谢谢。也许我的问题并不清楚,但这只会使一条线正常化,对吗?我的真实数据集包含超过 1000 行数字。
    • 没问题!当对 numpy 数组进行操作时,它会广播到数组中的每个元素;所以在这段代码中,所有的数字行都会受到影响。您只想影响一行还是整个数据集?
    猜你喜欢
    • 2020-05-29
    • 2018-12-12
    • 2010-10-06
    • 2023-03-26
    • 2015-08-21
    • 2019-03-27
    • 2014-09-06
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多