KNN - 使用R,希望获得所有类别的投票比例

时间:2015-04-21 10:24:31

标签: r statistics cluster-analysis

文本分类相当新。

文档可以属于11-12个类。 我希望看到文档所属的所有可能类的所有概率/度量。

我的数据可能有噪音。 有类似的课程。 “戴尔”和“戴尔笔记本电脑”

我使用R。

使用k-最近邻分类

使文字成功的词汇。

编辑: 我正在寻找的是'预测'为我们提供类型

library(class)
library(e1071) 
data(iris)

train.idx <- sample(nrow(iris),ceiling(nrow(iris)*0.7))
test.idx <-(1:nrow(iris)) [- train.idx]

data.var <- iris[,1:4]
data.class<-iris[,5]

classifier<-naiveBayes(data.var[train.idx,], data.class[train.idx]) 
predict(classifier, data.var[test.idx,],type="raw")

这将给出一个表格,显示每个班级可能的概率。 我想生成一个类似的表。

1 个答案:

答案 0 :(得分:2)

我将使用iris3数据,因为我发现它更容易使用。它与iris完全相同:

您需要KODAMA包和函数knn.probability才能获得所需内容。请参阅以下示例:

data(iris3)
#every 25 rows belong to a specific type of flower
train <- rbind(iris3[1:25,,1], iris3[1:25,,2], iris3[1:25,,3])
#50-50 split on this ocassion
test <- rbind(iris3[26:50,,1], iris3[26:50,,2], iris3[26:50,,3])

#first 25 rows are setosa, next 25 versicolor, and the last 25 virginica
cl <- factor(c(rep("s",25), rep("c",25), rep("v",25)))


#In order to get probabilities for all 3 classes you need the following library
library(KODAMA)

#rbind the train and test sets
x <- rbind(train,test)
#calculate the distances among rows (necessary step)
kdist <- knn.dist(x)
#calculate and 
# view probabilities (all class probabilities are returned)
#you just pass in the indices as you see for the training and test sets 
#first 75 rows is the train set, second 75 rows is the test set 
probs <- knn.probability(1:75, 76:150, cl, kdist, k=3)

#I prefer the transposed result more to be honest
head(t(probs),10)

这是测试集中每行的输出:

> head(t(probs),30)
            c s         v
76  0.0000000 1 0.0000000
77  0.0000000 1 0.0000000
78  0.0000000 1 0.0000000
79  0.0000000 1 0.0000000
80  0.0000000 1 0.0000000
81  0.0000000 1 0.0000000
82  0.0000000 1 0.0000000
83  0.0000000 1 0.0000000
84  0.0000000 1 0.0000000
85  0.0000000 1 0.0000000
86  0.0000000 1 0.0000000
87  0.0000000 1 0.0000000
88  0.0000000 1 0.0000000
89  0.0000000 1 0.0000000
90  0.0000000 1 0.0000000
91  0.0000000 1 0.0000000
92  0.0000000 1 0.0000000
93  0.0000000 1 0.0000000
94  0.0000000 1 0.0000000
95  0.0000000 1 0.0000000
96  0.0000000 1 0.0000000
97  0.0000000 1 0.0000000
98  0.0000000 1 0.0000000
99  0.0000000 1 0.0000000
100 0.0000000 1 0.0000000
101 1.0000000 0 0.0000000
102 1.0000000 0 0.0000000
103 0.3333333 0 0.6666667
104 1.0000000 0 0.0000000
105 1.0000000 0 0.0000000