Location : Home > Languages > Perl > Package Title : Statistics::LTU |
![]() |
Statistics::LTU - 線形閾値ユニット(LTU; Linear Threshold Units)の実装
use Statistics::LTU; my $acr_ltu = new Statistics::LTU::ACR(3, 1); # 3 属性、スケーリング済み $ltu->train([1,3,2], $LTU_PLUS); $ltu->train([-1,3,0], $LTU_MINUS); ... print "LTU looks like this:\n"; $ltu->print; print "[1,5,2] is in class "; if ($ltu->test([1,5,2]) > $LTU_THRESHOLD) { print "PLUS" } else { print "MINUS" }; $ltu->save("ACR.saved") or die "Save failed!"; $ltu2 = restore Statistics::LTU("ACR.saved");
可読性のために LTU.pm は3つのスカラ定数 $LTU_PLUS (+1), $LTU_MINUS (-1), $LTU_THRESHOLD (0) をエクスポートする。
Statistics::LTU は線形閾値ユニット(LTU; Linear Threshold Units)の生成・消去・学習・テストに関するメソッドを定義する。LTUとは1層のニューラルネットワークでパーセプトロン(perceptron)とも呼ばれる。LTU は例から暮らすわけを学習する。
LTU は与えられたデータに基づき2つのクラスへの区別を学習する。一定数の学習が済めば LTU は新たな(未知の)例をクラス分けすることができる。技術的には LTU の学習は例の間の超平面により2つのクラスに分割される。例に n 個の特徴があれば超平面は n 次元である。
一般に LTU の重みは分割超平面により定義される。
LTU.pm ファイルは defines an インスタンス化できない基本クラス・LTU・LTUの最上部に作成された4つのインスタンス化可能なクラスを定義する。4つのクラスは学習規則が異なる。
学習規則はそれぞれ振る舞いが異なる。どのように異なるかはこの文書の範囲を超える。議論のためには ltu.doc を見よ。
$LTU_PLUS と $LTU_MINUS (それぞれ +1 と -1)は train メソッドに渡される。$LTU_THRESHOLD ( 0 に設定されている)は test メソッドからの返り値と比較する際に用いられる。
各 LTU は以下のメソッドを持つ。
new TYPE(n_features, scaling)
所与の TYPE の LTU を生成する。TYPE は以下のうちの1つでなければならない。
n_features は例の中の属性の数である。scaling が 1 であれば LTU は自動的に入力属性を (-1, +1) に設定する。
例えば
$ACR_ltu = new Statistics::LTU::ACR(5, 1);
は ACR を用いて学習する LTU を生成する。5 変数をもち、スケーリングが自動的に行う。
copy
LTU を複製し、複製したものを返す。
destroy
LTU を消去する(下部構造を未定義にする)。本メソッドは互換性のために確保されている。おそらく undef($ltu) を呼び出すだけで十分である。
重みを含め LTU を人間に可読な記述を出力する。
save(filename)
LTU をファイル filename に格納する。全ての重みと必要なデータが格納される。LTU の格納に成功すれば 1 を返し、そうでなければ 0 を返す。
restore LTU(filename)
静的なメソッドである。ファイル filename から新たに LTU を生成し、返す。新規 LTU は同じタイプである。
test(instance)
インスタンスベクトル instance 上で LTU をテストする。インスタンスベクトルは配列への参照でなければならない。生の(閾値をかけていない)結果を返す。典型的な例は以下の通り。
if ($ltu->test($instance) >= $LTU_PLUS) { # インスタンスはクラス 1 に } else { # インスタンスはクラス 2 に }
correctly_classifies(instance, realclass)
インスタンスベクトル instance 上でない状態で LTU をテストする。インスタンスベクトルは配列への参照でなければならない。realclass は数でなければならない。LTU が instance を realclass と同じクラスにクラス分けできれば 1 を返す。
技術的には、instance が LTU の超平面の realclass 側にあるときにのみ 1 を返す。
weights
LTU の重みの複写への参照を返す。
set_origin_restriction(orig)
LTU の orig に対する制限を設定する。値は 1 または 0 でなければならない。LTU が原点制限されていれば(origin-restricted)その超平面は原点を通らねばならない(切片が0)。クラス分けは対象的であるような選択の際に用いられる。
is_cycling(n)
LTU の重みが循環してれば 1 を返す。これは LTU の重みに基づくヒューリスティックなテストで、過去の n 個の学習インスタンスを押し出す。コード内のコメントを見よ。
version
LTU 実装のバージョンを返す。
上記メソッドに加え、LTU の4つのクラスが train メソッドをもつ。
train メソッドは、インスタンスが特定のクラスに属する LTU を学習させる。各 train メソッドでは instance は数の配列への参照でなければならず、value は数でなければならない。簡単のために2つの定数 $LTU_PLUS と $LTU_MINUS が定義されており、それぞれ +1 と -1 である。これらは train メソッドへの引数として与えられる。典型的な train の呼び出しは以下のようなものである。
$ltu->train([1,3,-5], $Statistics_LTU_PLUS);
これはインスタンスベクトル (1,3,-5) は PLUS クラスにいるような LTU を学習させる。
fawcett@nynexst.com (Tom Fawcett)
LTU.pm はマサチューセッツ大学の James Callan による C 実装に基づいている。彼のバージョンは長く利用されており、安定的でバグはないと思われる。この Perl モジュールは Tom Fawcett により開発され、バグがあるとすれば変換時に紛れ込んだものである。バグ報告やコメント・示唆があれば fawcett@nynexst.com まで。
今のところなし。この Perl モジュールはかなり確認されているが、保証するものではない。
![]() |
Updated : 2008/04/21 |