缺失值填充的算法:樹模型


轉載: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM