精华内容
下载资源
问答
  • 缺失值填充

    2017-06-14 10:30:00
    5种超级棒的缺失值填充R算法包,需要好好实践一下。 List of R Packages MICE Amelia missForest Hmisc mi So, which i...

    https://www.analyticsvidhya.com/blog/2016/03/tutorial-powerful-packages-imputing-missing-values/

     

    5种超级棒的缺失值填充R算法包,需要好好实践一下。

    List of R Packages

    1. MICE
    2. Amelia
    3. missForest
    4. Hmisc
    5. mi

    So, which is the best of these 5 packages ? I am sure many of you would be asking this! Having created this tutorial, I felt Hmisc should be your first choice of missing value imputation followed by missForest and MICE.

    Hmisc automatically recognizes the variables types and uses bootstrap sample and predictive mean matching to impute missing values. You don’t need to separate or treat categorical variable, just like we did while using MICE package. However, missForest can outperform Hmisc if the observed variables supplied contain sufficient information.

    转载于:https://www.cnblogs.com/xinping-study/p/7007533.html

    展开全文
  • 缺失值填充的几种方法

    万次阅读 多人点赞 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
    默认值0 0.70516717 0.59689922
    均值(mean) 0.70186335 0.67768595
    中位数(median) 0.70826833 0.67479675
    众数(mode) 0.70479134 0.68852459
    上一个数据(pad) 0.70409712 0.62711864
    下一个数据(bfill) 0.66981132 0.60169492
    插值 0.69018405 0.61333333
    KNN_3 0.71076923 0.66393443
    KNN_6 0.70897833 0.68852459
    KNN_10 0.70479134 0.68032787
    随机森林_feature3 0.571428571 0.4
    随机森林_feature46 0.585139319 0.41509434

    (3)实验小结

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

     

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

    参考文献

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

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

    展开全文
  • 原标题:在R语言中进行缺失值填充:估算缺失值原文链接:http://tecdat.cn/?p=8287介绍缺失值被认为是预测建模的首要障碍。因此,掌握克服这些问题的方法很重要。估算缺失值的方法的选择在很大程度上影响了模型的...

    原标题:在R语言中进行缺失值填充:估算缺失值

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

    介绍

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

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

    您是否知道R具有用于遗漏价值估算的可靠软件包?

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

    链式方程进行的多元插补

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

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

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

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

    确切地说,此软件包使用的方法是:

    PMM(预测均值匹配)–用于数字变量

    logreg(逻辑回归)–对于二进制变量(具有2个级别)

    polyreg(贝叶斯多元回归)–用于因子变量(> = 2级)

    比例赔率模型(有序,> = 2个级别)

    现在让我们实际了解它。

    path setwd(path)\n\n#load data\n> data summary(iris)\n\n#Generate 10% missing values at Random \n> iris.mis summary(iris.mis)\n","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet">> path setwd(path) #load data > data summary(iris) #Generate 10% missing values at Random > iris.mis summary(iris.mis)

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

    iris.mis summary(iris.mis)\n\n ","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet">#删除类别变量 > iris.mis summary(iris.mis)

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

    md.pattern(iris.mis)","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet">> md.pattern(iris.mis)

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

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

    mice_plot > mice_plot

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

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

    summary(imputed_Data)\n\nMultiply imputed data set\nCall:\n Number of multiple imputations: 5\nMissing cells per column:\nSepal.Length Sepal.Width Petal.Length Petal.Width \n13 14 16 15 \nImputation methods:\nSepal.Length Sepal.Width Petal.Length Petal.Width \n\"pmm\" \"pmm\" \"pmm\" \"pmm\" \nVisitSequence:\nSepal.Length Sepal.Width Petal.Length Petal.Width \n1 2 3 4 \nPredictorMatrix:\n Sepal.Length Sepal.Width Petal.Length Petal.Width\nSepal.Length 0 1 1 1\nSepal.Width 1 0 1 1\nPetal.Length 1 1 0 1\nPetal.Width 1 1 1 0\nRandom generator seed value: 500","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"> > summary(imputed_Data) 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

    这是使用的参数的说明:

    m – 估算数据集

    maxit – 插补缺失值的迭代次数

    method –是指插补中使用的方法。我们使用了预测均值匹配。

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

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

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

    多重插补

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

    它做出以下假设:

    数据集中的所有变量均具有多元正态分布(MVN)。它使用均值和协方差汇总数据。

    丢失的数据本质上是随机的(随机丢失)

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

    现在让我们实际了解它。

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

    amelia_fit$imputations[[1]]\n> amelia_fit$imputations[[2]]\n> amelia_fit$imputations[[3]]\n> amelia_fit$imputations[[4]]\n> amelia_fit$imputations[[5]]","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"> #access imputed outputs > 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\n\n#export the outputs to csv files\n> write.amelia(amelia_fit, file.stem = \"imputed_data_set\")","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet">> amelia_fit$imputations[[5]]$Sepal.Length #export the outputs to csv files > write.amelia(amelia_fit, file.stem = "imputed_data_set")

    随机森林

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

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

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

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

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

    iris.err iris.err\n\nNRMSE PFC \n0.1535103 0.0625000","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet">#comparing actual data accuracy > iris.err iris.err NRMSE PFC 0.1535103 0.0625000

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

    非参数回归方法

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

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

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

    > impute_arg

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

    impute_arg$imputed$Sepal.Length","classes":{"has":1}}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet">#check imputed variable Sepal.Length > impute_arg$imputed$Sepal.Length

    带有诊断的多重插补

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

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

    它可以对插补模型进行图形诊断,并可以实现插补过程的收敛。

    它使用贝叶斯版本的回归模型来处理分离问题。

    插补模型规范类似于R中的回归输出

    它会自动检测数据中的不规则性,例如变量之间的高共线性。

    而且,它在归算过程中增加了噪声,以解决加性约束的问题。

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

    尾注

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

    责任编辑:

    展开全文
  • 缺失值填充 缺失值:缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。(百度词条) 1.1 缺失的类型 1.1.1完全随机缺失(missing ...
  • 数据处理之缺失值填充

    点赞、关注再看,养成良好习惯
    Life is short, U need Python
    初学Python,快来点我吧
    在这里插入图片描述


    1. 概述

    首先对数据缺失的原因、类型以及处理方法做一个简单地总结,如下图所示:

    在这里插入图片描述

    2. 直接删除法

    当缺失值的个数只占整体很小一部分的时候,可直接删除缺失值(行)。但是如果缺失值占比比较大,这种直接删除缺失值的处理方法就会丢失重要信息。

    直接删除法处理缺失值时,需要检测样本总体中缺失值的个数。Python中统计缺失值的方法如下(下面结合具体数据集,直接上代码):

    import numpy as np
    import pandas as pd
    data = pd.read_csv('1.csv')    # 需要具体数据(公开的海藻数据集)请留言,并附上邮箱!
    data.head()
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    null_all = data.isnull().sum()      # 检测缺失值个数(方法1)
    null_all
    
    • 1
    • 2
    data.info()                         # 检测缺失值个数(方法2)
    
    • 1
    # new_data = data.dropna()                       # 1--删除存在缺失值的行
    # new_data = data.dropna(subset=['C1','Chla'])   # 2--删除指定列存在缺失值的行
    new_data = data.dropna(thresh=15)                # 3--删除行属性值不足k个的行(即删除缺失元素比较多的行-->n-15)
    new_data.info()
    
    • 1
    • 2
    • 3
    • 4

    3. 前填充/后填充

    import numpy as np
    import pandas as pd
    data = pd.read_csv('1.csv')  
    data[50:60]       # 展示缺失值情况
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    data = data.fillna(method='ffill')    # ffill---前填充;bfill--后填充
    data[50:60]
    
    • 1
    • 2

    在这里插入图片描述


    4. 均值、众数、中位数填充

    通常可以根据样本之间的相似性(中心趋势)填补缺失值,通常使用能代表变量中心趋势的值进行填补,代表变量中心趋势的指标包括 平均值(mean)、中位数(median)、众数(mode) 等,那么我们采用哪些指标来填补缺失值呢?
    在这里插入图片描述

    (4.1)方法一(.fillna()

    import numpy as np
    import pandas as pd
    data = pd.read_csv('1.csv')  
    

    data[‘C1’] = data[‘C1’].fillna(data[‘C1’].mean()) # 均值填充:.mean()—>.median()—>.mode()
    data[50:60]

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    注:当使用众数进行填充时,需特别注意众数不存在或者多于一个的情况!

    (4.2)方法二(SimpleImputer

    SimpleImputer 提供了缺失数值处理的基本策略,比如使用缺失数值所在行或列的均值、中位数、众数来替代缺失值。
    在这里插入图片描述

    import numpy as np
    import pandas as pd
    data = pd.read_csv('1.csv') 
    

    from sklearn.preprocessing import Imputer # scikit-learn (较早版本)

    from sklearn.impute import SimpleImputer # scikit-learn 0.22.2(最新版)

    imputer = SimpleImputer(strategy=‘mean’)
    imputer = imputer.fit(data.iloc[:,3:].values)
    imputer_data = pd.DataFrame(imputer.transform(data.iloc[:,3:].values),columns=data.columns[3:])

    imputer_data[53:64]

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    5. 插值法

    interpolate() 插值法,计算的是缺失值前一个值和后一个值的平均数。

    import numpy as np
    import pandas as pd
    data = pd.read_csv('1.csv') 
    

    data[‘C1’] = data_5[‘C1’].interpolate()
    data[53:63]

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    6. KNN填充(均值)

    为了实现KNN填充,我们先通过其他方法处理缺失值比较少的数据(因为该方法必须借助于其他非缺失数据寻找最邻近的数据,然后进行加权平均求值填充的),得到如下特征数据:

    (6.1)from fancyimpute import KNN

    首先需要安装第三方包----fancyimpute,此包的安装比较费劲(尤其在windows下,这里的坑有点深啊)!
    【1】包的下载(7包+1软件)

    • 链接:https://pan.baidu.com/s/1CUfiaEyE-k4G560L2JsOYQ
    • 提取码:nriv
    • 提示:此包需要与Python版本保持一致(Python3.6),其它版本点击我下载!

    【2】包的安装(for windows)

    • pip install D:\fancyimpute\包1
    • pip install D:\fancyimpute\包2
    • pip install D:\fancyimpute\包3
    • pip install D:\fancyimpute\包4
    • pip install D:\fancyimpute\包5
    • pip install D:\fancyimpute\包6
    • pip install D:\fancyimpute\fancyimpute-0.5.4.tar.gz

    【3】可能会出现如下报错

    • ERROR: tensorflow 2.1.0 has requirement scipy==1.4.1; python_version >= “3”, but you’ll have scipy 1.1.0 which is incompatible.
    • ERROR: tensorflow 2.1.0 has requirement six>=1.12.0, but you’ll have six 1.11.0 which is incompatible.
    • ERROR: Cannot uninstall ‘wrapt’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

    【4】不要怕,继续往下安装

    • pip install --upgrade scipy==1.4.1
    • pip install --upgrade six==1.12.0
    • pip install wrapt --ignore-installed

    【5】哇塞,咋还有可能出错

    • ImportError: Could not find the DLL(s) ‘msvcp140_1.dll’

    【6】没办法,继续安装

    • 继续安装网盘下载中的vc_redist.x64.exe 就好了

    哎,终于可以继续写代码了!!!

    data = pd.read_csv('1.csv')
    

    插值填充缺失值少的特征

    data[‘mxPH’] = data[‘mxPH’].interpolate()
    data[‘MNO2’] = data[‘MNO2’].interpolate()
    data[‘NO3’] = data[‘NO3’].interpolate()
    data[‘NH4’] = data[‘NH4’].interpolate()
    data[‘Opo4’] = data[‘Opo4’].interpolate()
    data[‘PO4’] = data[‘PO4’].interpolate()

    data.info()

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    new_data = data.iloc[:,3:11]
    new_data[53:64]
    
    • 1
    • 2

    在这里插入图片描述

    from fancyimpute import KNN    # 事先安装:fancyimpute
    

    fill_knn = KNN(k=3).fit_transform(new_data)
    new_data = pd.DataFrame(fill_knn,columns=data.columns[3:11])

    new_data[53:64]

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    (6.2)from sklearn.neighbors import KNeighborsRegressor

    data = pd.read_csv('1.csv')
    

    插值填充缺失值少的特征

    data[‘mxPH’] = data[‘mxPH’].interpolate()
    data[‘MNO2’] = data[‘MNO2’].interpolate()
    data[‘NO3’] = data[‘mxPH’].interpolate()
    data[‘NH4’] = data[‘MNO2’].interpolate()
    data[‘Opo4’] = data[‘mxPH’].interpolate()
    data[‘PO4’] = data[‘MNO2’].interpolate()

    C1_data = data[[‘mxPH’,‘MNO2’, ‘NO3’, ‘NH4’, ‘Opo4’, ‘PO4’, ‘C1’]]
    C1_data[53:64]

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    known_C1 = C1_data[C1_data.C1.notnull()]
    unknown_C1 = C1_data[C1_data.C1.isnull()]、
    

    import numpy as np

    y = known_C1.iloc[:, 6]
    y_train = np.array(y)

    X = known_C1.iloc[:, :6]
    X_train = np.array(X)

    X_test = np.array(unknown_C1.iloc[:, :6])
    y_test = np.array(unknown_C1.iloc[:, 6])

    from sklearn.neighbors import KNeighborsRegressor
    clf = KNeighborsRegressor(n_neighbors = 6, weights = “distance”).fit(X_train,y_train)

    y_test = clf.predict(X_test)
    y_test

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    7. 随机森林填充

    上面啰嗦了很多了,直接上代码吧!

    data = pd.read_csv('1.csv')
    

    data.mxPH = data.mxPH.fillna(data.mxPH.mean())
    data.MNO2 = data.MNO2.fillna(data.MNO2.mean())

    C1_data = data[[‘mxPH’,‘MNO2’, ‘C1’]]
    C1_data[53:64]

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    known_C1 = C1_data[C1_data.C1.notnull()]
    unknown_C1 = C1_data[C1_data.C1.isnull()]
    

    import numpy as np
    y = known_C1.iloc[:, 2]
    y = np.array(y)

    X = known_C1.iloc[:, :2]
    X = np.array(X)

    from sklearn.ensemble import RandomForestRegressor

    rfr = RandomForestRegressor(random_state=0, n_estimators=200, n_jobs=-1)
    rfr.fit(X, y)

    data.loc[(data.C1.isnull()), ‘C1’] = rfr.predict(unknown_C1.iloc[:, :2])
    data[53:64]

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    8. 小结

    • 暂时先写到这吧,有点累了,休息!!(后续再继续补充新方法)
    • 类似的下一篇准备介绍一下数据特征工程的一些方法,让我们一起期待吧!!

    • 写作不易,切勿白剽
    • 博友们的点赞关注就是对博主坚持写作的最大鼓励
    • 持续更新,未完待续…
    展开全文
  • EDA分析-缺失值填充

    2020-03-24 17:37:41
    缺失值填充 转自https://www.cnblogs.com/magle/articles/6110195.html 数据缺失机制 在对缺失数据进行处理前,了解数据缺失的机制和形式是十分必要的。将数据集中不含缺失值的变量(属性)称为完全变量,数据集中...
  • 常见的缺失值处理方式有,过滤、填充缺失值的判断 pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。 DataFrame.dropna(axis=0, how='any', ...
  • 今天小萌新复习数据挖掘课程的知识点,当看到缺失值填充(imputation of missing values)部分,被sklearn库中的transform函数搞晕了。看了几篇前辈们的博客,来这里总结一下。请大家指正。 缺失值填充(imputation ...
  • python缺失值填充

    千次阅读 多人点赞 2019-04-26 15:50:12
    1. 用固定值填充 对于特征值缺失的一种常见的方法就是可以用固定值来填充。 data['分数'] = data['分数'].fillna('-1') 2. 用均值填充 对于数值型的特征,其缺失值也可以用未缺失数据的均值填充。 data['分数...
  • 在我们进行数据分析时,通常会遇到各种数据缺失...对某一列的缺失值,采用该列的平均值填充 df.fillna(method=a.mean(),inplace=True) 此处重点讲解一下fillna的参数,后面不做说明 fillna(value=None, method=...
  • ML之FE:特征工程中常用的一些处理手段(缺失值填充、异常值检测等)及其对应的底层代码的实现 目录 特征工程中常用的一些处理手段(缺失值填充、异常值检测等)及其对应的底层代码的实现 缺失值填充 fillna(self, value...
  • 1. 用固定值填充 对于特征值缺失的一种常见的方法就是可以用固定值来填充,例如0,9999, -9999, 例如下面对灰度分这个特征缺失值全部填充为-99 data['灰度分'] = data['灰度分'].fillna('-99') 2. 用均值填充 对于...
  • 点赞、关注再看,养成良好习惯Life is short, U need Python初学Python,...但是如果缺失值占比比较大,这种直接删除缺失值的处理方法就会丢失重要信息。直接删除法处理缺失值时,需要检测样本总体中缺失值的个数。P...
  • 关于缺失值填充的方法

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

    千次阅读 2017-12-29 15:32:10
    最近逼事一堆,但不得不做,谁让自己XX呢? Stop complaining, and keep ... R进行缺失值填充library(readxl) library(mice) library(proto) factory ("factory_mice.xls") # factory ("factory_mice.csv") # 观测f
  • fillna(value)参数:value说明:用于填充缺失值的标量值或字典对象#通过常数调用fillna书写方式:df.fillna(0) #用0替换缺失值#通过字典调用fillna书写方式:df.fillna({1:0.5,3:-1})fillna(value,inplace=True...
  • 之前的某次面试中,聊到了缺失值填充方法,经面试官指点学到了一些技能,下面简要总结一下。 常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这...
  • 缺失值填充:关于年龄特征

    千次阅读 2018-11-04 17:40:49
    缺失值填充这回事我们第一能想到的就是使用0进行填充,但是如果是年龄的话直接使用0进行填充就有点不太靠谱了,那么怎么办呢? 情况一:全样本均值填充 如果整个样本群体的年龄方差不大,比如整个样本来源于初中生,...
  • 数据分析--缺失值填充的几种方法

    千次阅读 2020-03-18 16:57:09
    常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。 1 数据集介绍: 数据集...
  • 1、给定一个数据集...利用“全局常量”、“均值或者中位数”来填充缺失值。noise-data-1.txt:5.1 3.5 1.4 0.24.9 3 1.4 0.24.7 3.2 1.3 0.24.6 3.1 1.5 0.25 3.6 1.4 0.25.4 3.9 1.7 0.44.6 3.4 1.4 0.35 3.4 1...
  • python缺失值填充的几种方法

    万次阅读 多人点赞 2019-06-14 10:37:41
    常见的数据缺失填充方式分为很多种,比如删除法、均值法、回归法、KNN、MICE、EM等等。R语言包中在此方面比较全面,python稍差。 python目前已有的两种常见的包,第一个是impyute,第二个是fancyimpute。比如...
  • 缺失值被认为是预测建模的首要障碍。因此,掌握克服这些问题的方法很重要。 估算缺失值的方法的选择在很大程度上影响了模型的预测能力。在大多数统计分析方法中,按列表删除是用于估算缺失值的默认方法。但是,它不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,634
精华内容 653
关键字:

缺失值填充