如何根据R中的一组规则进行预测

时间:2014-01-18 21:28:34

标签: r key rule

我有一个包含一组规则(或键或词典;无论你怎么称呼它)的列表。

    > list.prob[c(1,2)]
[[1]]

x           no        yes

  overcast 0.07692308 0.42857143

  rainy    0.38461538 0.33333333

  sunny    0.53846154 0.23809524

因此,给出阴天的价值" no"是-0.08并给出"是"是0.43。

[[2]]
      y

x             no       yes

  cool 0.2307692 0.3333333

  hot  0.3846154 0.2380952

  mild 0.3846154 0.4285714

出于同样的原因,给出的热值" no"是0.38并给出"是"是0.24。

规则建立后,我有一个字符矩阵

    > mat[c(1:4),]

   outlook    temperature humidity windy

[1,] "sunny"    "hot"       "high"   "no" 

[2,] "sunny"    "hot"       "high"   "yes"

[3,] "overcast" "hot"       "high"   "no" 

[4,] "rainy"    "mild"      "high"   "no" 

提出问题"否"或"是",如何使用先前的规则并将矩阵中的单元格(存储为字符)转换为相应的数值。

2 个答案:

答案 0 :(得分:1)

这样做你想要的吗?我不确定是/否在哪里发挥作用,所以我只是查了“是”的可能性。

a  <- matrix(runif(6), nrow = 3)
weather <- c("sunny", "rainy", "overcast")
temp <- c("cool", "hot", "mild")
yn <- c("yes", "no")
rownames(a) <- weather
colnames(a) <- yn
b  <- matrix(runif(6), nrow = 3)
rownames(b) <- temp
colnames(b) <- yn
c <- data.frame(weather = sample(weather, 10, replace = T), 
     temp = sample(temp, 10, replace = T))
d <- data.frame(weather = a[c$weather, "yes"], temp = b[c$temp, "yes"])
a
b
c
d

答案 1 :(得分:0)

你的例子不可复制,所以我试着这样做:

list.prob <-
list(structure(c(0.07692308, 0.38461538, 0.53846154, 0.42857143, 
0.33333333, 0.23809524), .Dim = c(3L, 2L), .Dimnames = structure(list(
    x = c("overcast", "rainy", "sunny"), y = c("no", "yes")), .Names = c("x", 
"y"))), structure(c(0.2307692, 0.3846154, 0.3846154, 0.3333333, 
0.2380952, 0.4285714), .Dim = c(3L, 2L), .Dimnames = structure(list(
    x = c("cool", "hot", "mild"), y = c("no", "yes")), .Names = c("x", 
"y"))))
mat <-
structure(c("sunny", "sunny", "overcast", "rainy", "hot", "hot", 
"hot", "mild"), .Dim = c(4L, 2L), .Dimnames = list(NULL, c("outlook", 
"temperature")))

它提供了与您开始时非常相似的内容(限制mat除外),只显示与list.prob中的条目相对应的那些列:

> list.prob
[[1]]
          y
x                  no       yes
  overcast 0.07692308 0.4285714
  rainy    0.38461538 0.3333333
  sunny    0.53846154 0.2380952

[[2]]
      y
x             no       yes
  cool 0.2307692 0.3333333
  hot  0.3846154 0.2380952
  mild 0.3846154 0.4285714

> mat
     outlook    temperature
[1,] "sunny"    "hot"      
[2,] "sunny"    "hot"      
[3,] "overcast" "hot"      
[4,] "rainy"    "mild"     

然后您的问题是根据mat中的表格翻译list.prob中的每一列,但使用哪个列是以另一个变量的值为条件的(我将称之为{{1} }})。

yesorno

# setup
res <- matrix(0,nrow=nrow(mat),ncol=ncol(mat))
yesorno <- "yes"
# actual computation
for (col in seq_len(ncol(mat))) {
  res[,col] <- list.prob[[col]][,yesorno][mat[,col]]
}

这假设> res [,1] [,2] [1,] 0.2380952 0.2380952 [2,] 0.2380952 0.2380952 [3,] 0.4285714 0.2380952 [4,] 0.3333333 0.4285714 的第一列对应于mat的第一个元素等;如果映射不那么简单,那么你需要一些方法来关联它们(可能根据list.prob的列名命名list.prob的元素并循环遍历列名以进行查找mat)。