2

他の変数を提供する限り、変数がどのように作成されたかを推測するアルゴリズム、プログラム、または関数を探しています。コンピュータープログラマーはこれを「逆コンパイル」と呼び、アーキテクトは「リバースエンジニアリング」と呼ぶと思いますが、統計学者がそれを何と呼ぶか​​、またはそれを行うための受け入れられた方法があるかどうかはわかりません.

呼び出されたカテゴリにカテゴリ列があり、それがどのように構築されたのか正確にはわかりません。しかし、それを作成するためにどの変数が使用されたか知っています..または、少なくとも、作成に使用された変数の完全なセットを提供できます-それらのすべてが使用されたわけではありません.data.framenewvar

# start with an example data set
x <- mtcars

# # # # # # # # # # # # # # # # # # # # # # # #
# pretend this block of code is a black box
x <-
    transform(
        x ,
        newvar =
            ifelse( mpg > 24 , 1 ,
            ifelse( cyl == 6 , 9 ,
            ifelse( hp > 120 , 4 ,
            ifelse( mpg > 22 , 7 , 2 ) ) ) )
    )
# end of unknown block of code
# # # # # # # # # # # # # # # # # # # # # # # #

# now knowing that `mtcars` has only 11 columns to choose from
names(x)

# how were these 11 columns used to construct `newvar`?
table( x$newvar )

# here's a start..
y <- data.frame( ftable( x[ , c( 'mpg' , 'cyl' , 'hp' , 'newvar' ) ] ) )
# ..combinations with any records
y[y[,5]!=0,]
# but that's not enough to back-out the construction

したがって、線形回帰または決定木を使用して の構築を取り消すことができると思いますがnewvar、ブラック ボックス内で何が起こったのかを正確に把握するには、少し考えて係数をつなぎ合わせる必要があります。

いわば、ブラックボックスを推測する利用可能なアルゴリズムはありますか? ありがとう!!

4

2 に答える 2

5

一般的に、いいえ。そして、何が起こっているのかについて多くの知識を適用しても、まだ(おそらく)ノーです. あなたの例から例を示しましょう。出力が離散値であり、それらが他の値のしきい値に基づいて導出されるという「ブラックボックス」の知識を追加すると、分類ツリーは基準を回復できるはずです。そう:

library("party")
tmp <- ctree(factor(newvar) ~ ., data=x, 
  controls=ctree_control(mincriterion=0, minsplit=2, minbucket=1))

制御値を完全に不合理な値に設定して、アルゴリズムが各バケットに単一の値のみを含めるように強制しました。それでも、それはあなたが始めたものではありません:

ここに画像の説明を入力

したがって、単純な例と変換に​​関する知識を追加しても、それは実行できません。一般的なケースで実行できるという希望はありません。

于 2013-08-12T20:08:58.230 に答える