統計と機械学習

トマトの尻腐れ症を機械学習で予測する3

統計と機械学習

[PR]当サイトはアフィリエイト広告を利用しています。

前回はSVMで尻腐れ症を予測しました。

今回は実験計画法を用いて各変数の影響を考えたいと思います。変数はそれぞれ結果に影響があるのか、計算してみます。

実験計画法について簡単に説明すると、これまで機械学習でやっていたのは、データセットから出力を予測するということでした。

ただ機械学習に渡すデータセットは特に制限はなくデータに偏りがあっても予測できていました。

実験計画法ではデータセットの初期値を工夫して、偏りを少なくし、かつ少ないデータセットでより多くの情報を得ようという試みを行います。

入力データには少し制限は出ますが、少ない情報量で多くの情報が得られます。

ばらつきが少ないので色々な条件での各変数の影響度がわかり、色々と条件を変えても変数xをx1からx2に変えると出力が上がる。

そのときxは効果があるという判断をします。

そしてすべての変数で効果的な方向に変数を動かせば最もよい出力が得られるのではないか?

機械学習のように色々なデータを渡して予測するというわけではありませんが、変数の効果を調べるとき有効です。

実験計画法はこのような思想で構築されています。

大雑把に言うと実験計画法はこんな感じです。

うまく使えば一つの最適化手法として機能するようですが、今回はここまでは踏み込みません。

実験計画法に関して参考にしたのは以下。

森田浩(2019)『図解入門よくわかる 最新実験計画法の基本と仕組み[第2版]』昭和システム.

詳細は書籍に譲ります。

ここで解説するとすごい量になってしまいます。

今回は2水準系実験で直交表を用います。

直交表は簡単に言うと少ないデータ数でより多くの情報が得られる初期値の配置方法が書かれた表です。今回はL8直交表を使います。

2水準とは変数が上と下の二つだけ。すなわち大きいか小さいかだけで構成されています。

早速作ってみましょう。

今回は実験していないデータも多いので、ほとんど仮データです。

実際に実験したいところですが、もう機械学習のところでリキダスを与える、初期に肥料をあげすぎないという知見は得られたのでもう実際に実験することはないでしょう。

今回は実験計画法の練習です。

No日照活力剤日照・活力剤初期に化成日照・初期に化成未割当1未割当2発症
170000110
270011221
371100220
471111110
550101120
650110210
751001210
851010120

発症なら1としました。発症しないなら0です。

まずデータ表を作ります。この辺の解説は参考にした書籍を眺めるとよいでしょう。

日照活力剤日照・活力剤初期に化成日照・初期に化成未割当1未割当2
第1水準の合計1110000
第1水準の平均0.250.250.250000
第2水準の合計0001111
第2水準の平均0000.250.250.250.25

続いて二元表も作ります。

活力剤1活力剤2
日照10.50
日照200
初期に化成1初期に化成2
日照100.5
日照200

データ表の平均をグラフにすると以下のようになります。

このグラフが各変数の影響度です。主効果を見ることができます。ただし本当に効果があるのか統計的に考えるときは要因効果というのを計算する必要があります。

ちなみにグラフの縦軸は出力の大きさを表していて、今回は出力があれば発症する可能性が高い、ないなら低いということです。

グラフを見ると水準が変わることで何らかの変化があるので、すべての変数で影響があるようです。

また交互作用として日照・活力剤、日照・初期に化成の効果もありそうです。

発症しやすい可能性が高いのは、日照が多い、活力剤がない、初期に化成を施す、活力剤がない状況で日照が多い、初期に化成を施す状態で日照が多いという状況のようです。

これまでの知見と一致する結果ですね。

より統計的に判断するため分散分析をします。

この部分はほとんど決められた手順を実施するだけなので、こんな計算をするんだなくらいで読んでいただければと思います。

まず列平方和を計算します。第[k]列の列平方和はS[k]で表します。

1234567
第1水準の和1110000
第2水準の和0001111
111-1-1-1-1
S[k]0.1250.1250.1250.1250.1250.1250.125

S[k]は表の差の部分の二乗をデータ数8で割ると出ます。

誤差平方和SEというのも求めます。これは何も割り付けなかった列の平方和の合計なので、6・7列のSを足します。

SE=S[6]+S[7]=0.25

です。

また各列の自由度というのも求めます。

これは水準数-1なので2-1=1です。

誤差自由度というものも求めます。

これは誤差列の自由度の和なので、6列目と7列目の自由度の和、1+1=2です。

次に分散分析表を作ります。

この表のP値が5%以下なら5%有意、つまり要因効果があるといえる要因があるといえます。

要因平方和S自由度φ平均平方VF0値P値
日照0.12510.125142.3%
活力剤0.12510.125142.3%
初期に化成0.12510.125142.3%
日照・活力剤0.12510.125142.3%
日照・初期に化成0.12510.125142.3%
E誤差0.2520.125
T(合計)0.8757

平均平方Vは各行のSを同じ行の自由度φで割ったものです。

F0は各行のVを誤差行のVで割ると出ます。

P値はエクセルの関数で

=1-(F.DIST(F0値,1,2,TRUE))

で出ます。

統計の世界で出てくるF分布の確率を求めているのですが、F.DISTの最初の引数で各行のF0値を入力、第二引数でその行の自由度入力、第二引数で誤差自由度を入力、第三引数で累積確率を求めたいのでTRUEを入力します。

今回はP値がすべて42.3%で5%以下には程遠いので要因効果があるといえる要因があるとは言えないということになります。

せっかく計算したのに意味がないと言われているようで残念です。

しかしまあ発症のデータがある変数の組み合わせは1種類しかなく、そうなると結局それは誤差ですという結論になるんでしょうね。

ただし要因効果があると言えないときに、要因効果がないといえるわけではないということなので、まあ変数の影響はあるんじゃないかとも考えられます。

グラフではちゃんと影響あるみたいに出ましたからね。

この次の手順としてプーリングという分散分析表で扱う変数を削減する処理をするのですが、今回はそれができないのでここまでとなります。

プーリングすると変数を絞るので影響度が出やすくなる効果があるのですが今回はできないのです。

P値が高い、F0が低いものをプールするのですが、今回はすべての変数がそれに該当してしまい、減らせません。

また交互作用があるものを残すのですが、交互作用を残すと使った変数も残さねばならず、すると交互作用にすべての変数が含まれているのですべての変数を残すことになり、やはり減らせません。

というわけで今回はここまで。

でもグラフで

「発症しやすい可能性が高いのは、日照が多い、活力剤がない、初期に化成を施す、活力剤がない状況で日照が多い、初期に化成を施す状態で日照が多い」

ということは導けたので、まあまあ結果は出たのではないでしょうか。

統計的には誤差と判定はされましたが。

変数の影響を考えてみたいという時には有効でしょう。

ここから実験計画法上の最適化に進むこともできますが、今回のテーマでは発症しないというのが目的なので、いくら発症する一番まずい状況を最適化で求めてもあまり意味がないのでやりません。

これで尻腐れ症関連のお話はおしまいです。

ここまでお付き合いいただきありがとうございました。