最近のマイブーム:機械学習のお勉強

最近流行りの機械学習ですが、私も最近少し勉強しています。

モチベーションとしては、仕事においてあまりにも捨てている情報が多すぎるということが挙げられます。データはあるのに、これを十分活かしきれていない。例えば、何か制御したい製品物性(強度など)があり、その製品の構造解析の結果(NMR, IR, XRD・・・)がある。製品の開発指針を打ち立てるため、製品物性にどの構造が寄与しているのか知りたいということがよくあります。しかし、なぜか皆何か一つのパラメータ(例えば結晶化度)と製品物性(例えば強度)とをグラフにプロットして満足している。何か一つのパラメータで製品物性が説明できる場合には良いですが、往々にして複数の構造パラメータが強度に影響を与えていることがあります。この時、一つのパラメータと製品物性との関係をプロットしても、どのパラメータが製品物性に寄与しているかおそらくわかりません。多次元空間で構造と製品物性との関係を理解しなければなりません。このような場合、回帰分析などの機械学習が有用だと考えました。さらに、非線形でなければ説明できない場合は、SVRなども有用でしょう。

以上が初めのモチベーションでしたが、最近関心がある機械学習の応用として、生データ(例えばNMRチャート)と製品物性との関係を直接機械学習により明らかにできないか、ということです。もしこれが可能であるならば、いちいちピークの面積やピーク位置などの特徴量を人間が読む必要がなくなります。また、人間が捉え、数値化できる特徴量は限られていますし、労力もかかりますから、生データをぶち込んで機械が勝手にどの特徴量が重要か明らかにしてくれれば、労力も削減でき、また、今まで人間か気づかなかった特徴量を発見できるわけです。最近このような試みも行っています。

以上のような目的を達成するため、CourseraのMachine Learningを受講しました。オンライン講座なのですが、無料で有名大学の講義が受講できます。良い時代になったものです。このコースは理工系の学部をでていて、線形回帰くらいの事前知識はあり、少しはプログラミングもできる、くらいの人には非常に良い入門だと思います。このコースの良いところは、毎回Octaveでのコーディングの宿題が出ることです。プログラムのコアの部分だけ空白になっていて、抜けている部分もコーディングをすると、機械学習のプログラムができます。毎回授業で理論をなんとなく理解し、宿題でコーディングを行いどのように動くのか理解することで、実際に仕組みが理解できるようになります。

この後は、kaggleの入門者用のデータセット(住宅価格予測)で実際にプログラムを作り、予測してみました。主な目的は、Courseraで理解できた機械学習手法を、pythonのscikit-learnを使って、コーディング出来るようになることです。scikit-learnを使うと、簡単に機械学習が実装できることに感動しました。

その後、実データに対してscikit-learnを使って、機械学習を適用してみました。いくつか問題はあるものの、当初のモチベーションのいくつかは達成できました。正直ポリマーの開発よりこのような業務の方が楽しいです。今後も勉強を続けていきたいと思っています。