过程:
- 计算两点之间的d
- 对距离排序
- 选择前K个
- 决定类别,因为本身有标签了,
参数1
k: 太小 具有偶偶然性
k: 太大其他距离比较远,难获得有效信息
注意点
- 使用zscore or min-max统一量纲
- 具有足够的样本,比如K=3 应该有15个样本
- 如果是填充,缺失值比例不能过高
- 注意离群点,会影响归一化和距离的计算
- 因为gene 代谢维度比较高 因此需要提前筛选变量
- 注意类别平衡
- 选择合适的K
- 划分训练集和测试集
KNN填充
- KNN: 缺失值小于20%
- 注意如果是非随机填充 会引入系统偏差,比如高收入人群不填收入 你如果使用低收入人群填充
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(非随机缺失)。
-
MCAR(完全随机缺失, Missing Completely at Random):
- 数据缺失是完全随机的,与任何观察到或未观察到的变量无关。
- 由于缺失的数据与其他变量没有关联,KNN 填充可以比较有效地使用观测到的邻近样本来预测缺失值,因此 KNN 填充适合于 MCAR。
-
MAR(条件随机缺失, Missing at Random):
- 数据缺失与观察到的变量有关,但与缺失值本身无关。(MAR,依赖于其他观测变量,如时间梯度越长采集越可能出现缺失值)
- 在这种情况下,KNN 填充可以利用观测到的其他变量的信息,通过最近邻样本的相似性来估计缺失值,所以 KNN 填充也适合于 MAR 情况。
-
MNAR(非随机缺失, Missing Not at Random):
- 缺失的数据与其本身有关,即缺失的机制与数据本身的分布相关联。 (MNAR,依赖观测变量自身,如某些蛋白含量在仪器检测限以下)
- 由于缺失数据的模式与其本身存在关联,KNN 填充在这种情况下不适用,因为它无法推断出数据的缺失机制,而这种机制对MNAR来说至关重要。因此,KNN 填充不适合 MNAR 情况。