如何使用Scikit-learn通过标准差对数据帧进行归一化?

5

给定以下数据框和 left-x 列:

|       | left-x | left-y | right-x | right-y |
|-------|--------|--------|---------|---------|
| frame |        |        |         |         |
| 0     | 149    | 181    | 170     | 175     |
| 1     | 149    | 181    | 170     | 175     |
| 2     | 149    | 181    | 170     | 175     |
| 3     | 149    | 181    | 170     | 175     |

如何使用scikit-learn库,通过标准差来归一化left-x


你可以使用sklearn.preprocessing模块中的StandardScaler。 - YOLO
@ManishSaraswat,你能否写一个例子吗? - JP Ventura
@JPVentura,我已经发布了一个答案。 - YOLO
2个回答

9

您可以按照以下方式使用标准差进行归一化,而无需使用sci-kit-learn:

df['left-x'] = df['left-x'] / df['left-x'].std()

如果您还希望对数据进行均值中心化:

df['left-x'] = (df['left-x'] - df['left-x'].mean())/df['left-x'].std()

这里的 df 是你的 asl.df[l] 变量。

.std() 方法返回给定轴上数据框的标准差。首先选择列,然后仅对该列计算标准差。

如果你需要经常执行此操作并想要避免混乱,可以将其封装为一个函数,如:

def std_norm(df, column):
    c = df[column]
    df[column] = (c - c.mean())/c.std()

你可以称之为:
std_norm(df, 'left-x')

请注意,此操作会就地更新传递的DataFrame。

我知道我可以执行(df['left-x'] - df['left-x'].mean())/df['left-x'].std(),但这是一个非常常见的操作,我想知道是否有一个“normalize”函数可以直接使用。 - JP Ventura
2
@JPVentura 如果有的话,我会期望它在pandas本身中(而不是sci-kit)但我并不知道。你可以将其包装成一个函数以便重复使用,以减少噪音。我已经添加了一个示例。 - mfitzp

3
您可以使用sklearn.preprocessing模块中的缩放函数。
from sklearn.preprocessing import StandardScaler

sc = StandardScaler()
sc.fit(df['left-x'])

df['left-x'] = sc.transform(df['left-x'])

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