KNN - 使用 R,希望获得所有 类 的投票比例
KNN - using R, want to get proportion of votes for all classes
对文本相当陌生class化。
文档可以属于 11-12 个 classes。
我想查看文档所属的所有可能 class 的全部 probability/measure。
我的数据可能有噪音。
有class个喜欢。 'Dell' 和 'Dell notebooks'
我正在使用 R 的 k 最近邻分类。
用于突出文档特征的词袋。
编辑:
我正在寻找的是 'predict' 给我们的类型
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")
这将给出一个 table,显示每个 class 可能的概率。
我想生成一个类似的 table.
我将使用 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
对文本相当陌生class化。
文档可以属于 11-12 个 classes。 我想查看文档所属的所有可能 class 的全部 probability/measure。
我的数据可能有噪音。 有class个喜欢。 'Dell' 和 'Dell notebooks'
我正在使用 R 的 k 最近邻分类。
用于突出文档特征的词袋。
编辑: 我正在寻找的是 'predict' 给我们的类型
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")
这将给出一个 table,显示每个 class 可能的概率。 我想生成一个类似的 table.
我将使用 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