Pirika logo
JAVA,HTML5と化学のサイト

Pirika トップ・ページ

Pirikaで化学
 物性化学
 高分子化学
 化学工学
 分子軌道
 情報化学

 その他の化学
 アカデミア
 MOOC講義資料
 プログラミング

ハンセン溶解度パラメータ(HSP):
 HSP基礎
 HSP応用
 ポリマー
 バイオ・化粧品
 環境
 物性推算
 分析
 化粧品の処方設計
 その他
 自分でやってみよう

雑記帳

Ad Space for you

 

Ad Space for you

 

 

 

Last Update

25-Jan-2019

ぴりかで化学情報化学: PCA(主成分分析)

2019.1.22  非常勤講師:山本博志 講義補助資料


自分は、数学が嫌いで化学の道に進んだ。そんな自分がPLS法やPCA法を教えるのはもってのほかだと思う。詳しい事は章末の書籍で自分で学んでほしい。記述に誤りがあればご指摘いただきたい。

しかし、スマホの原理を知らなくてもスマホは使える。実際に使ってみてから、その解析手法がどんな特徴を持っているかを実感として身につけて行くのでも良いと思っている。PLS法の解析の章でも述べたが、線形重回帰、主成分分析、PLS分析どれにも共通して言えることは、化合物の物性と分子構造との関係を解析したいということだろう。それを定量的に行うのが回帰分析だと自分は思っている。要は求めたい目的変数(y)に対して、知りたいものの性質を表すものを説明変数(x)として、
y=function(X1・・Xn)
の関係を定量的に知りたいと言う事である。主成分分析は逆行列を求めなくてはならない手間が大きい。行列が大きくなってくるとPLSの方が有利になる。逆にPLSには無く主成分分析にある特徴は何かあるのだろうか? それについてここで見ていこう。

ブラウザーバージョンのPCAプログラムを立ち上げてみよう。

PCA Calculator
上のような画面が現れる。Subtrack AverageとNormaliseにチェックを入れる。

そして、まず最初はPLS法でもやった、スペクトルとオクタン価の関係をPCAで解析してみよう。下記のデータをコピーして表計算ソフトにペーストしておこう。

このデータは、1−36水準の近赤外のスペクトルデータと第2列目にはオクタン価が入ったテーブルになる。つまり、目的変数はオクタン価、説明変数はスペクトル値となる。これをPCAソフトの上部のテキストエリアにペーストする。そしてRead Dataボタンを押して、Calc. PCAボタンをおす。このぐらいのサイズの計算であれば、結果はすぐに表示されるだろう。

Octane number calc. by PCA

結果を全て選択して、テキストエディターにペーストしておく。結果のうち最初の1行目からは主成分をいくつ選択したらどのくらい現象を正しく記述できるかが示されている。図で見てみよう。

Principle Compornent

4つぐらいの主成分で99%以上記述できていることがわかる。この意味を考えてみよう。もともとのデータは、36のスペクトルデータから、1つのオクタン価に紐づけられているデータがあった。つまり36次元ベクトルであった。

Spectrum of gasoline

ところが、この36次元ベクトルはPLSの所でも示したように非常によく似たベクトルである。人間は3次元ベクトル以上は頭の中に思い浮かべられないので、次元を下げることを考える。

Rotate Axis

例えば、左の図では2次元のベクトルが5つある。ベクトルの大きさは異なるが、向きは非常に似ている。そこで、X軸、Y軸を回転してあげると右のようになる。X’軸はだいたい元のベクトルの大きさとなり、Y'軸は非常に小さな値になる。Y'の値が十分小さければ、軸の回転によって2次元ベクトルを1次元ベクトルに下げたことになる。

元々36次元ベクトルあったものは、軸の回転によってどのくらい次元が下げられるか?と言う質問に対して、PCA分析は、5つの大事な軸を使えば、99.68%元のベクトルを表現できると言う答えを返している。この大事な軸のことを5つの主成分と呼んでいる。各軸は直交していることが必要になる。直交と言うのはベクトルの内積がゼロであると言うことだ。元のX,Y軸も(1,0)*(0,1)で内積はゼロになる。独立成分分析というのはこの内積がゼロという条件すら取り除いてしまった解析法である。

難しい話は、ソフトが皆やってくれる。大事な軸が幾つあるか?だけに集中しよう。

ここまでの話は、オクタン価(yの値)は全く使っていない。そこがPLSと大きく違う所だ。説明変数がたくさんあるときに、説明変数を減らす事ができるというだけのことだ。
y=function(X1・・X36)
y=function(X'1・・X'5)
最初に述べたが、やりたい事は定量的にオクタン価を予測する回帰式を得ることだ。そこで、大事な軸5だけを使ってfunctionを求めてあげる事を考えなくてはならない。そこで、X1-X36からX'1-X'5へ変換したテーブルを作る必要がある。それには先ほどのPCA計算結果の中のCalculate Schemeを抜き出してくる。

第1主成分は、
0.2100103141999724*C2+0.21570854997480743*D2+.... -0.09923093239537442*AL2
で表される。これは表計算ソフトの計算式そのものなので、テーブルの後ろの方の2行目にペーストする。

PCA Table
そして、C列からAL列の値をPC1-PC5に変換したテーブルを作成する。PLS法と違って有利な点は、このテーブルの変換はy(オクタン価:B列)を使っていないので、予測したいスペクトルも変換できる点だ。(PLSではそれ用のプログラムを書かなければならなかった)

Result of Prediction

主成分5つのとオクタン価のテーブルを作り、重回帰解析を行えば上図のように簡単に主成分回帰の結果が得られる。PLSの結果(下図)と比べてもほとんど変わらない結果となる。

PLS regression of Octane #

定量的解析では、PLSでは予測値を得るのに、プログラミングの知識が少し必要になる。どちらを使うかは好みとも言える。定性的解析では、重要な軸を使って、化合物を分離(毒がある、ない、燃える、燃えない)するには主成分分析の方が多く使われているような気がする。まーどちらも使えるに越した事はない。

次にPLSと同様に有機化合物の水への溶解度を検討してみよう。

PCA water solubility

RDKitの出力、117識別子を使った場合には、次元数40まで減らせる事がわかる。(40の時に97%を超えるからといって、水への溶解度の推算精度が高いわけではない。この段階では、水への溶解度のデータは使っていない。)40主成分を使って重回帰計算を行うと以下のようになる。式を作るのに使わなかった化合物を予測してみるとそれなりに推算できている。

PCA 40 Water Solubility

PLS法ではNP15で評価した。

Solubility to water calc. by PLS

そこでPCAでもPC15で重回帰式を作成してみる。

PCA 15 water solubility

少しPLS法の方が良いような気がする。

このようにPCA法とPLS法親戚関係のような解析法なので、目的に合わせて使いこなして行けば良いと思う。大事なのは、RDKitの識別子だけでは精度はいまいちで、さらに良い識別子を探せるか?だろう。ニューラルネットワーク法などの機械学習をすればもう少し見かけはよくなると思う。しかしその方法では、データが増えてくれば予測性能が必ず低下する。本質的な水への溶解度を上げ下げする識別子を探す方が結局は早道である。

プログラムのタネ本は、「Excel VBAによる化学プログラミング、佐藤寿邦・佐藤洋子共著 培風館 2002年」である。ここに記載のVBのプログラムをJavaScriptに変換した。

主成分分析に関する書籍はPLSのものとかぶる。
ケモメトリックス 化学パターン認識と多蛮量解析 宮下芳勝・佐々木慎一著 共立出版 平成6年
化学者のための多変量解析 ケモメトリクス入門  尾崎幸洋・字国明史・赤井俊雄/著 講談社サイエンティフィク 2002年
ケモインフォマティックス 予測と設計のための化学情報学
J.Gasteiger・T.Engel 編 船津公人 監訳
船津 公人 ・佐藤 寛子 ・増井 秀行 訳  平成17年
これならわかる化学のための統計手法 丹羽誠 化学同人
多変量解析の考え方 井上勝雄 筑波出版会
多変量解析の展開 甘利俊一ら 岩波書店
多変量解析ハンドブック 柳井晴夫ら 現代数学社
多変量統計解析 田中豊ら 現代数学社 

色々な本で勉強したが、本質的に数学は嫌いなのでモノにはならなかった。。。