2015-11-11 104 views
0

我有以下数据集:获取概率中的R

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个),我将如何在分类器中处理这个问题?

我使用的是classe1071库。 谢谢。引入“文本”的说法扫描前建成

+0

这不就是使用'table'和'prop.table'吗? –

+0

请您详细说明一下吗?我对R比较陌生。 – AngryPanda

+0

'prop.table(table(RESULT))' –

回答

0

效用函数:

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