在R

时间:2015-12-02 11:27:02

标签: r matrix distance knn

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

因为,我有混合数据类型矩阵,我正在寻找与R中的gower距离一致的K-nearst邻居algorithem。我在 dprep包下找到了 Knngow 函数声称要执行此操作。 http://finzi.psych.upenn.edu/library/dprep/html/knngow.html

该函数采用三个参数knngow(Training_Set,Testing_set,K_number)并返回预测的类。

我正在玩它,并想知道该功能如何识别我的目标矢量是什么?换句话说,如果没有我事先用目标列确认它,它如何返回预测的类。

请找到下面的源代码(我使用编辑功能

检索它)
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
}

请有人能为我解释一下代码吗?

我希望我以正确的形式发布问题,如果我必须将其转移到其他地方,请告诉我。

非常感谢你的时间。

1 个答案:

答案 0 :(得分:0)

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

列p 训练数据的最后一列)不用于计算Gower dist。只有在预测测试样本的类别标签时才考虑它。