过程:

  1. 计算两点之间的d
  2. 对距离排序
  3. 选择前K个
  4. 决定类别,因为本身有标签了,

参数1
k: 太小 具有偶偶然性
k: 太大其他距离比较远,难获得有效信息

注意点

  1. 使用zscore or min-max统一量纲
  2. 具有足够的样本,比如K=3 应该有15个样本
  3. 如果是填充,缺失值比例不能过高
  4. 注意离群点,会影响归一化和距离的计算
  5. 因为gene 代谢维度比较高 因此需要提前筛选变量
  6. 注意类别平衡
  7. 选择合适的K
  8. 划分训练集和测试集

KNN填充

  1. KNN: 缺失值小于20%
  2. 注意如果是非随机填充 会引入系统偏差,比如高收入人群不填收入 你如果使用低收入人群填充
    KNN 填充的过程(以 K=2 为例)

第一步:找到“相似”的样本

第二步:选出最近的 K=2 个邻居

  • 最近的是 S3 和 S2

第三步:用这两个样本的 Metabolite_C 均值填充

  • S3 的 Metabolite_C = 2.7
  • S2 的 Metabolite_C = 2.5
填充值 = (2.7 + 2.5) / 2 = 2.6

所以最终 S1 的 Metabolite_C 被填为 2.6

impute包的imput.knn函数;rowmax和colmax是控制的导入数据中行或者列含有缺失值的比例,比如rowmax=0.5是指当某行的数据缺失值占的比例超过了50%,那么这些缺失值就会用整个样本的均值去填充,而不是我们上面提到的根据K个邻居来填充了;colmax=0.8是指任何一列的数据中当缺失值的比例超过了80%,那么计算就会停止并会报出错误。

KNN(K-Nearest Neighbors)填充方法适合处理 MCAR(完全随机缺失)和 MAR(条件随机缺失)这两种缺失机制,但不适合处理 MNAR(非随机缺失)。

  1. MCAR(完全随机缺失, Missing Completely at Random):

    • 数据缺失是完全随机的,与任何观察到或未观察到的变量无关。
    • 由于缺失的数据与其他变量没有关联,KNN 填充可以比较有效地使用观测到的邻近样本来预测缺失值,因此 KNN 填充适合于 MCAR。
  2. MAR(条件随机缺失, Missing at Random):

    • 数据缺失与观察到的变量有关,但与缺失值本身无关。(MAR,依赖于其他观测变量,如时间梯度越长采集越可能出现缺失值)
    • 在这种情况下,KNN 填充可以利用观测到的其他变量的信息,通过最近邻样本的相似性来估计缺失值,所以 KNN 填充也适合于 MAR 情况。
  3. MNAR(非随机缺失, Missing Not at Random):

    • 缺失的数据与其本身有关,即缺失的机制与数据本身的分布相关联。 (MNAR,依赖观测变量自身,如某些蛋白含量在仪器检测限以下)
    • 由于缺失数据的模式与其本身存在关联,KNN 填充在这种情况下不适用,因为它无法推断出数据的缺失机制,而这种机制对MNAR来说至关重要。因此,KNN 填充不适合 MNAR 情况。