【问题标题】:How to impute missing values with KNN如何使用 KNN 估算缺失值
【发布时间】:2019-06-09 09:01:48
【问题描述】:

我正在尝试从我的数据框中估算缺失值,为此我使用了 fancyimpute 库。

from fancyimpute import KNN 
X_filled_knn = KNN(k=3).complete(df_OppLine[['family']])

我有这个错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-28-8475f35fc36a> in <module>()
----> 1 X_filled_knn = KNN(k=3).complete(df_OppLine[['family']])

AttributeError: 'KNN' object has no attribute 'complete'

有什么办法可以帮我解决这个错误吗?

【问题讨论】:

    标签: python python-3.x imputation


    【解决方案1】:

    首先你要把字符串转换成数字数据。

    尝试 one-hot 编码(为每个类别创建一个列,并且值仅为相应类别的 1,其余为 0)。 您也可以尝试序数编码。它为每个类别分配一个值

    from sklearn.preprocessing import OrdinalEncoder
    
    # Create Ordinal encoder
    initialize_encoder=OrdinalEncoder()
    
    # Select non-null values of family column
    family=df_OppLine["family"]
    family_not_null=family[family.notnull()]
    
    # Reshape family_not_null to shape (-1, 1)
    reshaped_vals=family_not_null.values.reshape(-1,1)
    
    # Ordinally encode reshaped_vals
    encoded_vals=initialize_encoder.fit_transform(reshaped_vals)
    
    # Assign back encoded values to non-null values 
    df_OppLine.loc[family.notnull(),"family"]=np.squeeze(encoded_vals)
    

    【讨论】:

      【解决方案2】:

      尝试将其更改为:

      from fancyimpute import KNN
      X_filled_knn = KNN(k=3).fit_transform(df_OppLine[['family']])
      

      【讨论】:

      • 嗯,df_OppLine[['family'] 是一个字符串值...所以我得到了这个错误 ValueError: could not convert string to float: 'HMI SERVICES'
      猜你喜欢
      • 2019-11-02
      • 2018-09-11
      • 2014-06-23
      • 2014-04-12
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 2016-11-10
      相关资源
      最近更新 更多