リッジ回帰とLasso回帰をOffice Scriptで

最近のExcelには自動化タブがあって、TypeScript(JavaScriptの方言)で書いたプログラムが走る。JavaScriptからTypeScriptへの変換はとても簡単だ。
これまでに作ってきたGROVE解析ツールをExcelに移植した。

特に配合処方が問題になる、化粧品塗料インクなどではこの技術はとても大事になる。
ここでは、配合処方/塗料/塗料解析例2で説明した系に新しいプログラムを適用してみる。
特許に記載の帯電性をGauss-Jordan(Pivot)法で重回帰計算(これもOfficeScriptで計算するプログラムを作成した)すると下図に示すようにそれなりの精度で計算できる。

下のテキストエリアの中身をExcelにコピペしておこう。


Excelの重回帰だと説明変数は16までしか計算できないが、Solverを使うか、RなりPythonのツールなりで計算してみよう。

重回帰法というのは、物性値を次のように計算する。
y= a1*x1 + a2*x2+a3*x3 ・・・・・・an*xn+const
x1からxnは各実験値だ。この特許では21種類の入力値がある。

うまいこと重回帰が計算できると、a1-anまでの係数が求まり、任意のx1-xnの時の帯電性が計算できる。

中学ぐらいの時にやった、連立方程式の解を求めるのと同じだ。

この場合、次のように求まった。
a1 -826.2221906
a2 36.99783268
a3 93.62378908
a4 0.138557322
a5 0.094375916
・・・・
a21 0.143563586
const -8.695752118

問題なのは最初の3つの係数だ。
とても大きい。
このような係数だと、例えばS1-2の成分を、20.41から、21.41に1変えただけで、帯電性のの予測値が36.9978大きくなる。○✖️△の指標なので、最大でも4までのはずなのだが。

つまり、グラフで見ると、良好な回帰モデルが構築できたように思えるかもしれないが、予測性能はほとんどない。
ある意味、過学習を起こしてしまっている。

そのような時に、機械学習の教科書は、正則化(regularization)を行うと教える。これは簡単に言えば一種の罰則を与えることだ。

yの値(実験値)
yの計算値= a1*x1 + a2*x2+a3*x3 ・・・・・・an*xn+const
誤差=yの値(実験値)- yの計算値

重回帰の答えとしては、誤差が小さなことはまず必要になる。
誤差の自乗を使うか、誤差の絶対値を使うかは選べる。

次に、a1 – anの係数が大きい時には罰則を与える。

リッジ回帰の場合は係数の2乗、Lasso回帰の場合には係数の絶対値の総和が小さければ小さいほど良いモデルと評価する。
誤差の総和と係数とのバランスが難しいが、必要であれば計算しながら調整していく。
(ラムダの値を調整する)

エクセルの先頭数行はパラメータの設定に使う。
オレンジのところは自分で設定する。
OffceScriptのプログラムはOneDriveに保存されているが、自分はテキストとして別に配布している。
エクセルで自動化を選択して、スクリプトを読み込む。
後は実行ボタンを押せばモデルを作成してくれる。

ここではLasso回帰を選んだ。
Lasso回帰では、a1 -anの係数の絶対値の和を小さくすると共に、不必要な(結果に影響を与えていない列の)axを0に持っていく。
係数は先ほどとは異なり、非常に小さな値になる。
a1 2.2835E-05
a2 0.039043344
a3 5.73615E-05
a4 0.04913421
・・・
a21 0.049509274
Const 8.02557E-06

結果をプロットすると、2点ほど大きくずれるものがある。
こうした計算を、エクセルの上でパラメータを変えながら検討できるようになったのはとても仕事がしやすくなった。

ExcelのマクロはこれまでVBAで書かれていた。
これがウイルスの元凶になったことから、まず走らせることはない。
TypeScript、JavaScriptはブラウザーで実証されているように、危険性はとても小さい。今後エクセルのマクロはどんどん、こちらに変わっていくだろう。

機械学習用のさまざまなツールの変換がほぼ終了した。
良い時代になったものだ。