[英]How to calculate variable importance of each class with R caret package?
[英]How to calculate KNN Variable Importance in R
我實施了一個作者歸屬項目,在那里我能夠用兩個使用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識別這個。
基本上,你的問題歸結為有一些變量(你的例子中的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不應該太有用,因為它不用於計算結果) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.