9K Views
December 20, 22
スライド概要
マテリアルズ・インフォマティクス 連続セミナー 第二回
動画(音量修正版、2022, Dec. 27修正):https://youtu.be/wrANu-Cqv_0 .
ソースコード(2023, Jan. 9 改定):https://bitbucket.org/kino_h/python_mi_seminar_2023/src/master/ .
マテリアルズインフォマティクスチュートリアル
2022年度 マテリアルズ・インフォマティクス 連続セミナー 第三回 木野日織(きのひおり)
データ解析学手法の四過程(再) データから 知見を得る 1. データを 収集する 2. データを 加工する 3. データか ら学習する 4. 結果の解 釈を行う (階層構造の一例)
Scikit-learnの使い方(再) 基本的な使い方が統一されています。 回帰・分類・クラスタリング X: (N,P) reg = LinearRegression(…) y: (N) reg.fit(X,y) yp: (N) yp =reg.predict(X) 規格化・次元圧縮 Xtransformed: (N,P) dr = PCA(…) dr.fit(X) Xtransformed =dr.transform(X) dr.fit_transform(X) としか呼べないモジュー ルもあります。
ディレクトリとファイル 010.regression/ 020.dimentionality_reduction/ 030.classification/ 040.clustering/ 110.hea4_dos_clustering/ 120.tomography/ 130.descriptor_importance/ 140.exhaustive_search/ 150.Bayesian_optimization/ 160.recommender_system/ 500.itemset_mining/ 510.ERS/ 900.misc/ README.md data/ data_calculated/ 020.050.text.dimentionality_reduction_carbon8.ipynb 020.110.answer.PCA_sample.ipynb 020.120.answer.PCA_sample2.ipynb dimred_misc.py image_executed/
データの紹介 3D-000 3D-001 炭素構造データ 元論文ではGRRM法により炭素8原子による結晶構 造の構造探索を行っています。 説明変数 Behlerの二体symmetry functionによる変換した量を説 明変数とする。著作権のため構造は本ハンズオンに 含まれません。 3D-003 3D-004 目的変数 著作権のため全エネルギーをsiestaでPBE+D2で計算 し直しています。このため論文の値が一致しません。 1. Makito Takagi, Tetsuya Taketsugu, Hiori Kino, Yoshitaka Tateyama, Kiyoyuki Terakura, and Satoshi Maeda, “Global search for low-lying crystal structures using the artificial force induced reaction method: A case study on carbon”, Phys. Rev. B 95, 184110, (2017) 2. Jörg Behler and Michele Parrinello, "Generalized Neural-Network Representation of High-Dimensional Potential-Energy Surfaces", Phys. Rev. Lett. 98, 146401(2007)
データの紹介 炭素結晶構造 観測データ sp, sp2-edge, sp2, sp2-cube, sp3 結晶内元素環 境ラベル付き 観測データ ラベル無し全 データ Carbon8_descri ptor_selected_s p.csv Carbon8_descri ptor.csv
scikit-learnクラスの説明 X: (N,P) 三次元に次元圧縮する場合の例を示します。 PCA X_pca: (N,3) from sklearn.decomposition import PCA pca = PCA(3) pca.fit(X) X_pca = pca.transform(X) t-SNE X_red: (N,3) from sklearn.manifold import TSNE red = TSNE(3) X_red = red.fit_transform(X)
データ取得 Jupyter notebookのcellの実行番号 デ ー タ 収 集 カテゴリー名がつい ているデータを観測 データとして読み込 む。 全観測データを未知 データと読み込む 説明変数カラムと 原子環境カラムの 定義。 次元圧縮なのでy は無い。
データ取得(つづき)とデータ加工 目的:観測データと新規データの取得 データ収集 観測生データ取得 データ規格化 データ加工 新規生データ取得 同じ規格化関数を用いたデータ規 格化で規格化した新規データ Xraw: (N,P) X: (N,P) Xraw_new: (Nnew,P) X_new: (Nnew,P)
データからの学習 目的:寄与率、累積寄与率の評価 寄与率:pca.explained_variance_ratio_:リスト そのサイズ=len(pca.explained_variance_ratio_) 累積寄与率:ある次元までの寄与率の和 説明変数の全次元を用いて PCA変換を行う。 データか らの学習 indx: (P) esum: (P) 累積寄与率のイン デックスのリスト 累積寄与率のリスト 変数の中身は以下でご確認ください。 print(indx, esum)
結果解釈 寄与率 累積寄与率 累積寄与率 plot_expratio:(次元 vs 寄与率もしくは累積寄 与率)の下の図を書く ユーザー定義外部関数 分かること: 一次元で説明変数空間の~80% 二次元までで説明変数空間の~90% を表現できている。 寄与率 一次元で十分かもしれませんが、以降の 図では二次元で説明変数空間の次元圧縮 を行い可視化します。
結果解釈 目的:二次元に次元圧縮すること。(2以上の数で変換して2次 元目までを用いても良い。) データか らの学習 観測データの次元圧縮 新規データの次元圧縮 X_rd : (N,ndim) X_rd_new: (N,ndim)
結果解釈 二次元に次元圧縮した観測データ、その原子カテゴリー名、新規データを用いる。 可視化するユーザー定義外部関数 PCAの二軸目 観測データはラベル付きで大きな symbolで示される。 新規データは薄い 点で示される。 PCAの一軸目
結果解釈 分かること: 1. ラベルは結晶構造を可視 化し目視で人がつけたが、 この説明変数である程度 妥当な分離ができている らしい。 2. 二次元でそれなりに分離 ができているだろう。 3. 二次元でなく一次元目だ けでもそれなりに分離が できている。 sp2と sp2_tube: 周りに3原子 ある原子環境 sp3: 周りに4原子 ある原子環境 sp2_edgeとsp: 周りに2原子あ る原子環境 推測できること: 3.高次元で可視化ができない 新規データ(薄い点)も原子 環境を妥当に表現できている ことが期待される。
ラベル毎に分離 した分布を得る 結果 低次元表現を可 視化する 観測データを収 集する データを加工す る データから学習 する 炭素結晶構造を 得る 加工済み説明変 数を得る PCAで次元圧縮 をする 物理的に考えてもそうだろうと いう結果。 原因 ある原子からの 距離依存性を用 いて変換する ベーラーの二体 対称性関数で変 換する 規格化する PCA変換次元数 を定義する ndim=2 分かったこと: 炭素結晶構造では、ベーラーの二 体対称性関数で変換し、更にPCA により変換された二次元説明変数 空間で、𝑠𝑝𝑛 原子環境をある程度 妥当に分離した分布が得られた。 PCAで変換する
次元圧縮:多様体学習 T-SNE 目的:毎回 同じ結果を 与える 距離 t-SNE: 類似度に変換してから次元圧縮を行 う。 距離間の関係を低次元で保つよう変換する 際に距離を制限する。 元の次元で無いと完全に距離関係を保つこ とは(多分)できないので、低次元で確率的 にデータ点を置く。この際に乱数が入る。 確率的な配置 metric={文字列} 考慮する近傍点 の数 Default, metric=‘euclidean’ Perplexity={実数} 観測データ数以 下、5-50を考え よ、とある。 random_state={整 数}
距離を制限した多様体学習の利点 スイスロールの展開 距離を制限した方法 考慮外 距離 考慮す る距離 近い 距離を制限しない方法 遠い TECHNICAL COMMENTS, Nature, Eric L. Schwartz, Nature 295 (2002).
次元圧縮:多様体学習 目的:t-SNEを用いた次元圧縮と可視化。 TSNEは.fit_transform()の形しかない。新規データを変換できる表式になっていないから。 警告メッセージ を消すため。 次元圧縮をして random_state, perplexityで結果がかなり変わる。 教師なし学習なのでどのパラメタが妥当ということは無い。 後で示すカテゴリー分離ができていなくても、失敗というわけでは無い。 ユーザー定義外 部関数で可視化 する。
多様体学習結果の可視化 分かること: この場合も近接原子数環 境の分布が分離している らしい。
次元圧縮 Q. 次元圧縮は低次元で可視化するため? A. 次元圧縮はかなり広い概念を含みます。 ニューラルネットワークのオートエンコーダーで潜在空間に変換することも次元 圧縮手法の一つです。 また、160.recommender_system/は教師なし学習の次元圧縮を用いた探索手法です。 データインスタンス数が少ない場合は次元圧縮を用いた方が高速に探索を行える 場合があります。
参考 分散が小さい軸に目的変数依存している例 020.050.text.dimentionality_reduction_carbon8.ipynb 020.110.answer.PCA_sample.ipynb 020.120.answer.PCA_sample2.ipynb dimred_misc.py image_executed/
分散が小さい軸に目的変数依存している例 それぞれの点が色に対応した値を持っているとします。 二次元変換後データ 二次元元データ 意味すること: 説明変数{𝑥Ԧ }で寄与率が大き い空間を切り出し、{𝑥Ԧ ′ }とし ても、妥当なモデル 𝑦~𝑓(𝑥Ԧ ′ ) ができるわけではない。 PCAで変換 では、どういう場合に妥当な のか? 短軸側に目的変数が依 存しているとする。 目的変数を参照しているわけ ではないので、当然長軸側が 一軸目となる。 新機能法なので、妥当かどうか は実際に適用し、評価しないと 判断できない。
回帰(classification)
ディレクトリとファイル 010.regression/ 020.dimentionality_reduction/ 030.classification/ 040.clustering/ 110.hea4_dos_clustering/ 120.tomography/ 130.descriptor_importance/ 140.exhaustive_search/ 150.Bayesian_optimization/ 160.recommender_system/ 500.itemset_mining/ 510.ERS/ 900.misc/ README.md data/ data_calculated/ delete_markdown_cell.py* 030.050.text.logistic_regression.ipynb 030.110.answer.ZB_WZ_logreg-cv.ipynb 030.120.answer.mono_structure_logisticregressionCV.ipynb image_executed/
データの紹介 閃亜鉛鉱構造とウルツ鉱構造のエネルギー差データ 説明変数 二元合金の元素説明変数, IP(イオン化ポテンシャル),EA(電子親和力), Highest_occ state energy, Lowest_unocc state energy, s,p の原子半径 目的変数 二元合金の閃亜鉛鉱構造とウルツ鉱構造のエネル ギー差dE Luca M. Ghiringhelli, Jan Vybiral, Sergey V. Levchenko, Claudia Draxl, and Matthias Scheffler, "Big Data of Materials Science: Critical Role of the Descriptor“, Phys. Rev. Lett. 114, 105503 (2015)
交差検定の予測値 分類モデルを得る ハイパーパラメタ を与えてモデル当 てはめを行う ハイパーパラメタ を最適化して予測 モデルを作る cls=LogisticRegressio n(…) cls=LogisticRegressio nCV(…) 分類モデルの予 測値を得る 与えれた予測モ デルの予測値 交差検定過程で の複数予測モデ ルに対する予測 値 y=cls.predict(X) y= cross_val_predict(c ls,X,y)
交差検定の予測値 分類モデルの予 測値を得る ここでは 与えれた予測モ デルの予測値 交差検定過程で の複数予測モデ ルに対する予測 値 y=cls.predict(X) y= cross_val_predict( cls,X,y) 曖昧に「交差検定の予測 値」というとこちらの意 味であることが多い。 1.最適なハイパーパラメタを得る。 2.「交差検定の予測値」を得る。 3.「交差検定の予測値」を用いて各種 評価指標値を得る。 4.観測データ全てを用いて学習した予 測モデルの予測値を得る。 を行う。
Scikit-learnの関数 * ロジスティック回帰 from sklearn.linear_model import LogisticRegression cls = LogisticRegression(penalty="L1",C=C) cls.fit(X,y) C: スカラー、ハイ ypred = cls.predict(X) パーパラメタ * 交差検定ロジスティック回帰 from sklearn.linear_model import LogisticRegressionCV kf = KFold(5, shuffle=True) cls = LogisticRegressionCV(penalty="L1",cv=kf) cls.fit(X,y) ypred = cls.predict(X) X:(N,P) y: (N) ypred:(N) 分類モデルを得る ハイパーパラメタ を与えてモデル当 てはめを行う ハイパーパラメタ を最適化して予測 モデルを作る cls=LogisticRegressio n(…) cls=LogisticRegressio nCV(…)
Scikit-learnの関数 分類評価指標 目的変数観測値: y(N) ,目的変数予測値:ypred(N) * 混同行列 from sklearn.metrics import confusion_matrix cm = confusion_matrix(y,ypred) # np.ndarrayが返る。 (K,K) * それぞれの評価指標値 from sklearn.metrics import accuracy_score from sklearn.metrics import precision_score, recall_score, f1_score score = accuracy_score(y,ypred) average=“weighted” # 加重平均で一つの全体の評価指標値を得る prec = precision_score(y,ypred, average=average) scalar recall = recall_score(y,ypred, average=average) f1 = f1_score(y,ypred, average=average) * classification report from sklearn.metrics import classification_report 文字列 msg = classification_report(y,ypred) # 文字列を返す。 print(msg)
Scikit-learnの関数 「交差検定の予測値」を得る関数。 (N) from sklearn.linear_model import LogisticRegression from sklearn.model_selection import cross_val_predict cls = LogisticRegression(C=C_opt) kf = KFold(5, shuffle=True) yp_cv = cross_val_predict(cls, X, y, cv=kf) 分類モデルの予 測値を得る 与えれた予測モ デルの予測値 交差検定過程で の複数予測モデ ルに対する予測 値 y=cls.predict(X) y= cross_val_predict(c ls,X,y)
データ取得 目的:生説明変数と生目的変数の取得 ファイルから観測 データの読み込み 説明変数カラム、 目的変数カラム の定義 (N,P) (N) 生説明変数 生目的変数の生成
データ加工 目的:データ規格化関数生成と加工(規格化)された説明変数の取得 目的変数をカテ ゴリー値に変換 y:(分類の)目的変数、 カテゴリー数:K このデータではK=2 (N) データ規格化 (N,P) X: 規格化された説明変数:
データからの学習 目的:最適なハイパーパラメタ値を得る 五回交差検定、ランダ ムに分割 1.交差検定ロジス ティック回帰の定義 2.ロジスティック回帰の 最適ハイパーパラメタを求 める。 3.全観測データ(X,y)を 用いて一つだけ予測モデル を求める。 出力:三角マークは押せる。
交差検定の予測値 分類モデルの予 測値を得る 与えれた予測モ デルの予測値 交差検定過程で の複数予測モデ ルに対する予測 値 y=cls.predict(X) y= cross_val_predict(c ls,X,y) 目的:訓練データ、テ ストデータ分割による 擬似的な(未知データ に対する)汎化性能の 評価
データからの学習と評価指標 目的: 「交差検定の予測値」(yp_cv: (N) )の生成と「交差検定の予測値」を用いた分類評価指標 値の出力。 最適なハイパーパラメタ(cls_cv.C_[0])がすでに求まった。 ハイパーパラメタ最適値を用いてロ ジスティック回帰モデルを定義 (N) 、交差 検定の予 測値 五回「交差検定の予測値」を生成す る。 「交差検定の予測値」を用いた分類 評価指標値の出力
データからの学習:各種評価指標 目的:各種評価指標の個別計算値を得る。 加重平均 スカ ラー 加重平均の場合は全体の 指標なのでスカラー
データからの学習:混同行列 目的:混同行列の作成。 cls_cv.classes_: (K) クラス数 混同行列を作るためのカテゴリー順序 はライブラリに与えていない。 (K) (K) (K,K) 行内に収まるよう に改行した。
交差検定の予測値 目的:未知データ に適用する予測モ デルの生成 分類モデルの予 測値を得る 与えれた予測モ デルの予測値 交差検定過程で の複数予測モデ ルに対する予測 値 y=cls.predict(X) y= cross_val_predict(c ls,X,y) 目的:訓練データ、テ ストデータ分割による 擬似的な(未知データ に対する)汎化性能の 評価
データからの学習(2) 目的:交差検定の予測値と全観測データを用いて生成した予測モデルによる予測値の比較。 全観測データを用いて生成した予測モデルによる予測値と予測確率の生成 (N) (N,K) 未知データは無いので、 全観測データを用いる。 全観測データを用いて生成した予測値を用いた混同行列 (K,K) (行幅に収ま るように改行 した。)
ディレクトリとファイル 010.regression/ 020.dimentionality_reduction/ 030.classification/ 040.clustering/ 110.hea4_dos_clustering/ 120.tomography/ 130.descriptor_importance/ 140.exhaustive_search/ 150.Bayesian_optimization/ 160.recommender_system/ 500.itemset_mining/ 510.ERS/ 900.misc/ README.md data/ data_calculated/ delete_markdown_cell.py* 030.050.text.logistic_regression.ipynb 030.110.answer.ZB_WZ_logreg-cv.ipynb 030.120.answer.mono_structure_logisticregressionCV.ipynb image_executed/ OvR法による多値分類問題例
クラスタリング
ディレクトリとファイル 010.regression/ 020.dimentionality_reduction/ 030.classification/ 040.clustering/ 110.hea4_dos_clustering/ 120.tomography/ 130.descriptor_importance/ 140.exhaustive_search/ 150.Bayesian_optimization/ 160.recommender_system/ 500.itemset_mining/ 510.ERS/ 900.misc/ README.md data/ data_calculated/ delete_markdown_cell.py* 040.050.text.clustering.ipynb 040.110.answer.fe2_clustering.ipynb clustering_misc.py image_executed/
データ取得 炭素構造データを用いる。 全観測データ取得 (N,P) カテゴリー名が ついている観測 データを新規 データとして取 得 (Nnew,P) 説明変数カラムの 定義 (Nnew) カテゴリー名の取得 sp, sp2, sp2_edge, sp2_tube, sp3
データ規格化とデータからの学習 目的:X,X_PCA,クラスタ予測値(yp_km)の作成。 観測生データ取得 (N,P) (N,2) データ規格化 可視化用に二次元に次 元圧縮した説明変数 クラスター数(K)=3と してk-means法を用いる (N,P) 学習と予測
可視化 目的:クラスタリング結果解釈の前にデータそれ自体の可視化して解釈する。 新規データの取得 (Nnew,P) (Nnew,P) (Nnew,2) 規格化変換 可視化用に二次元に次元圧縮変換 PCA2 ユーザー定義関数による可視化 1.データ分布は分離していない。 2.右肩下がりの斜めに分布している。 PCA1
結果解釈 k-means法を用いたクラスタリングと予測(再出) (N) 学習は説明変数の みを用いる。 X_PCA: (N,2), yp_km:(N) ユーザー定義関数 可視化のalpha channel (答えを知っているので 分かるが、)このデータ では妥当にクラスタリン グできない。
データからの学習と結果解釈 目的:ガウス混合法を用いたクラスタリングと可視化 (NCLUSTERS=3) (N) X_PCA: (N,2), yp_gmm:(N) 可視化のalpha channel (答えを知っているので 分かるが、)このデータ ではk-means法より妥当に クラスタリングできた。
階層クラスタリング 目的:(Nnewでは教材として可視化するためには数が多いので)数を減らす。 (15,P), (15) 15に数を減らした説明変数とそのカテゴリー名ラベル 参考)変数の中身を見るには,たとえば、Jupyter notebookのセルにans_list_sampleと入力し実行する。
階層クラスタリング 目的:階層クラスタリングと可視化 X_sample: (15,P)とans_list: (15)を用いる。 (15*14/2)、一次元化 した上三角行列成分 (14,4) 、 Dendrogram上流 の位置情報が入 る。 ユークリッド距離を用いて類 似度距離行列の計算をする。 上位のクラスタ間の距離の計 算方法としてcomplete法を用 いる。 上流から下 流が左から 右になるよ うに書く。
Pdistで使用可能なmetric(距離実装) scipy.spatial.distance.pdistのNotes部分 使用可能な距離実装(metric)の名 前と定義、使い方例が書いてある。 scipy.spatial.distance.pdist https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.pdist. html
上位クラスター間の距離定義(method) scipy.cluster.hierarchy.linkage https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.linkage.html?highlight=linkage “complete”は下位クラ スターに含まれるデー タ点間距離の最大値。
可視化結果 近接原子2つ 近接原子4つ 近接原子3つ 階層クラスタリングは対話的なクラ スタリング手法です。 解析者の目的に応じて、パラメタ (Metric, method)を選択できます。
クラスタリング手法 距離実装は Eucleadeanのみ。 教師なし学習、 カテゴリー分け 手法 階層クラスタリ ング クラスタリング sklearn.cluster.K Means sklearn.mixture.G aussianMixture Scipy定義 scipy.spatial.dista nce.pdist 二点間距離実装 metric 二点間距離を得 る 上位クラスター 間の距離を得る 独自定義 距離行列作成 一次元表現への 変換 Scipy.spatial.dista nce.squareform scipy.cluster.hier archy.linkage 上位クラスター 間距離定義 method
参考 010.regression/ 020.dimentionality_reduction/ 030.classification/ 040.clustering/ 110.hea4_dos_clustering/ 120.tomography/ 130.descriptor_importance/ 140.exhaustive_search/ 150.Bayesian_optimization/ 160.recommender_system/ 500.itemset_mining/ 510.ERS/ 900.misc/ README.md data/ data_calculated/ delete_markdown_cell.py* 鉄構造データを用いたクラスタリング・階層クラスタリング 040.050.text.clustering.ipynb 040.110.answer.fe2_clustering.ipynb clustering_misc.py image_executed/
内容 鉄構造データの ⚫ クラスタリング ⚫ 階層クラスタリング ◆ データインスタンスに関して ◆ 説明変数に関して • 独自距離定義方法
微小変位を入れた鉄構造データ BCC構造 FCC構造 HCP構造 鉄構造データ 1.微小変位を加えた結晶を作る。 2.Behlerの二体対称性関数で説明変数に変換する。 説明変数:二体対称性関数生成時のパラメタ 目的変数:無し 観測データ 新規データ Fe2_descriptor .csv Fe2_descriptor _newdata.csv
今回のセミナーは以上になります。