Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算信息增益比_R_Entropy_Information Gain - Fatal编程技术网

R 计算信息增益比

R 计算信息增益比,r,entropy,information-gain,R,Entropy,Information Gain,我在搜索一段代码,用R或Python计算信息增益比(IGR)。我发现了一个方便的R包,但它没有维护,已经从CRAN中删除。然而,我发现了一些旧版本,我自由地“借用”了一些关键函数。我做了一些更改,还添加了一些新功能。算法需要两个线索/特征的2x2矩阵及其(共同)出现和事件总数。它返回两个IGR,每个提示/特征对应一个IGR 然而,我认为它没有得到很好的优化,我想学习更好的实现方法。特别是,我认为必须有一种方法使cueRE和getIGRs函数更好。下面是一个示例和函数 如有任何建议和评论,我将不胜

我在搜索一段代码,用R或Python计算信息增益比(IGR)。我发现了一个方便的R包,但它没有维护,已经从CRAN中删除。然而,我发现了一些旧版本,我自由地“借用”了一些关键函数。我做了一些更改,还添加了一些新功能。算法需要两个线索/特征的2x2矩阵及其(共同)出现和事件总数。它返回两个IGR,每个提示/特征对应一个IGR

然而,我认为它没有得到很好的优化,我想学习更好的实现方法。特别是,我认为必须有一种方法使cueRE和getIGRs函数更好。下面是一个示例和函数

如有任何建议和评论,我将不胜感激。 非常感谢

safelog2 <- function (x) {
    if (x <= 0) return(0)
    else return(log2(x))
}

binaryMatrix <- function(m, t) {
    return(matrix(c(m[1,2], m[1,1]-m[1,2], m[2,2]-m[1,2], t-(m[1,1]+m[2,2]-m[1,2])),
        nrow=2, byrow=TRUE, dimnames=list(c(1,0),c(1,0))))
}

H <- function (p) {
    return(-(sum(p * sapply(p, safelog2))))
}

cueH <- function(m, t) {
    p1 = c(m[1,1]/t, (t-m[1,1])/t)
    p2 = c(m[2,2]/t, (t-m[2,2])/t)
    return(c(H(p1), H(p2)))
}

cueRE <- function (tbl) {
    normalize <- function(v) {
        if (sum(v) == 0) v
        else v/sum(v)
    }
    nis <- apply(t(apply(tbl, 1, normalize)), 1, H)
    return(sum(tbl * nis) / sum(tbl))
}

getIGRs <- function(m, t) {
    ent = cueH(m, t)
    rent = cueRE(binaryMatrix(m, t))
    igr1 = (ent[2] - rent) / ent[1]
    d = diag(m)
    m[1,1] = d[2]
    m[2,2] = d[1]
    ent = cueH(m, t)
    rent = cueRE(binaryMatrix(m, t))
    igr2 = (ent[2] - rent) / ent[1]
    return(c(igr1, igr2))
}

safelog2我想知道这个软件包没有被维护的原因是否是它背后的统计前提被批评为可疑或无效?机器学习界提出的一些措施没有得到统计界的完全接受,这可能是完全正确的。然而,我并没有用它来解决机器学习问题。那么,我感兴趣的是这些程序在形式上是否健全。非常感谢!
M <-matrix(c(20,15,15,40), nrow=2, byrow=TRUE,
    dimnames=list(c('a','b'),c('a','b')))
total <- 120

getIGRs(M, total)