精华内容
下载资源
问答
  • 缺失值的个数只占整体很小一部分的时候,可直接删除缺失值(行)。但是如果缺失值占比比较大,这种直接删除缺失值的处理方法就会丢失重要信息。 直接删除法处理缺失值时,需要检测样本总体中缺失值的个数。Python...
  • 缺失值填充 缺失值:缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。(百度词条) 1.1 缺失的类型 1.1.1完全随机缺失(missing ...
  • 下面小编就为大家分享一篇python实现数据预处理之填充缺失值的示例。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 缺失值填充的几种方法

    万次阅读 多人点赞 2018-09-12 22:59:51
    之前的某次面试中,聊到了缺失值填充方法,经面试官指点学到了一些技能,下面简要总结一下。 常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这...

    面试不仅仅是一个找工作的过程,还是一个向面试官交流学习的过程。之前的某次面试中,聊到了缺失值填充方法,经面试官指点学到了一些技能,下面简要总结一下。

    常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。

    1. 数据集介绍

    数据集来源于 天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测。该数据集共有1000条数据,特征共83维,加上id和label共85列,每维特征缺失数量范围为0~911。为了简单比较各种填充方法的效果,我们选取最简单的二分类模型(逻辑回归),选取F1 score作为评测指标。

    读取数据集代码如下:

    train_data = pd.read_csv('train_data.csv', encoding='gbk') # 读取数据集
    
    filter_feature = ['id','label'] # 过滤无用的维度
    features = []
    for x in train_data.columns: # 取特征
        if x not in filter_feature:
            features.append(x)
    
    train_data_x = train_data[features] 
    train_data_y = train_data['label']
    X_train, X_test, y_train, y_test = train_test_split(train_data_x, train_data_y, random_state=1) # 划分训练集、测试集
    

    2. 常见的填充方法

    (1)填充固定值

    选取某个固定值/默认值填充缺失值。

    train_data.fillna(0, inplace=True) # 填充 0

    (2)填充均值

    对每一列的缺失值,填充当列的均值。

    train_data.fillna(train_data.mean(),inplace=True) # 填充均值

    (3)填充中位数

    对每一列的缺失值,填充当列的中位数。

    train_data.fillna(train_data.median(),inplace=True) # 填充中位数

    (4)填充众数

    对每一列的缺失值,填充当列的众数。由于存在某列缺失值过多,众数为nan的情况,因此这里取的是每列删除掉nan值后的众数。

    train_data.fillna(train_data.mode(),inplace=True) # 填充众数,该数据缺失太多众数出现为nan的情况
    features_mode = {}
    for f in features:
        print f,':', list(train_data[f].dropna().mode().values)
        features_mode[f] = list(train_data[f].dropna().mode().values)[0]
    train_data.fillna(features_mode,inplace=True)

    (5)填充上下条的数据

    对每一条数据的缺失值,填充其上下条数据的值。

    train_data.fillna(method='pad', inplace=True) # 填充前一条数据的值,但是前一条也不一定有值
    train_data.fillna(0, inplace=True)
    
    train_data.fillna(method='bfill', inplace=True) # 填充后一条数据的值,但是后一条也不一定有值
    train_data.fillna(0, inplace=True)

    (6)填充插值得到的数据

    用插值法拟合出缺失的数据,然后进行填充。

    for f in features: # 插值法填充
        train_data[f] = train_data[f].interpolate()
        
    train_data.dropna(inplace=True)

    (7)填充KNN数据

    填充近邻的数据,先利用knn计算临近的k个数据,然后填充他们的均值。(安装fancyimpute)除了knn填充,fancyimpute还提供了其他填充方法。

    from fancyimpute import KNN
    
    train_data_x = pd.DataFrame(KNN(k=6).fit_transform(train_data_x), columns=features)

    (8)填充模型预测的值

    把缺失值作为新的label,建立模型得到预测值,然后进行填充。这里选择某个缺失值数量适当的特征采用随机森林RF进行拟合,其他缺失特征采用均值进行填充。

    new_label = 'SNP46'
    new_features = []
    for f in features:
        if f != new_label:
            new_features.append(f)
            
    new_train_x = train_data[train_data[new_label].isnull()==False][new_features]
    new_train_x.fillna(new_train_x.mean(), inplace=True) # 其他列填充均值
    new_train_y = train_data[train_data[new_label].isnull()==False][new_label]
    
    new_predict_x = train_data[train_data[new_label].isnull()==True][new_features]
    new_predict_x.fillna(new_predict_x.mean(), inplace=True) # 其他列填充均值
    new_predict_y = train_data[train_data[new_label].isnull()==True][new_label]
    
    rfr = RandomForestRegressor(random_state=666, n_estimators=10, n_jobs=-1)
    rfr.fit(new_train_x, new_train_y)
    new_predict_y = rfr.predict(new_predict_x)
    
    new_predict_y = pd.DataFrame(new_predict_y, columns=[new_label], index=new_predict_x.index)
    new_predict_y = pd.concat([new_predict_x, new_predict_y], axis=1)
    new_train_y = pd.concat([new_train_x, new_train_y], axis=1)
    new_train_data = pd.concat([new_predict_y,new_train_y]) 
    
    train_data_x = new_train_data[features]
    train_data_y = train_data['label']

    3. 实验对比

    (1)评测指标

    选取F1 score进行评测。

    def countF1(train, predict):
        count = 0 # 统计预测的正确的正样本数
        for i in range(len(train)):
            if predict[i] == 1 and train[i] == 1:
                count += 1
        pre =  count * 1.0 / sum(predict) # 准确率
        recall =  count * 1.0 / sum(train) # 召回率
        return 2 * pre * recall / (pre + recall)
        

    (2)对比结果

    填充方式训练集_F1测试集_F1
    默认值00.705167170.59689922
    均值(mean)0.701863350.67768595
    中位数(median)0.708268330.67479675
    众数(mode)0.704791340.68852459
    上一个数据(pad)0.704097120.62711864
    下一个数据(bfill)0.669811320.60169492
    插值0.690184050.61333333
    KNN_30.710769230.66393443
    KNN_60.708978330.68852459
    KNN_100.704791340.68032787
    随机森林_feature30.5714285710.4
    随机森林_feature460.5851393190.41509434

    (3)实验小结

    对于缺失值的处理,除了直接删除缺失严重的特征外,还可以选择各种各样的填充方法。对于每一种填充方式而言,都有其适用的场景,没有绝对的好坏之分,因此在做数据预处理时,要多尝试几种填充方法,选择表现最佳的即可。

     

    本文完整代码已上传至git(https://github.com/AHNU/fill_missing_values)

    参考文献

    1. 训练模型填充空值(fill null)的几种方法

    2. https://www.kaggle.com/pmarcelino/comprehensive-data-exploration-with-python

    展开全文
  • 缺失值被认为是预测建模的首要障碍。因此,掌握克服这些问题的方法很重要。 估算缺失值的方法的选择在很大程度上影响了模型的预测能力。在大多数统计分析方法中,按列表删除是用于估算缺失值的默认方法。但是,它不...

    原文链接:http://tecdat.cn/?p=8287

    原文出处:拓端数据部落公众号

    介绍

    缺失值被认为是预测建模的首要障碍。因此,掌握克服这些问题的方法很重要。

    估算缺失值的方法的选择在很大程度上影响了模型的预测能力。在大多数统计分析方法中,删除是用于处理缺失值的默认方法。但是,它会导致信息丢失。

    在本文中,我列出了5个R语言方法。

     

    链式方程进行的多元插补

    通过链式方程进行的多元插补是R用户常用的。与单个插补(例如均值)相比,创建多个插补可解决缺失值的不确定性。

    MICE假定缺失数据是随机(MAR)缺失,这意味着,一个值缺失概率上观测值仅取决于并且可以使用它们来预测。通过为每个变量指定插补模型,可以按变量插补数据。

    例如:假设我们有X1,X2….Xk变量。如果X1缺少值,那么它将在其他变量X2到Xk上回归。然后,将X1中的缺失值替换为获得的预测值。同样,如果X2缺少值,则X1,X3至Xk变量将在预测模型中用作自变量。稍后,缺失值将被替换为预测值。

    默认情况下,线性回归用于预测连续缺失值。Logistic回归用于分类缺失值。一旦完成此循环,就会生成多个数据集。这些数据集仅在估算的缺失值上有所不同。通常,将这些数据集分别构建模型并组合其结果被认为是一个好习惯。

    确切地说,使用的方法是:

    1. PMM(预测均值匹配)–用于数字变量
    2. logreg(逻辑回归)–对于二进制变量(具有2个级别)
    3. polyreg(贝叶斯多元回归)–用于因子变量(> = 2级)
    4. 比例模型(有序,> = 2个级别)

    现在让我们实际操作

    > path <- "../Data/Tutorial"
    > setwd(path)
    
    #读取数据
    > data <- iris
    
    #随机产生10%的缺失值
    > summary(iris)
    
    #随机产生10%的缺失值
    > iris.mis <- prodNA(iris, noNA = 0.1)
    
    #检查数据中引入的缺失值
    > summary(iris.mis)
    

     

    我删除了分类变量。让我们在这里关注连续值。要处理分类变量,只需对类level进行编码并按照以下步骤进行即可。

    #删除类别变量
    > iris.mis <- subset(iris.mis, select = -c(Species))
    > summary(iris.mis)
    
     

     md.pattern返回数据集中每个变量中存在的缺失值的表格形式。

    > md.pattern(iris.mis)

    让我们了解一下这张表。有98个观测值,没有缺失值。Sepal.Length中有10个观测值缺失的观测值。同样,Sepal.Width等还有13个缺失值。

     我们还可以创建代表缺失值的视觉效果。 

     

    > mice_plot <- aggr(iris.mis, col=c('navyblue','yellow'),
                        numbers=TRUE, sortVars=TRUE,
                        labels=names(iris.mis), cex.axis=.7,
                        gap=3, ylab=c("Missing data","Pattern"))

    让我们快速了解这一点。数据集中有67%的值,没有缺失值。在Petal.Length中缺少10%的值,在Petal.Width中缺少8%的值,依此类推。您还可以查看直方图,该直方图清楚地描述了变量中缺失值的影响。

    现在,让我们估算缺失的值。

    
    Multiply imputed data set
    Call:
     Number of multiple imputations: 5
    Missing cells per column:
    Sepal.Length Sepal.Width Petal.Length Petal.Width 
    13            14          16           15 
    Imputation methods:
    Sepal.Length Sepal.Width Petal.Length Petal.Width 
    "pmm"        "pmm"        "pmm"       "pmm" 
    VisitSequence:
    Sepal.Length Sepal.Width Petal.Length Petal.Width 
    1              2            3           4 
    PredictorMatrix:
                  Sepal.Length Sepal.Width Petal.Length Petal.Width
    Sepal.Length        0          1            1            1
    Sepal.Width         1          0            1            1
    Petal.Length        1          1            0            1
    Petal.Width         1          1            1            0
    Random generator seed value: 500

    这是使用的参数的说明:

    1. m – 估算数据集
    2. maxit – 插补缺失值的迭代次数
    3. method –是指插补中使用的方法。我们使用了预测均值匹配。

    由于有5个估算数据集,因此可以使用complete()函数选择任何数据集。

     还可以合并来自这些模型的结果,并使用pool()命令获得合并的输出。

    请注意,我仅出于演示目的使用了上面的命令。您可以在最后替换变量值并尝试。

     

    多重插补

     

    该程序包还执行多个插补(生成插补数据集)以处理缺失值。多重插补有助于减少偏差并提高效率。它可以通过基于bootstrap程序的EMB算法,从而可以更快速,更可靠地插入许多变量,包括横截面,时间序列数据等。此外,还可以使用多核CPU的并行插入。

    它做出以下假设:

    1. 数据集中的所有变量均具有多元正态分布(MVN)。它使用均值和协方差汇总数据。
    2. 缺失数据本质上是随机的(随机缺失

     

    因此,当数据具有多变量正态分布时,最有效。如果没有,将进行转换以使数据接近正态分布

    唯一需要注意的是对变量进行分类

     
    
    #访问估算的输出
    > amelia_fit$imputations[[1]]
    > amelia_fit$imputations[[2]]
    > amelia_fit$imputations[[3]]
    > amelia_fit$imputations[[4]]
    > amelia_fit$imputations[[5]]

    要检查数据集中的特定列,使用

    > amelia_fit$imputations[[5]]$Sepal.Length
    
    #将输出导出到csv文件
    
    > write.amelia(amelia_fit, file.stem = "imputed_data_set")

     

    随机森林

    顾名思义,missForest是一个实现随机森林算法。它适用于各种变量类型的非参数插补法。那么,什么是非参数方法?

    非参数方法不会有关于函数形式明确的假设˚F 。取而代之的是,它尝试估计f,使其可以与数据点尽可能接近

    它是如何工作的 ?简而言之,它为每个变量建立一个随机森林模型。然后,它使用模型在观测值的帮助下预测变量中的缺失值。

    它产生OOB(袋外)估算误差估计。而且,它对插补过程提供了高水平的控制。它有选择分别返回OOB(每个变量),而不是聚集在整个数据矩阵。这有助于准确估算模型值。

    NRMSE是归一化的均方误差。它用于表示从估算连续值得出的误差。PFC(错误分类的比例)用于表示从估算类别值得出的误差

    #比较实际数据准确性
    > iris.err <- mixError(iris.imp$ximp, iris.mis, iris)
    >iris.err
    
    NRMSE      PFC 
    0.1535103 0.0625000

    这表明类别变量的误差为6%,连续变量的误差为15%。这可以通过调整mtryntree参数的值来改善  。mtry是指在每个分支中随机采样的变量数。ntree是指在森林中生长的树木数量。

     

    非参数回归方法

     

     对多个插补中的每个插补使用不同的bootstrap程序重采样。然后,将 加性模型(非参数回归方法)拟合到从原始数据中进行替换得到的样本上,并使用非缺失值(独立变量)预测缺失值(充当独立变量)。

    然后,它使用预测均值匹配(默认)来插补缺失值。预测均值匹配非常适合连续和分类(二进制和多级),而无需计算残差和最大似然拟合。

    自动识别变量类型并对其进行相应处理。

    > impute_arg

    输出显示R²值作为预测的缺失值。该值越高,预测的值越好。使用以下命令检查估算值

    #检查估算变量Sepal.Length
    > impute_arg$imputed$Sepal.Length

     

    带有诊断的多重插补

     带有诊断的多重插补 提供了一些用于处理缺失值的方法。 它也构建了多个插补模型来近似缺失值。并且,使用预测均值匹配方法。

    虽然,我已经在上面解释了预测均值匹配(pmm)  :对于变量中缺失值的每个观察值,我们都会从可用值中找到最接近的观察值该变量的预测均值。然后将来自“匹配”的观察值用作推断值。

     

    1. 它可以对插补模型进行图形诊断,并可以实现插补过程的收敛。
    2. 它使用贝叶斯版本的回归模型来处理问题
    3. 插补模型规范类似于R中的回归输出
    4. 它会自动检测数据中的不规则性,例如变量之间的高共线性。
    5. 而且,它在归算过程中增加了噪声,以解决加性约束的问题。

     

     

     如图所示,它使用汇总统计信息来定义估算值。

     

    尾注

     

    在本文中,我说明使用5个方法进行缺失值估算。这种方法可以帮助您在建立预测模型时获得更高的准确性。


    最受欢迎的见解

    1.R语言多元Logistic逻辑回归 应用案例

    2.面板平滑转移回归(PSTR)分析案例实现

    3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

    4.R语言泊松Poisson回归模型分析案例

    5.R语言回归中的Hosmer-Lemeshow拟合优度检验

    6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

    7.在R语言中实现Logistic逻辑回归

    8.python用线性回归预测股票价格

    9.R语言如何在生存分析与Cox回归中计算IDI,NRI指标

    展开全文
  • Python缺失值填充

    2021-07-26 15:57:47
    在对数据进行预处理时,常常会遇到缺失值问题,采用Python自带的功能进行缺失值填充。 1.对某一列进行填充 假设现在有一个名为df的数据框,我们要将其中的bin_volume列的空值用1代替(后面再取对数后即可化为0),...

    在对数据进行预处理时,常常会遇到缺失值问题,采用Python自带的功能进行缺失值填充。

    1.对某一列进行填充

    假设现在有一个名为df的数据框,我们要将其中的bin_volume列的空值用1代替(后面再取对数后即可化为0),代码如下:

    df['bin_volume'].fillna(1)
    

    2.对整个数据框进行填充

    用1填充数据框df中所有的空值,代码如下:

    df.fillna(1)
    

    3.填充值不是固定值的时候

    # 向下填充:用缺失值所在行的上一行数据填充缺失值
    df.fillna(method = 'ffill')
    # 向上填充:用缺失值所在行的下一行数据填充缺失值
    df.fillna(method = 'bfill')
    
    展开全文
  • 主要给大家介绍了关于Python时间序列缺失值(日期缺失填充)的处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • python缺失值填充

    千次阅读 多人点赞 2019-04-26 15:50:12
    1. 用固定值填充 对于特征值缺失的一种常见的方法就是可以用固定值来填充。 data['分数'] = data['分数'].fillna('-1') 2. 用均值填充 对于数值型的特征,其缺失值也可以用未缺失数据的均值填充。 data['分数...

    1. 用固定值填充

    对于特征值缺失的一种常见的方法就是可以用固定值来填充。

    data['分数'] = data['分数'].fillna('-1')

    2. 用均值填充

    对于数值型的特征,其缺失值也可以用未缺失数据的均值填充。

    data['分数'] = data['分数'].fillna(data['分数'].mean()))

    3. 用众数填充

    与均值类似,可以用未缺失数据的众数来填充缺失值。

    data['分数'] = data['分数'].fillna(data['分数'].mode()))

    4. 用上下数据进行填充

    用前一个数据进行填充

    data['分数'] = data['分数'].fillna(method='pad')

    用后一个数据进行填充

    data['分数'] = data['分数'].fillna(method='bfill')

    5. 用插值法填充

    data['分数'] = data['分数'].interpolate()

    6. 用KNN进行填充

    from fancyimpute import BiScaler, KNN, NuclearNormMinimization, SoftImpute
    dataset = KNN(k=3).complete(dataset)

    如果对你有帮助,请点下赞,予人玫瑰手有余香! 

    展开全文
  • 关于缺失值填充的方法

    千次阅读 2019-05-07 09:06:30
    关于缺失值填充的方法 转自:https://blog.csdn.net/lglfa/article/details/80566523 背景 很多数据不可避免的会遗失掉,或者采集的时候采集对象不愿意透露,这就造成了很多NaN(Not a Number)的出现。这些NaN会...
  • pandas缺失值填充

    2021-08-22 23:00:46
    pandas缺失值填充 作用: 填充缺失值 DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs) 主要参数: value:需要用什么值去填充缺失值 axis:确定填充维度...
  • 安利一个缺失值填充的包fancyimpute

    千次阅读 2020-07-25 15:21:00
    这两天看比赛, 发现了一个比较不错的包可以用来缺失值填充, 那就是fancyimpute, 比赛中数据的存在缺失貌似已经成了家常便饭了, 而找到正确的方式去填充这些缺失值就显得尤为重要, 关于缺失值处理的方式,之前...
  • 缺失值处理----缺失值填充方法总结

    千次阅读 2020-10-01 16:44:24
    1. 用固定值填充 对于特征值缺失的一种常见的方法就是可以用固定值来填充,例如0,9999, -9999, 例如下面对灰度分这个特征缺失值全部填充为-99 data['灰度分'] = data['灰度分'].fillna('-99') 2. 用均值填充 对于...
  • ML之FE:特征工程中常用的一些处理手段(缺失值填充、异常值检测等)及其对应的底层代码的实现 目录 特征工程中常用的一些处理手段(缺失值填充、异常值检测等)及其对应的底层代码的实现 缺失值填充 fillna(self, value...
  • 数据分析--缺失值填充的几种方法

    千次阅读 2020-03-18 16:57:09
    常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。 1 数据集介绍: 数据集...
  • numpy处理缺失值 填充

    千次阅读 2019-07-21 11:43:56
    import numpy as np def fill(t): for i in range(t.shape[1]): temp_col = t[:,i] nan_num = np.count_nonzero(temp_col!=temp_col) if nan_num != 0: temp...
  • #### 用均值填充其连续型的缺失值,用众数填充分类变量的缺失值 def dataDealNan(df_data): # O_index 连续型变量名称; C_index:离散型变量名称 O_index , C_index = distinguish_Char_Num(df_data)
  • PySpark时间序列缺失值填充与异常值修复
  • 机器学习之数据预处理——缺失值填充

    千次阅读 多人点赞 2020-10-19 16:04:28
    上一节给大家回顾了Pandas进行数据预处理会用到哪些方法,学习缺失值简单的填充方法(0、unknown、均值等),这节课学习线性回归法填补缺失值和拉格朗日插值法。 1.线性回归法填补缺失值 #随机生成一个线性回归...
  • 今天小编就为大家分享一篇pandas 使用均值填充缺失值列的小技巧分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python缺失值填充的几种方法

    万次阅读 多人点赞 2019-06-14 10:37:41
    常见的数据缺失填充方式分为很多种,比如删除法、均值法、回归法、KNN、MICE、EM等等。R语言包中在此方面比较全面,python稍差。 python目前已有的两种常见的包,第一个是impyute,第二个是fancyimpute。比如...
  • 通过对基于K-means聚类的缺失值填充算法的改进,文中提出了基于距离最大化和缺失数据聚类的填充算法。首先,针对原填充算法需要提前输入聚类个数这一缺点,设计了改进的K-means聚类算法:使用数据间的最大距离确定...
  • 之前的某次面试中,聊到了缺失值填充方法,经面试官指点学到了一些技能,下面简要总结一下。 常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这...
  • Pandas 缺失值填充的方法

    千次阅读 2019-11-10 19:32:10
    真实数据往往某些变量会有缺失值。 这里,cabin有超过70%以上的缺失值,我们可以考虑直接丢掉这个变量。 – 删除某一列数据 像Age这样的重要变量,有20%左右的缺失值,我们可以考虑用中位值来填补。-- 填补缺失值 ...
  • Pandas的缺失值填充

    千次阅读 2019-01-23 16:10:12
    在写例子的时候用到了缺失值填充,于是想用一下method这个参数传入’ffill’来实现. 但是发现,这个填充方法并不全如我意. 仔细实验后发现,这其中有些需要注意的点. fill_test = Series([111, 222, 533, 644, 299], ...
  • KNN估计数据缺失值填充—KNN估计一、基本思想二、步骤1.导入数据2.查看空缺值3.取出要分析的数据4.计算平均值5.计算标准差6.规范化7.计算欧几里得距离8.最优解9.画图总结 数据缺失值填充—KNN估计 学生一枚 一、...
  • 今天小萌新复习数据挖掘课程的知识点,当看到缺失值填充(imputation of missing values)部分,被sklearn库中的transform函数搞晕了。看了几篇前辈们的博客,来这里总结一下。请大家指正。 缺失值填充(imputation ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,098
精华内容 11,239
关键字:

缺失值填充