gpt4 book ai didi

python - 处理 sklearn.preprocessing 上的缺失 (nan) 值

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:14 24 4
gpt4 key购买 nike

我正在尝试使用 scikit-learn 预处理在处理数据之前使用缺失值(即 nan)对数据进行标准化。

显然,一些缩放器(例如 StandardScaler)以我想要的方式处理缺失值 - 我的意思是在保持 nans 的同时规范化现有值 - 而其他缩放器(例如 Normalizer)只是引发错误。

我环顾四周并没有找到 - 我如何使用带有缺失值的规范化器,或复制它的行为(使用 norm='l1' 和 norm='l2';我需要测试几个规范化选项)其他方式?

from sklearn.preprocessing import Normalizer, StandardScaler
import numpy as np

data = np.array([0,1,2,np.nan, 3,4])

scaler = StandardScaler(with_mean=True, with_std=True)
scaler.fit_transform(data.reshape(-1,1))

normalizer = Normalizer(norm='l2')
normalizer.fit_transform(data.reshape(-1,1))

最佳答案

根据文档,您的请求的问题是 Normalizer 以这种方式运行:

Normalize samples individually to unit norm.

Each sample (i.e. each row of the data matrix) with at least one non zero component is rescaled independently of other samples so that its norm (l1 or l2) equals one (source here)

这意味着每一行的总和必须达到单位范数。如何处理缺失值?理想情况下,您似乎不希望它计入总和,并且您希望行正常化而不考虑它,但内部函数 check_array 通过抛出错误来阻止它。

您需要避免这种情况。最合理的做法是:

  1. 首先创建一个掩码以记录数组中缺少哪些元素
  2. 创建一个填充缺失值的响应数组
  3. 仅选择有效条目后,将规范器应用于您的数组
  4. 在响应数组中记录基于原始位置的归一化值

根据您的示例,这里有一些代码详细说明了该过程:

from sklearn.preprocessing import Normalizer, StandardScaler
import numpy as np

data = np.array([0,1,2,np.nan, 3,4])

# set valid mask
nan_mask = np.isnan(data)
valid_mask = ~nan_mask

normalizer = Normalizer(norm='l2')

# create a result array
result = np.full(data.shape, np.nan)

# assign only valid cases to
result[valid_mask] = normalizer.fit_transform(data[valid_mask].reshape(-1,1)).reshape(data[valid_mask].shape)

关于python - 处理 sklearn.preprocessing 上的缺失 (nan) 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55280054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com