R 中具有 Gower 距离度量的 K 最近邻

K nearest neighbors with Gower distance measure in R

希望大家都好;我有一个问题,它可能看起来很愚蠢,但我真的需要有人为我解释一下。我也认为它对某些人有用,因为之前有人问过它但没有令人满意的答案。

因为我有混合数据类型矩阵,所以我一直在寻找适用于 R 中高尔距离的 K 最近邻算法。我在包 Knngow 下找到了函数 Knngow =28=]dprep 声称可以执行此操作。 http://finzi.psych.upenn.edu/library/dprep/html/knngow.html

该函数采用三个参数 knngow(Training_Set、Testing_set、K_number) 和 return 预测的 class.

我在玩它,想知道这个函数如何识别我的目标向量是什么?换句话说,它是如何 return 预测的 class,而我没有提前在我的目标列中确认它。

请在下面找到源代码(我使用函数 edit 检索了它)

function (train, test, k) 
{
    p = dim(train)[2]
    ntest = dim(test)[1]
    ntrain = dim(train)[1]
    classes = rep(0, ntest)
    if (ntest == ntrain) {
        for (i in 1:ntest) {
            tempo = order(gower.dist(test[i, -p], train[-i, 
                -p]))[1:k]
            classes[i] = moda(train[tempo, p])[1]
        }
    }
    else {
        for (i in 1:ntest) {
            tempo = order(StatMatch::gower.dist(test[i, -p], 
                train[, -p]))[1:k]
            classes[i] = moda(train[tempo, p])[1]
        }
    }
    classes
}

有人可以为我解释一下代码吗?

我希望我的问题 post 格式正确,如果我必须将它移到其他地方,请告诉我。

非常感谢您的宝贵时间。

knngow 函数将 train 的最后一列作为目标属性。另外 p = dim(train)[2]) 表示你的列号。

列 p训练数据的最后一列)不用于计算高尔距离。只有在预测测试样本的class标签时才会考虑。