2014-01-18 63 views
0

我有一個列表,其中包含一組規則(或密鑰或字典;無論您稱之爲什麼)。如何根據R中的一組規則進行預測

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

x   no  yes 

    overcast 0.07692308 0.42857143 

    rainy 0.38461538 0.33333333 

    sunny 0.53846154 0.23809524 

因此,給定爲陰值「無」是-0.08和給定的「是」爲0.43。

 
[[2]] 
     y 

x    no  yes 

    cool 0.2307692 0.3333333 

    hot 0.3846154 0.2380952 

    mild 0.3846154 0.4285714 

同樣,hot給定「no」的值是0.38,並且給定「yes」是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" 

的問題給出「否」或「是」,我怎麼能使用前規則和轉換細胞的基質(存儲字符的矩陣作爲字符)轉換爲相應的數值。

回答

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 
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每列翻譯,但是使用哪一列取決於另一個變量的值(我將稱之爲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第一元件等;如果映射不是那麼簡單,那麼您需要一些相關方法(可能根據mat的列名稱命名list.prob的元素,並循環遍歷列名以在list.prob中執行查找)。

相關問題