カバーリングアルゴリズムの話 その1
こんにちは、たくさん寝太郎です。
訓練事例全体からその一部を説明するルールを見つけ、そのルールでカバーされる事例群を訓練事例全体から分離し、残された訓練事例群に対して、再びその一部を説明するルールを見出していく方法をカバーリングアルゴリズムと呼ぶ
*1
例えば次の鉄鋼プラントデータを考えてみます。
プラント圧力 | 煙の色 | 鋼の色 | プラント状態 |
---|---|---|---|
低 | 白 | 青 | 正常 |
高 | 黒 | 茶 | 異常 |
高 | 黒 | 青 | 異常 |
高 | 赤 | 青 | 正常 |
低 | 黒 | 青 | 異常 |
高 | 白 | 茶 | 異常 |
低 | 白 | 茶 | 異常 |
高 | 白 | 青 | 正常 |
プラント状態が正常であるようなルールを学習します。
各条件においてプラント状態が正常となる確率は以下のようになります。
プラント圧力=低 | 1/3 |
プラント圧力=高 | 2/5 |
煙の色=赤 | 1/1 |
煙の色=白 | 2/4 |
煙の色=黒 | 0/3 |
鋼の色=茶 | 0/3 |
鋼の色=青 | 3/5 |
この中で値が最も大きいのは「煙の色=赤」の時で、値が1(=100%)になります
よってルール1を「if 煙の色=赤 then プラント状態=正常」とします。
次にルール1を除いたデータで上と同じ操作を繰り返します。
プラント圧力 | 煙の色 | 鋼の色 | プラント状態 |
---|---|---|---|
低 | 白 | 青 | 正常 |
高 | 黒 | 茶 | 異常 |
高 | 黒 | 青 | 異常 |
低 | 黒 | 青 | 異常 |
高 | 白 | 茶 | 異常 |
低 | 白 | 茶 | 異常 |
高 | 白 | 青 | 正常 |
プラント圧力=低 | 1/3 |
プラント圧力=高 | 1/4 |
煙の色=白 | 2/4 |
煙の色=黒 | 0/3 |
鋼の色=茶 | 0/3 |
鋼の色=青 | 2/4 |
この中で値が最も大きいのは「煙の色=白」「鋼の色=青」の2つあります。
この場合はどちらを選んでも後の結果は変わらないので、今は「煙の色=白」を選ぶことにします。
ルール2:「if 煙の色=白 and [追加条件] then プラント状態=正常」
プラント圧力 | 煙の色 | 鋼の色 | プラント状態 |
---|---|---|---|
低 | 白 | 青 | 正常 |
高 | 白 | 茶 | 異常 |
低 | 白 | 茶 | 異常 |
高 | 白 | 青 | 正常 |
プラント圧力=低 | 1/2 |
プラント圧力=高 | 1/2 |
鋼の色=茶 | 0/2 |
鋼の色=青 | 2/2 |
「鋼の色=青」が最大で値は1になったのでルール2は「if 煙の色=白 and 鋼の色=青 then プラント状態=正常」となります。
以上より、プラント状態=正常となるルールは以下の2つになります。
ルール1: 煙の色=赤
ルール2: 煙の色=白 and 鋼の色=青
この例ではデータの行数が8行ということもあり人力でも容易に学習することが出来ましたが、データの個数が数十個や数百個になると人力で計算するのは辛くなります。よって次回の記事では上のアルゴリズムをpythonで自動化してみようと思います。