Location : Home > Languages > Perl > Package
Title : Statistics::LTU
Toolbox Logo

名称

 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) を呼び出すだけで十分である。

print

 重みを含め 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 モジュールはかなり確認されているが、保証するものではない。

Toolbox Logo
Updated : 2008/04/21