データ分析するにあたって、ラフ集合理論関連のRのコードがあまりないわー

下近似集合を計算するのは、割と簡単だけど、ルール抽出が難しいな。

ルール抽出のコードは、また今度書いてみるとして、

とりあえず、可変精度下近似集合を返す関数。

支配関係に基づくラフ集合アプローチの下近似集合だということに注意
(Dominance based rough set approach)

------------------------------------------------------------
入力:
condition  :条件属性の情報表
decision    :決定属性(一つの属性のみ) →conditionと行数が同じである必要あり
clas         :下近似を求めたいクラスの対象が持つ決定属性値の下限
beta         :可変精度パラメータ (0, 1] の範囲の値

出力:
行数がconditionと同じのベクトル
下近似集合に属する対象の行はTRUE
下近似集合に属さない対象の行はFALSE
となる

function(condition,decision,clas,beta=1)
{
    xx <- apply(condition,c(1,2),as.numeric)
    decision <- apply(decision,c(1,2),as.numeric)>=clas
    ans<-TRUE
    for(ii in 1:nrow(condition)){
        ll <- apply(t(t(xx)-xx[ii,])>=0,1,sum)>=ncol(condition)
        hh <- apply(t(-(t(xx)-xx[ii,]))>=0,1,sum)>=ncol(condition)
        th2 <- sum(!decision&ll)
        th1 <- sum(decision&hh)
        ans<-c(ans,th1/(th1+th2)>=beta)
    }
    tail(ans,nrow(condition))
}

------------------------------------------------------------


使用例:下近似集合に属する対象を抽出する
subset(condition, lower.apx(condition,decision,1,beta=1) )