競合学習のプログラム例

ruby test.rb 入力ファイル名 出力ファイル名

と入力してやれば実行できます.出力ファイル名は,結果を出力するファイルの名前であり,省略すると画面に出力されます.また,入力ファイル名は,実行に必要なデータを記述したファイルの名前であり,たとえば以下のような形式で作成します.
最大試行回数 1000 入力セルの数 9 出力セルの数 3 訓練例の数 9 係数(0~1) 0.1 
入力データファイル pat.dat		
  日本語で記述した部分(「最大試行回数」,「入力セルの数」等)は,次に続くデータの説明ですのでどのように修正しても構いませんが,削除したり,または,複数の文(間に半角のスペースを入れる)にするようなことはしないでください.各データの意味は以下に示す通りです.

最大試行回数

  学習回数を入力します.この例では 1000 を与えています.

入力セルの数

  入力セル(入力ユニット)の数を入力します.この例では 9 となっています.

出力セルの数

  出力セル(出力ユニット)の数を入力します.この例では 3 となっています.

訓練例の数

  訓練例(分類すべきパターン)の数を入力します(この例では 9 ).訓練例は,「入力データファイル」の項に入力されたファイル(この例では,pat.dat )に記述します.ファイル pat.dat は,たとえば,以下のようになります.各行のデータが一つのパターンに相当しています.
	0 0 0 0 0 0 0 1 1
	0 0 0 0 0 0 1 0 1
	0 0 0 0 0 0 1 1 0
	0 0 0 0 1 1 0 0 0
	0 0 0 1 0 1 0 0 0
	0 0 0 1 1 0 0 0 0
	0 1 1 0 0 0 0 0 0
	1 0 1 0 0 0 0 0 0
	1 1 0 0 0 0 0 0 0			
係数(0~1)

  重みを修正する際の係数です.0 と 1 の間の数値を入力してください(この例では,0.1 )

  上で説明したデータの元で実行すると,たとえば,以下のような出力が得られます.
分類結果
 0 0 0 0 0 0 0 1 1 Res   3
 0 0 0 0 0 0 1 0 1 Res   3
 0 0 0 0 0 0 1 1 0 Res   3
 0 0 0 0 1 1 0 0 0 Res   2
 0 0 0 1 0 1 0 0 0 Res   2
 0 0 0 1 1 0 0 0 0 Res   2
 0 1 1 0 0 0 0 0 0 Res   1
 1 0 1 0 0 0 0 0 0 Res   1
 1 1 0 0 0 0 0 0 0 Res   1		
  各行において,res の後ろに書かれた数値が,その左側に与えられたパターンが分類された結果です.たとえば,2 行目は,パターン「0 0 0 0 0 0 0 1 1」がグループ 3 に分類された(出力ユニットの内,3 番目のユニットの活性度が最も大きくなった)ことを意味しています.