zoukankan      html  css  js  c++  java
  • 缺失值填充的算法:树模型

    转载:https://www.toutiao.com/i6606293133602849284/

    转载:https://blog.csdn.net/Q2605894893/article/details/81327027

    一般的缺失值填充方法:

    连续变量:中位数、平均数

    离散变量:众数

    上述的方法会造成数据集本身分布的改变,引入更多偏差。另外的一种方式是利用模型学习数据集本身的结构:K-means插值、混合高斯插值等,下面我们介绍一种树模型的方法:

    def fill_missing_value_by_rf(feat_ls=[],miss_name="",df):
        #一般不将标签列作为特征,因为预测集中没有标签
        #本问题可以分为全部没有缺失值的数据作为训练集,缺失列没有缺失值的数据作为训练集
        """
        param feat_ls:list,全部的特征名称列表或者想要利用的特征名称列表
        param miss_name:str,需要填充缺失值的列名
        param df :DataFrame,数据集
        return :    
        df:DataFrame, 填充了缺失值的数据集
        rf:isinstance,训练后的模型
        """
        
        df_feature = df[feat_ls]    
        #按照需要填充缺失值的列分成两部分:
        #一部分没有缺失(作为训练集),一部分有缺失(作为预测集)
        
        not_null_df = df_feature[df_feature[miss_name].notnull()]
        is_null_df  = df_feature[df_feature[miss_name].isnull()]
        
        #分割训练集的特征和目标
        feat_ls_copy = feat_ls.copy()
        
        X_train = not_null_df[feat_ls_copy.remove(miss_name)]
        y_train = not_null_df[miss_name]
        
        #from sklearn.ensemble import RandomForestClassifier
        from sklearn.ensemble import RandomForestRegressor
        
        rf = RandomForestRegressor(random_state=0,n_estimators=1000,n_jobs=-1)
        rf.fit(X_train.values,y_train.values)
        
        #用得到的预测结果填补原缺失数据    
        df.loc[(df[miss_name].isnull()),miss_name]=rf.predict(is_null_df[feat_ls_copy])
        
        return df,rf
  • 相关阅读:
    Boost Log : Log record formatting
    Boost Log : Attributes
    PLSA的EM推导
    特征处理:一点经验
    海量推荐系统:mapreduce的方法
    操作系统之存储器管理
    maredit测试
    算法:链表
    c++特别要点:多态性与虚函数
    sizeof的用法与字节对齐
  • 原文地址:https://www.cnblogs.com/wzdLY/p/9736504.html
Copyright © 2011-2022 走看看