KNN填充

什么是KNN填充

当数据集缺失数据时候,基于K临近算法进行数据补充的一种方法。
使用数据集中与确实样本最相似的K个样本的值进行填充

工作原理

对于一个有缺失值的样本,算法找到与其最相似的K个样本(也就是K个最邻近的点),来估算当前的缺失值

主要步骤

  1. 选择K值:决定利用几个临近点来估算。K的取值可以依赖交叉验证或经验所得。
  2. 计算距离:计算缺失样本与其他样本的距离,通常是欧氏距离。将不包含缺失这一列的其他列的所有值与另一个点做计算。
  3. 选择最邻近的点:选择最邻近的K个点。
  4. 填充缺失值:根据这K个点来估算缺失值。例如众数,中位数,平均数等。

具体实现

scikit-learn中,可以直接使用KNNImputer函数

# 创建 KNNImputer 对象并指定最近邻数
imputer = KNNImputer(n_neighbors=2)

自己来写过程:
当只选择一个点的时候

def KNNImputers(df, k):
    '''
    :param df: 缺失的df
    :param k: 几个临近点
    :return: 补充后的
    '''
    result=copy.deepcopy(df)
    base=copy.deepcopy(df.iloc[:,:-1])#选择除去目标列的所有
    #计算每一个数据中与缺失数据组的欧氏距离
    for row in df.index:
        k=1
        if pd.isnull(result.iloc[row,-1]):#若目标缺失部分为空
            dis=np.linalg.norm((base-base.iloc[row,:]),axis=1)#计算欧氏距离
            #将每一个feature的距离arg,然后排序,找到最小的那个的索引
            index=dis.argsort()[k]
            #看选中的这一个目标参数是否是空的,直到不空为止
            while pd.isnull(df.iloc[index,-1]) and k<dis.shape[0]:
                k+=1
                index=dis.argsort()[k]
            if k<dis.shape[0]:
                val=df.iloc[index,-1]
                result.iloc[row,-1]=val
    return result

使用场景

适用于缺少值比较少且数据集不太大的情况。因为大型数据集寻找临近值的过程会很耗时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值