如何计算R中的KNN变量重要性

时间:2015-04-25 13:22:20

标签: r machine-learning statistics classification

我实施了一个作者归属项目,在那里我能够用两名使用KNN的作者的文章训练我的KNN模型。然后,我将新文章的作者归类为作者A或作者B. 我使用knn()函数来生成模型。 模型的输出如下表所示。

   Word1 Word2 Word3  Author
11    1     48    8      A
2     2     0     0      B
29    1     45    9      A
1     2     0     0      B
4     0     0     0      B
28    3     1     1      B

从模型中可以看出,很明显Word2和Word3是导致作者A和作者B之间分类的最重要的变量。

我的问题是如何使用R来识别这个。

1 个答案:

答案 0 :(得分:2)

基本上,你的问题归结为在你的例子中有一些变量(Word1,Word2和Word3)和二进制结果(在你的例子中是作者),并且想知道不同变量在确定结果时的重要性。一种自然的方法是训练回归模型以使用变量预测结果并检查该模型中的变量重要性。我将在这里包括两种方法(逻辑回归和随机森林),但可以使用其他方法。

让我们从稍微大一点的例子开始,其中结果仅依赖于Word2和Word3,而Word2的效果远远大于Word3:

set.seed(144)
dat <- data.frame(Word1=rnorm(10000), Word2=rnorm(10000), Word3=rnorm(10000))
dat$Author <- ifelse(runif(10000) < 1/(1+exp(-10*dat$Word2+dat$Word3)), "A", "B")

我们可以使用逻辑回归模型的摘要来预测作者,以确定最重要的变量:

summary(glm(I(Author=="A")~., data=dat, family="binomial"))
# [snip]
# Coefficients:
#             Estimate Std. Error z value Pr(>|z|)    
# (Intercept)  0.05117    0.04935   1.037    0.300    
# Word1       -0.02123    0.04926  -0.431    0.666    
# Word2        9.52679    0.26895  35.422   <2e-16 ***
# Word3       -0.97022    0.05629 -17.236   <2e-16 ***

从p值,我们可以看出Word2有很大的正面效果,而Word3有很大的负面影响。从系数我们可以看出,Word2对结果的影响程度更高(因为通过构造,我们知道所有变量都在相同的范围内)。

我们可以使用随机森林中的变量重要性来预测作者结果:

library(randomForest)
rf <- randomForest(as.factor(Author)~., data=dat)
rf$importance
#       MeanDecreaseGini
# Word1         294.9039
# Word2        4353.2107
# Word3         351.3268

我们可以将Word2识别为迄今为止最重要的变量。这告诉我们一些有趣的东西 - 鉴于我们知道Word2,Word3在预测结果方面实际上并不比Word1更有用(并且Word1不应该太有用,因为它不是& #39; t用于计算结果)。