![](/img/trans.png)
[英]ModuleNotFoundError sklearn.preprocessing, Pickle
[英]Handling missing (nan) values on sklearn.preprocessing
我正在嘗試使用 scikit-learn 預處理在處理數據之前使用缺失(即 nan)值對數據進行標准化。
顯然,一些縮放器(例如 StandardScaler)以我想要的方式處理缺失值 - 我的意思是在保持 nans 的同時標准化現有值 - 而其他(例如 Normalizer)只會引發錯誤。
我環顧四周並沒有找到 - 如何使用具有缺失值的 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 以這種方式運行:
將樣本單獨標准化為單位范數。
具有至少一個非零分量的每個樣本(即數據矩陣的每一行)獨立於其他樣本進行重新縮放,以便其范數(l1 或 l2)等於 1( 來源此處)
這意味着每一行都必須求和到單位范數。 如何處理缺失值? 理想情況下,您似乎不希望它計入總和,並且無論如何都希望行標准化,但是內部函數 check_array 通過拋出錯誤來防止它。
你需要規避這種情況。 最合理的做法是:
這里有一些代碼詳細說明了這個過程,基於你的例子:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.