标签: imputation

具有多个值的 Scikit-learn Imputer

有没有办法让 Scikit-learn Imputer 查找并替换多个被视为“缺失值”的值?

\n

例如,我想做类似的事情

\n
imp = Imputer(missing_values=(7,8,9))\n
Run Code Online (Sandbox Code Playgroud)\n

但根据文档,missing_values参数只接受单个整数:

\n
\n

Missing_values :整数或 \xe2\x80\x9cNaN\xe2\x80\x9d,可选(默认=\xe2\x80\x9dNaN\xe2\x80\x9d)

\n

缺失值的占位符。所有出现的丢失值都将被估算。对于编码为 np.nan 的缺失值,请使用字符串值 \xe2\x80\x9cNaN\xe2\x80\x9d。

\n
\n

python scikit-learn imputation

2
推荐指数
1
解决办法
1762
查看次数

使用fancyimpute对测试集进行插补

Python 包Fancyimpute提供了几种方法来估算 Python 中的缺失值。该文档提供了以下示例:

# X is the complete data matrix
# X_incomplete has the same values as X except a subset have been replace with NaN

# Model each feature with missing values as a function of other features, and
# use that estimate for imputation.
X_filled_ii = IterativeImputer().fit_transform(X_incomplete)
Run Code Online (Sandbox Code Playgroud)

当将插补方法应用于数据集时,这很有效X。但是如果需要training/test拆分呢?一次

X_train_filled = IterativeImputer().fit_transform(X_train_incomplete)
Run Code Online (Sandbox Code Playgroud)

被调用,我如何估算测试集并创建X_test_filled?测试集需要使用来自训练集的信息进行估算。我想IterativeImputer()应该返回和对象可以适合X_test_incomplete。那可能吗?

请注意,对整个数据集进行插补然后拆分为训练和测试集是不正确的

python missing-data imputation fancyimpute

2
推荐指数
1
解决办法
2911
查看次数

scikit-learn 中的 Multivariate imputer 与 Simple imputer 有何不同?

我有一个包含缺失值的数据矩阵,我正在尝试估算这些值,我正在查看不同估算器的选项,并检查哪些设置最适合我正在工作的生物环境。我了解 knnimpute 函数matlab 和 scikit-learn 中的简单输入器。但是,我不太确定我对迭代插补器的理解是否正确。

我已经查看了该站点上的多变量/迭代插补器的文档 - https://scikit-learn.org/stable/modules/generated/sklearn.impute.IterativeImputer.html

我不明白算法的解释,作为循环。插补者是否使用矩阵中列和行的特征来确定缺失数据点的“值”?然后采用这种方法一次一个随机丢失的数据点,以避免将数据不自然地转向先前估算的数据点的特征?

python conceptual scikit-learn imputation

2
推荐指数
1
解决办法
2076
查看次数

'R','鼠标',缺少变量插补-如何仅在稀疏矩阵中执行一列

我有一个半稀疏的矩阵。所有单元格中有一半是空白(na),所以当我尝试运行“鼠标”时,它将尝试对所有单元格起作用。我只对一个子集感兴趣。

问题:在下面的代码中,如何使“小鼠”仅在前两列上运行?有没有一种干净的方法使用行滞后或行前导来做到这一点,以便上一行的内容可以帮助修补当前行中的孔?

set.seed(1)

#domain
x <- seq(from=0,to=10,length.out=1000)

#ranges
y <- sin(x) +sin(x/2) + rnorm(n = length(x))
y2 <- sin(x) +sin(x/2) + rnorm(n = length(x))

#kill 50% of cells
idx_na1 <- sample(x=1:length(x),size = length(x)/2)
y[idx_na1] <- NA

#kill more cells
idx_na2 <- sample(x=1:length(x),size = length(x)/2)
y2[idx_na2] <- NA

#assemble base data
my_data <- data.frame(x,y,y2)

#make the rest of the data
for (i in 3:50){


     my_data[,i] <- rnorm(n = length(x))
     idx_na2 <- sample(x=1:length(x),size = length(x)/2)
     my_data[idx_na2,i] <- NA

}

#imputation
est <- …
Run Code Online (Sandbox Code Playgroud)

r r-mice imputation

1
推荐指数
1
解决办法
3081
查看次数

R imputeTS 包中 na.kalman 函数的奇怪行为

我正在尝试imputeTS包中的功能。该包提供了多个函数来估算单变量时间序列数据中的缺失值。我测试了它们,除了功能之外,它们都很棒na_kalman。此函数更改原始数值向量。下面是一个例子。

# Load packages
library(imputeTS)

# Set seeds
set.seed(123)

# Generate 10 random number
dat <- rnorm(10)

# Replace the first 10 numbers to be NA
dat[1:5] <- NA

# Check the numbers in dat
dat
 [1]         NA         NA         NA         NA         NA  1.7150650  0.4609162 -1.2650612 -0.6868529
[10] -0.4456620
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我创建了一个包含 10 个数字的向量,而前 5 个数字是NA

# Apply the na_kalman function
dat2 <- na_kalman(dat)

# Check the numbers in dat2
dat2
[1]  1.7150650  1.7150650  1.7150650  1.7150650  1.7150650 …
Run Code Online (Sandbox Code Playgroud)

r time-series missing-data imputation imputets

1
推荐指数
1
解决办法
960
查看次数

当鼠标返回“系统在计算上是单一的”错误时,在 R 中进行插补

我正在尝试对中等大小的数据框(~100,000 行)进行插补,其中 30 列中有 5 列具有 NA(很大比例,大约 60%)。

我用以下代码尝试了鼠标:

library(mice)    
data_3 = complete(mice(data_2))
Run Code Online (Sandbox Code Playgroud)

第一次迭代后,我得到以下异常:

iter imp variable
  1   1  Existing_EMI  Loan_Amount  Loan_Period

Error in solve.default(xtx + diag(pen)): system is computationally singular: reciprocal condition number = 1.08007e-16
Run Code Online (Sandbox Code Playgroud)

是否有其他一些更适合这种情况的软件包?我该如何处理这个问题?

r r-mice imputation

1
推荐指数
1
解决办法
9865
查看次数

R中MI数据的描述性统计:取3

作为R初学者,我发现很难弄清楚如何计算多重估算数据的描述性统计数据(比运行一些其他基本分析更重要,例如关联和回归).

这些类型的问题以道歉(Descriptive statistics(Means,StdDevs)使用多重推算数据:R)开头,但尚未得到解答(https://stats.stackexchange.com/questions/296193/pooling-basic-descriptives-从几个乘法推算数据集 - 使用 - 鼠标)或迅速投下一票.

以下是对mouseadds函数的描述(https://www.rdocumentation.org/packages/miceadds/versions/2.10-14/topics/stats0),我发现很难跟踪以mids格式存储的数据.

我已经使用摘要(完整(imp))得到了一些输出,如均值,中位数,最小值,最大值,但是我想知道如何获得额外的汇总输出(例如,偏斜/峰度,标准偏差,方差).

从上面的上一张海报中借来的插图:

  > imp <- mice(nhanes, seed = 23109)

    iter imp variable
    1   1  bmi  hyp  chl
    1   2  bmi  hyp  chl
    1   3  bmi  hyp  chl
    1   4  bmi  hyp  chl
    1   5  bmi  hyp  chl
    2   1  bmi  hyp  chl
    2   2  bmi  hyp  chl
    2   3  bmi  hyp  chl

  > summary(complete(imp))
   age         bmi        hyp         chl     
   1:12   Min.   :20.40   1:18   Min.   :113  
   2: 7 …
Run Code Online (Sandbox Code Playgroud)

r summary r-mice imputation

1
推荐指数
2
解决办法
487
查看次数

r data.table 为多组列估算缺失值

我想为几组列估算缺失值。这个想法是对于数值变量,我想使用中位数来估算NA,对于分类变量,我想使用模式来估算NA. 我确实搜索了如何为不同的列集分别估算它,但没有找到。

我的数据很大,有很多列,所以我把它放在data.table 中。由于我不确定如何在 data.table 中执行此操作,因此我尝试了下面的代码库 R。我尝试了下面的代码,但不知何故,我似乎弄乱了列名标识。

我的数据很大并且有多个变量。我存储载体数值变量var_num,我存储载体分类变量var_chr

请参阅下面的示例代码 -

library(data.table)
set.seed(1200)
id <- 1:100
bills <- sample(c(1:20,NA),100,replace = T)
nos <- sample(c(1:80,NA),100,replace = T)
stru <- sample(c("A","B","C","D",NA),100,replace = T)
type <- sample(c(1:7,NA),100,replace = T)
value <- sample(c(100:1000,NA),100,replace = T)

df1 <- as.data.table(data.frame(id,bills,nos,stru,type,value))
class(df1)

var_num <- c("bills","nos","value")
var_chr <- c("stru","type")

impute <- function(x){
  #print(x)
  if(colnames(x) %in% var_num){
    x[is.na(x)] = median(x,na.rm = T)
  } else if (colnames(x) …
Run Code Online (Sandbox Code Playgroud)

r function missing-data data.table imputation

1
推荐指数
1
解决办法
1790
查看次数

在数据框中的某些列上插入错误

我试图在名为age的单一列上使用Imputer来替换缺少的值。但是,我收到了以下错误:“期望的2D数组,而是获得了1D数组:”

以下是我的代码

import pandas as pd
import numpy as np
from sklearn.preprocessing import Imputer

dataset = pd.read_csv("titanic_train.csv")

dataset.drop('Cabin',axis = 1,inplace = True)
x = dataset.drop('Survived',axis = 1)
y = dataset['Survived']

imputer = Imputer(missing_values ="nan",strategy = "mean",axis = 1)
imputer=imputer.fit(x['Age'])
x['Age']=imputer.transform(x['Age'])
Run Code Online (Sandbox Code Playgroud)

python machine-learning pandas scikit-learn imputation

1
推荐指数
1
解决办法
1849
查看次数

如何替换python中的NaN值

我的数据框中有一个NaN值列表,我想用空字符串替换 NaN 值。

到目前为止我已经尝试过,但不起作用:

df_conbid_N_1 = pd.read_csv("test-2019.csv",dtype=str, sep=';', encoding='utf-8')
df_conbid_N_1['Excep_Test'] = df_conbid_N_1['Excep_Test'].replace("NaN","")
Run Code Online (Sandbox Code Playgroud)

python missing-data dataframe pandas imputation

1
推荐指数
1
解决办法
1万
查看次数

如何在泰坦尼克时代列中通过插补填充 NaN 值

我正在参加泰坦尼克号 Kaggle 比赛,目前正在尝试估算缺失Age值。

这个想法是计算训练集上每组的Age平均值,然后使用该信息来替换训练集和测试集。[Pclass, Sex]NaN

这是我到目前为止所拥有的:

meanAgeTrain = train.groupby(['Pclass', 'Sex'])['Age'].transform('mean')
    
for df in [train, test]:
    df['Age'] = df['Age'].fillna(meanAgeTrain)
Run Code Online (Sandbox Code Playgroud)

问题是,这仍然在测试集中留下了一些 NaN 值,同时消除了训练集中的所有 Nan。我认为这与指数有关。

我需要的是:

  1. 计算训练集中每个 Pclass/Sex 组的平均值
  2. 将训练集中的所有 NaN 值映射到正确的均值
  3. 将测试集中的所有 NaN 值映射到正确的平均值(按 Pclass/Sex 查找,而不是基于索引)

如何使用 Pandas 正确完成此操作?

编辑:

感谢您的建议。@Reza 的那个可以工作,但我不能 100% 理解它。所以我正在尝试提出自己的解决方案。

这是可行的,但我是 Pandas 新手,想知道是否有更简单的方法来实现它。

trainMeans = self.train.groupby(['Pclass', 'Sex'])['Age'].mean().reset_index()

def f(x):
    if x["Age"] == x["Age"]:  # not NaN
        return x["Age"]
    return trainMeans.loc[(trainMeans["Pclass"] == x["Pclass"]) & (trainMeans["Sex"] == x["Sex"])]["Age"].values[0]

 self.train['Age'] = self.train.apply(f, axis=1)
 self.test['Age'] = …
Run Code Online (Sandbox Code Playgroud)

python pandas scikit-learn sklearn-pandas imputation

1
推荐指数
1
解决办法
4896
查看次数

在 KNIME 中将值更改为缺失值

我有一个数据集,其中每个缺失值都有 N/A,如何将其更改为列本身内部的实际缺失值。
我一直在尝试使用规则引擎节点,但它不起作用.. 有
什么建议吗?

nan missing-data knime imputation

0
推荐指数
1
解决办法
2766
查看次数

如何在缺失值的插补中对missRanger使用并行计算?

我正在输入缺失值,missRanger因为我有 1000 个变量,所以花费的时间太长。我尝试使用并行计算,但它并没有使过程更快。这是代码

library(doParallel)
cores=detectCores()
cl <- makeCluster(cores[1]-1) 
registerDoParallel(cl)
library(missRanger)
train[1:lengthvar] <- missRanger(train[1:lengthvar], pmm.k = 3, num.trees = 100)
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

我不确定要向此代码添加什么才能使其正常工作。

parallel-processing r missing-data imputation

0
推荐指数
1
解决办法
505
查看次数