精华内容
下载资源
问答
  • 缺失值填充的几种方法

    千次阅读 2019-05-21 13:28:30
    参考博文:缺失值填充的几种方法
    展开全文
  • python缺失值填充的几种方法

    万次阅读 多人点赞 2019-06-14 10:37:41
    常见数据缺失填充方式分为很多,比如删除法、均值法、回归法、KNN、MICE、EM等等。R语言包中在此方面比较全面,python稍差。 python目前已有常见包,第一个是impyute,第二个是fancyimpute。比如...

    缺失值的产生机制

    缺失值可分为两类:一类是这个值实际存在但是没有被观测到,例如客户的性别;另一类是这个值实际就不存在,例如,在调查顾客购买的洗发液品牌时,如果某位顾客根本没有购买任何洗发液,那么这位顾客购买的洗发液品牌缺失。如何处理缺失值是一个很复杂的课题,有兴趣的读者可以参阅这方面的专著。

    缺失值的产生有三种机制:

    1.完全随机缺失(MissingCompletelyatRandom)

    某个变量是否缺失与它自身的值无关,也与其他任何变量的值无关。例如,由于测量设备出故障导致某些值缺失。

    2.随机缺失(MissingatRandom)

    在控制了其他变量已观测到的值后,某个变量是否缺失与它自身的值无关。例如,人们是否透露收入可能与性别、教育程度、职业等因素有关系。

    如果这些因素都观测到了,而且尽管收入缺失的比例在不同性别、教育程度、职业的人群之间有差异,但是在每一类人群内收入是否缺失与收入本身的值无关,那么收入就是随机缺失的。

    3.非随机缺失(MissingNotatRandom)

    即使控制了其他变量已观测到的值,某个变量是否缺失仍然与它自身的值有关。例如,在控制了性别、教育程度、职业等已观测因素之后,如果收入是否缺失还依赖于收入本身的值,那么收入就是非随机缺失的。

    缺失值的处理

    常见的数据缺失填充方式分为很多种,比如删除法、均值法、回归法、KNN、MICE、EM等等。R语言包中在此方面比较全面,python稍差。
    python目前已有的两种常见的包,第一个是impyute,第二个是fancyimpute。比如fancyimpute中集成了很多方式,包括均值、众数、频数填充,KNN填充、MCMC填充等。

    一、直接填充

    0值/-1值填充

    data = pd.read_csv(path,encoding='gbk')
    data = data.fillna(-1)
    

    单变量填补

    用单一变量的均值/中位数/众数/二分之一最小值/零值进行补值,这种方法会导致数据分布的偏移,方差偏小,PCA上会看到一条补值导致的直线等问题。
    这种方法仅在缺失数据集满足正态分布的情况下可以达到比较好的效果,而在现实应用中,往往连对数据具一定的先验知识都很难做到,而现实数据往往又并不是简单的正态分布,因此这一方法不可避免的将带来数据的各种统计参数的扭曲。

    二、插值填充

    所谓的插值法就是通过两点(x0,y0),(x1,y1)估计中间点的值,假设y=f(x)是一条直线,通过已知的两点来计算函数f(x),然后只要知道x就能求出y,以此方法来估计缺失值。当然我们也可以假设f(x)不是直线,而是其他函数。

    data = pd.read_csv(path,encoding='gbk')
    for f in data:  # 插值法填充
        data[f] = data[f].interpolate()
        data.dropna(inplace=True)
    

    interpolate函数默认采用线性插值,即假设函数是直线形式,缺失值用前一个值和后一个值的平均数填充。
    还可以根据数字来进行插值,用到参数method=‘values’,此时索引的数值实际上就是用于估计y的x值。
    如果index是时间,我们还可以用method=time来插值。不过当dataframe是多重索引(multiIndex)时,只能用线性插值。
    此外还可以通过参数设定采用多项式插值填充等方式。
    参考:
    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.interpolate.html
    https://jingyan.baidu.com/article/a501d80cf7c9c3ec620f5e5a.html

    三、KNN预测缺失值进行填充

    KNN预测的步骤是选择出其他不存在缺失值的列,同时去除掉需要预测缺失值的列存在缺失值的行,然后计算距离。
    如果缺失值是离散的,使用K近邻分类器,投票选出K个邻居中最多的类别进行填补;如果为连续变量,则用K近邻回归器,拿K个邻居中该变量的平均值填补。

    这里使用的是fancyimpute库,安装的时候需要visual C++环境。

    from fancyimpute import KNN
    
    data = pd.read_csv(path,encoding='gbk')
    data = pd.DataFrame(KNN(k=6).fit_transform(data)) 
    data.columns = ['sex','age','label']  # fancyimpute填补缺失值时会自动删除列名
    

    注意fancyimpute的KNN填补会自动去除DataFrame数据的列名,所以如果后续操作对列名有要求,需要重新添加列名。

    四、Kmeans预测缺失值进行填充

    五、可视化

    见本人的另一篇博文

    参考网址:
    面对有大量缺失值的数据应该怎样处理比较合理? - 晔无殊的回答 - 知乎
    MetImp 1.2 (开源的的缺失值补值软件)
    缺失值处理方法综述
    缺失值的产生机制
    缺失值的处理(非常好)

    展开全文
  • 数据分析--缺失值填充的几种方法

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

    常见的缺失值填充方法有填充默认值、均值、众数、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) # 划分训练集、测试集
    
    1. 常见的填充方法

    (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']
    
    1. 实验对比

    (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)对比结果

    原文链接:https://blog.csdn.net/jingyi130705008/article/details/82670011

    展开全文
  • 数据集中缺失值填充的几种方法

    千次阅读 2019-10-22 15:40:01
    此处为链接。

    此处为链接

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

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

    千次阅读 2020-10-01 16:44:24
    我们在进行模型训练时,不可避免会遇到某些特征出现空值情况,下面整理了几种填充空值的方法 1. 用固定值填充 对于特征值缺失的一种常见的方法就是可以用固定值来填充,例如0,9999, -9999, 例如下面对灰度分这...
  • 一、固定值填充 df1['Age']=df1['Age'].fillna(20) print(df1.isnull().sum())#输出时该项已经无缺失值 二、均值填充 # 数据需是int或float类型 df['Age'] = df['Age'].fillna(df['Age'] .mean()) 三、众数...
  • python 特征缺失值填充

    2018-08-16 16:43:00
    我们在进行模型训练时,不可避免会遇到某些特征出现空值情况,下面整理了几种填充空值的方法 1. 用固定值填充 对于特征值缺失的一种常见的方法就是可以用固定值来填充,例如0,9999, -9999, 例如下...
  • 此外对缺失值的处理一定要具体问题具体分析,因为缺失值并不意味着数据缺失,缺失本身也是包含信息,所以需要根据不同场景下的缺失值进行合理填充。 目前缺失值的类型,含有缺失值的变量被称为不完全...
  • 常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。 1. 数据集介绍 数据...
  • 训练模型填充空值(fill null)的几种方法

    万次阅读 多人点赞 2018-05-11 13:03:19
    我们在进行模型训练时,不可避免会遇到某些特征出现空值情况,下面整理了几种填充空值的方法 1. 用固定值填充 对于特征值缺失的一种常见的方法就是可以用固定值来填充,例如0,9999, -9999, 例如下面对灰度分...
  • Pandas 提供了一些方法来发现、剔除、替换数据结构中的缺失值,主要包括以下几种。创建一个布尔类型掩码标签缺失值。isnull() 与 isnull() 操作相反。 notnull() 返回一个剔除缺失值的数据。 dropna()返回一个填充...
  • pandas dataframe缺失值(np.nan)处理:识别缺失情况、删除、0值填补、均值填补、中位数填补、加缺失...下面是几种处理数据中缺失值的主要方法。注意:隐藏的缺失值,这里要理解数据集内容含义,比如在某些情况下..
  • 一般而言,有以下几种方法:对所有的缺失值用零填充。前向填充:比如用周一的值填充缺失周二值后向填充:比如用周二的值填充缺失周一值采用n最近邻均值法填充:比如n取2,则用t-2,t-1,t+1,t+2时刻平均值...
  • 5.Pandas处理缺失值

    2020-07-18 18:37:10
    文章目录Pandas处理缺失值如何标记缺失值全局掩码使用标签值Pandas缺失值PythonNone对象浮点数据类型NaNNone与NaN差异处理缺失值发现缺失值剔除缺失值填充缺失值 Pandas处理缺失值 我们在现实生活中真正需要...
  • 用sklearn相关包进行缺失值填充,strategy可以赋值为‘mean’,‘median’,‘most_frequent’,分别代表均值,中位数,众数。 import pandas as pd from sklearn.preprocessing import Imputer train_data...
  • 一般而言,有以下几种方法: 对所有的缺失值用零填充。 前向填充:比如用周一的值填充缺失周二值 后向填充:比如用周二的值填充缺失周一值 采用n最近邻均值法填充:比如n取2,则用t-2,t-1,t+1,t+2时刻...
  • Pandas 提供了一些方法来发现、剔除、替换数据结构中的缺失值,主要包括以下几种。创建一个布尔类型掩码标签缺失值。isnull() 与 isnull() 操作相反。 notnull() 返回一个剔除缺失值的数据。 dropna()返回一个填充...
  • 一般而言,有以下几种方法:对所有的缺失值用零填充。前向填充:比如用周一的值填充缺失周二值后向填充:比如用周二的值填充缺失周一值采用n最近邻均值法填充:比如n取2,则用t-2,t-1,t+1,t+2时刻平均值...
  • 我们在进行模型训练时,不可避免会遇到某些特征出现空值情况,下面整理了几种填充空值的方法 https://www.cnblogs.com/Allen-rg/p/9488249.html 1. 用固定值填充 对于特征值缺失的一种常见的方法就是可以用...
  • 一般而言,有以下几种方法:对所有的缺失值用零填充。前向填充:比如用周一的值填充缺失周二值后向填充:比如用周二的值填充缺失周一值采用n最近邻均值法填充:比如n取2,则用t-2,t-1,t+1,t+2时刻平均值...
  • 可以通过多种方式将Pandas对象联合到一起 ... combine_first:将重叠数据拼接在一起,使用一个对象中的值填充另一个对象中的缺失值 Pandas.DataFrame操作表连接有三方式:merge, join, concat。下面就来说一说这...
  • 本篇博文针对不同类型数据,调用不同pandas内置函数进行处理,infor查看缺失值、isnull与notnull来判断缺失值、dropna删除缺失值、fillna填充缺失值、replace替换缺失值、interpolate插入、drop_duplicates方法...
  • 3. 缺失值填充的几种方法 4. pandas用法大全 5. pandas的替换和部分替换(replace) 6. pandas中DataFrame修改index、columns名的方法 7.pandas.concat实现竖着拼接、横着拼接DataFrame 8.df.loc[]和df.il
  • 数据预处理方法

    万次阅读 2018-03-18 10:46:08
    数据预处理可以提高数据质量,从而有助于提高后续学习过程精度和性能。... 缺失值填充:缺失值对于无监督学习结果会带来影响,通常采用以下方法进行填充: 1) 删除含有缺失值样本:无监督学习过程中不使...
  • 数据质量对谷物大数据的应用产生了重要影响,因此数据清理是... 在本文中,我们优化了数据清理的几个模块,例如实体标识,不一致的数据恢复和缺失值填充。 实验结果表明,本文提出的方法可以提高粮食大数据清洗的效率。
  • sklearn 数据预处理

    2019-04-18 12:35:53
    主要有以下几种方法处理缺失值问题: (1) 如果缺失值在数据集中所占比例非常小,可以删除存在缺失值的行。 (2) 对缺失值进行众数或平均值填充。 (3) 使用机器学习算法对缺失值进行预测,如RandomForest(随机...

空空如也

空空如也

1 2 3
收藏数 48
精华内容 19
关键字:

缺失值填充的几种方法