缺失值处理方法

文章介绍了两种处理数据缺失值的方法:一是基于拉格朗日插值法,通过定义列向量插值函数对数据进行插值;二是利用随机森林,将有缺失值的列作为标签,其他特征列作为输入,用随机森林回归模型预测缺失值。这两种方法分别在插值前后展示了数据的变化。
摘要由CSDN通过智能技术生成

主要记录拉格朗日和随机森林处理缺失值

一、插值法

拉格朗日插值法

#自定义列向量插值函数
#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_column(s, n, k=5):
    y = s.reindex(list(range(n-k, n)) + list(range(n+1, n+1+k)))
    y = y[y.notnull()] #剔除空值
    return lagrange(y.index, list(y))(n) #插值并返回拉格朗日插值结果

    #逐个元素判断是否需要插值
for i in data.columns:
    for j in range(len(data)):
        if (data[i].isnull())[j]==True: #如果为空即插值。
            #       data[i][j] = ployinterp_column(data[i], j)
            data.loc[j,i] = ployinterp_column(data[i], j)

                    插值前                                                                                插值后

二、随机森林插值

基本思想:我们将包含缺失值的列当做标签,如果有很多列都有缺失值,那么按照每一列的缺失值的从小到大来填补,当其他列作为特征时若存在缺失值,使用0先填充

from sklearn.impute import SimpleImputer
from sklearn.ensemble import RandomForestRegressor

data_copy=data.copy()
# 按照缺失量从小到大进行排序
sindex=np.argsort(data_copy.isnull().sum()).values

# 进行缺失值的填补,利用随机上呢了进行填补缺失值
for i in sindex:
    if data_copy.iloc[:,i].isnull().sum()==0:
        continue
    df=data_copy
    fillc=df.iloc[:,i]
    #获取除待填充列的其他特征列
    df=df.iloc[:,df.columns!=df.columns[i]]
    # 使用0填充特征列df中的缺失值
    df_0=SimpleImputer(missing_values=np.nan
                      ,strategy='constant'
                      ,fill_value=0
                      ).fit_transform(df)
    # 获取训练集的标签,待填补列非空数据作为训练集的标签
    Ytrain=fillc[fillc.notnull()]
    # 获取待预测的标签
    Ytest=fillc[fillc.isnull()]
    
    # 获取训练集的特征
    Xtrain=df_0[Ytrain.index,:]
    Xtest=df_0[Ytest.index,:]
    
    # 使用随机森林算法进行缺失值填补
    rfc=RandomForestRegressor()
    rfc.fit(Xtrain,Ytrain)
    Ypredict=rfc.predict(Xtest)
    data_copy.loc[data_copy.iloc[:,i].isnull(),data_copy.columns[i]]=Ypredict
    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值