在R

时间:2015-11-11 20:25:42

标签: r probability knn

我有以下数据集:

TRAIN数据集

   Sr      A       B       C     XX
    1   0.09    0.52    11.1    high
    2   0.13    0.25    11.1    low
    3   0.20    0.28    11.1    high
    4   0.29    0.50    11.1    low
    5   0.31    0.58    11.1    high
    6   0.32    0.37    11.1    high
    7   0.37    0.58    11.1    low
    8   0.38    0.40    11.1    low
    9   0.42    0.65    11.1    high
    10  0.42    0.79    11.1    low
    11  0.44    0.34    11.1    high
    12  0.45    0.89    11.1    low
    13  0.57    0.72    11.1    low

TEST数据集

   Sr      A       B       C     XX
    1   0.54    1.36    9.80    low
    2   0.72    0.82    9.80    low
    3   0.19    0.38    9.90    high
    4   0.25    0.44    9.90    high
    5   0.29    0.54    9.90    high
    6   0.30    0.54    9.90    high
    7   0.42    0.86    9.90    low
    8   0.44    0.86    9.90    low
    9   0.49    0.66    9.90    low
    10  0.54    0.76    9.90    low
    11  0.54    0.76    9.90    low
    12  0.68    1.08    9.90    low
    13  0.88    0.51    9.90    high

Sr:序列号

A-C:参数

XX:输出二进制参数

我正在尝试使用KNN分类器来开发具有5个最近邻居的预测模型。以下是我写的代码:

train_input <- as.matrix(train[,-ncol(train)])
train_output <- as.factor(train[,ncol(train)])
test_input <- as.matrix(test[,-ncol(test)])
prediction <- knn(train_input, test_input, train_output, k=5, prob=TRUE)
resultdf <- as.data.frame(cbind(test[,ncol(test)], prediction))
colnames(resultdf) <- c("Actual","Predicted")

RESULT数据集

    A   P
1   2   2
2   2   2
3   1   2
4   1   1
5   1   1
6   1   2
7   2   2
8   2   2
9   2   2
10  2   2
11  2   2
12  2   1
13  1   2

我有以下问题:

  1. 我应该怎样做才能获得概率值?这是高或低的概率,即P(高)还是P(低)?
  2. 级别设置为1(high)和2(low),这是基于首次出现的顺序。如果low出现在列车数据集中的high之前,则其值为1.我觉得这不是一个好习惯。无论如何我可以避免这个吗?
  3. 如果分类器中有更多类(超过2个),我将如何在分类器中处理它?<​​/ li>

    我正在使用classe1071库。 感谢。

1 个答案:

答案 0 :(得分:0)

在&#34; text&#34;之前构建的效用函数引入了扫描参数:

rd.txt <- function (txt, header = TRUE, ...) 
{    tconn <- textConnection(txt)
    rd <- read.table(tconn, header = header, ...)
    close(tconn)
    rd}

 RESULT <- rd.txt("    A   P
 1   2   2
 2   2   2
 3   1   2
 4   1   1
 5   1   1
 6   1   2
 7   2   2
 8   2   2
 9   2   2
 10  2   2
 11  2   2
 12  2   1
 13  1   2
 ")

> prop.table(table(RESULT))
   P
A         1       2
  1 0.15385 0.23077
  2 0.07692 0.53846

您还可以设置prop.table以提供行或列比例(AKA概率)。