【问题标题】:Obtaining Probabilities in KNN Classifier in R在 R 中的 KNN 分类器中获得概率
【发布时间】:2016-02-13 01:18:02
【问题描述】:

我有以下数据集:

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(high) 或 P(low)?
  2. 级别设置为 1 (high) 和 2 (low),这是基于首次出现的顺序。如果在训练数据集中low 出现在high 之前,则它的值为1。我觉得这不是一个好习惯。无论如何我可以避免这种情况吗?
  3. 如果分类器中有更多类(超过 2 个),我将如何在分类器中处理这个问题?

我正在使用class 和e1071 库。 谢谢。

【问题讨论】:

  • 这不只涉及使用table 和prop.table???
  • 您能详细说明一下吗?我对 R 比较陌生。
  • prop.table(table(RESULT))

标签: r probability knn


【解决方案1】:

在引入扫描的“文本”参数之前构建的实用函数:

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 概率)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2019-10-25
    • 2015-10-28
    • 2020-10-09
    • 2017-08-13
    • 2016-06-28
    • 2017-06-12
    相关资源
    最近更新 更多