繁体   English   中英

我从 sklearn 得到 IterativeImputer 的 output 的负值

[英]I'm getting negative values as output of IterativeImputer from sklearn

我正在使用 sklearn 库中的 Multiple Imputer 来估算降雨数据集中的一些缺失值,其中包含降雨站和降雨数据(每个站都是一列,索引是 DateTime)。 我能够运行 IterativeImputer 并获得一个 output 并填充了所有缺失值。 问题是 output 包含负值。 可以更改他估算的 de min_value,但它为所有列设置了唯一值。 我想根据插补前每列的最小值设置一个 min_value 。 Stack 中有一个针对该答案的响应,但我不知道该怎么做。

我正在使用的代码:

import pandas as pd
import numpy as np
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.compose import make_column_transformer
from sklearn.compose import make_column_selector


#Babitonga's region stations
babi_ana = pd.read_csv(all_csv_files[0]).set_index("Time") #Here a read the csv data

# Transforming my index to datetime
babi_ana.index = pd.to_datetime(babi_ana.index)
mask = (babi_ana.index > ini1) & (babi_ana.index <= fim1) #Selecting the date range 
babi_ana1 = babi_ana.loc[mask]

# Applying the imputer
imputer_data = IterativeImputer(random_state = 0,skip_complete=True,sample_posterior=True, max_iter = 10, missing_values = np.nan)
data = babi_ana1 
minimum = data.iloc[:,:].min(axis=0) #No negative values from the original
imputer_data.fit(data.iloc[:,:].values)
data_imputed = imputer_data.transform(data.iloc[:,:].values)

# Here I realize the output has negative values
data_imputed = pd.DataFrame(data_imputed)
minimun_after = data_imputed.iloc[:,:].min(axis=0) #several negative values, except for 2 stations

我希望能够在插补之前根据每个站的最大值和最小值使用min_valuemax_value ,如下所示:

max_imputer = data.iloc[:,:].max(axis = 0)
min_imputer = data.iloc[:,:].min(axis = 0)

对这个问题有很大的改进:)。

我在这里阅读了有关IterativeImputer的更多信息: https://scikit-learn.org/stable/modules/generated/sklearn.impute.IterativeImputer.html#sklearn.impute.IterativeImputer

似乎它可以在构造函数上使用min_value参数,它需要一个浮点数或一个数组。 如果您对数据的所有特征(列)都有最小值,则可以使用浮点替代方案。

例如,如果您希望所有特征(列)中的最小可能值为0 ,则可以将代码更改为:

imputer_data = IterativeImputer(random_state = 0, skip_complete = True,sample_posterior = True, max_iter = 10, missing_values = np.nan, min_value = 0)

另一方面,如果你想为不同的特征设置不同的最小值,你需要使用一个数组,只要特征的数量。 例如:如果您有 2 个功能,并且最小值应分别为 0 和 5,您可以将代码更改为:

imputer_data = IterativeImputer(random_state = 0, skip_complete = True,sample_posterior = True, max_iter = 10, missing_values = np.nan, min_value = [0, 5])

您可以对max_value参数执行相同的操作。

第一个更改应确保您不再获得任何负估算值。

如果您想根据已有的数据使用minmax ,第一步应该是编写代码来遍历数据中的该特征,并在其中获取最小值和最大值。 它应该与在数组中获取最小值和最大值相同,如果您不确定如何操作,您可能会找到很多 Python 示例。

最后一点,我仍然有点奇怪 Imputer output 负数据在仅拟合正数据后如何。 所以我会仔细检查data.iloc[:,:].values确实是您想要的 Imputer 期望格式的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM