DCEKit (Data Chemical Engineering toolKit) を PyPI にリリース!

これまで化学データ・化学工学データのデータ解析に役立つツールや金子研で開発された手法に関する Python コードを Github にて公開してきました。このたびは、これらのツール・手法 (の一部) に加えて、新たな機能を追加して、DCEKit (Data Chemical Engineering toolkit) という形でリリースします!

 

Github: https://github.com/hkaneko1985/dcekit

PyPI: https://pypi.org/project/dcekit/

 

PyPI に登録しましたので、

 

pip install dcekit

 

とすれば簡単にインストールできます。たとえば Anaconda を使っている方は、Anaconda Prompt を起動して、

 

pip install dcekit

 

と入力して実行すれば OK です。Anaconda Prompt の起動の仕方についてはこちらをご覧ください。

Anaconda のインストールから jupyter notebook の起動まで (Windows編とmacOS編)
Python でプログラミングするときの事前準備の話です。Anaconda をインストールして jupyter notebook を使いたい方はぜひご覧ください。Windows 編と macOS 編があります。ご自身の OS にあわせてどう...

 

こちらが DCEKit の取説です。

DCEKit (Data Chemical Engineering toolKit) のクラスや関数の解説 (取扱説明書)
こちらのDCEKit (Data Chemical Engineering toolKit) について、 クラスや関数の解説をします。少し長いですが、「Ctrl + F」で知りたいクラス・関数の名前を検索してもらえるとうれしいです。黄色のマ...

 

今後は、DCEKit に機能を追加する形で、引き続き研究・開発を行って参ります。DCEKit がどんどん拡張するわけですね。

Github のページには、DCEKit における各機能のデモンストレーションの Python コードやサンプルデータセットもありますので (これらのコードは pip install dcekit ではインストールされません)、DCEKit をインストールしてから、まずはそちらからお試しいただくのがよいと思います。

それでは、デモンストレーションの Python コードの案内を含めて、DCEKit の機能を紹介します。

 

Generative Topographic Mapping (GTM)

データの可視化手法の GTM を実行できます。GTM の詳細はこちらを御覧ください。

Generative Topographic Mapping (GTM)~自己組織化マップ(SOM)の上位互換の手法~
Generative Topographic Mapping (GTM) について、pdfとパワーポイントの資料を作成しました。GTMの特徴や、データセットが与えられたときにGTMで何ができるか、GTMをどのように計算するかが説明されていま...

 

デモンストレーションとして、demo_gtm.py をお試しください。

 

k3n error (k–nearest neighbor normalized error for visualization and reconstruction)

GTM をはじめとして、可視化手法は教師なし学習ですので、可視化した結果を評価することが難しいです。これまでは主観での評価しかされていませんでした。そんな中、k3n error という、可視化した結果を評価する指標を開発しまして、

データの見える化・可視化をした結果を評価する指標を開発しました、ハイパーパラメータの設定もこれでOK (Python・MATLABプログラムあり)
応化先生と生田さんが論文 “k-nearest neighbor normalized error for visualization and reconstruction – A new measure for data visualiz...

 

DCEKit にも搭載しました。

GTM のハイパーパラメータを最適化する k3n error のデモンストレーションとして、demo_opt_gtm_with_k3nerror.py をお試しください。

 

Sparse Generative Topographic Mapping (SGTM)

GTM はデータの可視化手法ですので、データのクラスタリングをしたいときは、k-means, 階層的クラスタリングなど、別途クラスタリングを行う必要があります。これは面倒ですし、可視化の手法とクラスタリング手法は別物ですので、基本的には可視化結果とクラスタリング結果とは整合性が取れません。そこで、GTM のアルゴリズムを改良して、データの可視化とクラスタリングを同時にできる手法 SGTM を開発しました。

Sparse Generative Topographic Mapping(SGTM): データの可視化とクラスタリングを一緒に実行する方法 [金子研論文]
今回は、Sparse Generative Topographic Mapping (SGTM) という、GTM のアルゴリズムを改良することで、データの可視化をすると同時に、クラスタリングも一緒に実行できる手法についてです。この手法を開発...

 

SGTM も DCEKit に搭載されています。

デモンストレーションとして、demo_sgtm.py をお試しください。

 

Generative Topographic Mapping Regression (GTMR)

GTM を改良して回帰分析にも応用できるようにしまして、それにともない、モデルの逆解析やモデルの適用範囲の設定も同時にできるようになりました。

Generative Topographic Mapping(GTM)でデータの可視化・回帰分析・モデルの適用範囲・モデルの逆解析を一緒に実行する方法 [金子研論文]
今回は、Generative Topographic Mapping (GTM) でデータの可視化・回帰分析・モデルの適用範囲・モデルの逆解析を一緒に実行できる手法を開発し、QSPR 解析・QSAR 解析と分子設計を行った論文が、molec...

 

デモンストレーションとして、以下のものをお試しください。

  • 回帰分析: demo_gtmr.py
  • 回帰分析(目的変数が複数) : demo_gtmr_multi_y.py
  • クロスバリデーション: demo_opt_gtmr_with_cv_multi_y.py
  • モデルの逆解析: demo_inverse_gtmr.py
  • モデルの逆解析(目的変数が複数): demo_inverse_gtmr_with_multi_y.py

 

Gaussian Mixture Regression (GMR)

もともとはクラスタリング手法であった Gaussian Mixture Models (GMM) を回帰分析にも応用できるようにした手法です。GTMR と同じく、モデルの逆解析やモデルの適用範囲の設定も同時にできますし、目的変数が複数あっても OK です。

[Pythonコードあり] 教師あり混合ガウスモデル(Supervised Gaussian Mixture Models)で回帰分析も逆解析も自由自在に♪~Gaussian Mixture Regression(GMR)~
混合ガウスモデル (Gaussian Mixture Models, GMM) を教師あり学習に対応させた Gaussian Mixture Regression (GMR) について、pdfとパワーポイントの資料を作成しました。GMM に...

 

デモンストレーションとして、以下のものをお試しください。

  • 回帰分析・モデルの逆解析(目的変数が複数): demo_gmr.py
  • クロスバリデーション: demo_gmr_with_cross_validation.py

 

さらに、こちらに書いたように

[Pythonコードあり] iterative Gaussian Mixture Regression(iGMR)で欠損値を補完しましょう!(目的変数があってもなくても構いません)
下図のような欠損値 (欠損データ) のあるデータセットがあるとします。穴あきのデータセットですね。 こんなときに、穴の空いたところである欠損値を補完する方法を提案します。上の図のようなデータセットを下図のようにできます。 たとえば、論文や特...

 

GMR により欠損値を補完することができます。デモンストレーションとして、demo_gmr_with_interpolation.py をお試しください。

 

midpoints between k-nearest-neighbor data points of a training dataset (midknn)

バリデーションデータをデータの中点で作成する方法です。クロスバリデーションの代わりに使うことができます。midknn の詳細はこちらをご覧ください。

[Python・MATLABコードあり] クロスバリデーションしないで非線形回帰モデルのハイパーパラメータを最適化する方法~サンプルの中点の活用~
どうして クロスバリデーション しないの? データ解析をしていると、いろいろな理由でクロスバリデーションを使いたくない、もしくはクロスバリデーションを使えないことがあります。 一つはサンプルが少なすぎるときです。クロスバリデーションでは、最...

 

デモンストレーションとしてサポートベクター回帰 (Support Vector Regression, SVR) のハイパーパラメータの最適化に midknn を用いた例があります。demo_midknn_in_svr.py をお試しください。

 

サポートベクター回帰 (Support Vector Regression, SVR) のハイパーパラメータの高速最適化

こちらに書いた、SVR のハイパーパラメータの高速最適化です。

[Pythonコードあり] サポートベクター回帰(Support Vector Regression, SVR)のハイパーパラメータを高速に最適化する方法
サポートベクター回帰 (Support Vector Regression, SVR) は、こちら:サポートベクター回帰(Support Vector Regression, SVR)~サンプル数10000以下ならこれを使うべし!~ にある...

 

デモンストレーションとして、以下のものをお試しください。

  • クロスバリデーションを用いた場合: demo_fast_opt_svr_hyperparams_cv.py
  • midknn を用いた場合: demo_fast_opt_svr_hyperparams_midknn.py

 

Kennard-Stone アルゴリズムによるサンプル選択

こちらに書いたように

回帰分析・クラス分類をするときの、モデル構築用データ (トレーニングデータ) とモデル検証用データ (テストデータ) の分け方 [Kennard-Stoneアルゴリズムのコードあり]
回帰分析やクラス分類をするとき、大きな目的の一つは、新しいサンプルに対する推定性能が高いモデルを構築することです。なので、モデルを構築したとき、そのモデルの 新しいサンプルに対する推定性能を検証する必要があります。 今、いくつかのサンプル・...

 

モデル構築用データ (トレーニングデータ) とモデル検証用データ (テストデータ) の分ける方法です。あるデータセットから、代表的なサンプルを選択することができます。

デモンストレーションとして、demo_kennard_stone.py をお試しください。

 

 

ダブルクロスバリデーション (Double Cross-Validation, DCV)

サンプル数が小さいときの、回帰分析手法・クラス分類手法を評価する方法であるダブルクロスバリデーション (Double Cross-Validation, DCV) です。

ダブルクロスバリデーション(モデルクロスバリデーション)でテストデータいらず~サンプルが少ないときのモデル検証~
回帰モデルやクラス分類モデルを検証するときの話です。 モデルの検証 一般的には、データセットが与えられたとき、サンプルをモデル構築用サンプル (トレーニングデータ, training dataset) とモデル検証用サンプル (テストデータ...

 

scikit-learn の GridSearchCV のオブジェクトさえ準備すれば、DCV を実行できますので、応用しやすいと思います。

PLS を対象とした DCV のデモンストレーションとして demo_double_cross_validation_for_pls.py をお試しください。

 

 

y-randomization

モデルの逆解析などに用いる最終的なモデルに、Chance Correlation (偶然の相関) がどれだけ潜んでいるか確認する y-randomization です。

y-randomizationで過学習(オーバーフィッティング), Chance Correlation(偶然の相関)の危険度を評価!
回帰モデル・クラス分類モデルの評価 のなかで、yランダマイゼーション (y-randomization) についてです。y-scrambling と呼んだりもします。 やることは簡単で、目的変数 y の値をサンプル間でシャッフルして、回帰モ...

 

ガウス過程回帰 GP や線形重回帰分析OLS のようにハイパーパラメータのない手法に関しては、デモンストレーションとして demo_y_randomization.py をお試しください。

ハイパーパラメータのない手法に関しても、DCV と同じように scikit-learn の GridSearchCV のオブジェクトさえ準備すれば、y-randomization を実行できますので、応用しやすいと思います。デモンストレーションとして demo_y_randomization_with_hyperparameter.py をお試しください。

 

 

Chance Correlation‐Excluded Mean Absolute Error (MAECCE)

y-randomization を活用して、テストデータのMAEをトレーニングデータから推定する方法です。

[Pythonコード付き] テストデータのMAEをトレーニングデータから推定する方法を開発したので紹介します [金子研論文]
回帰分析において、新しいサンプルを推定するときの誤差の絶対値の平均値を推定するための指標を開発しました。イメージとしては、テストデータとしてサンプルがたくさんあるときの、モデルの適用範囲 (Applicability Domain, AD)...

 

こちらも scikit-learn の GridSearchCV のオブジェクトさえ準備すれば、y-randomization を実行できますので、応用しやすいと思います。デモンストレーションとして demo_maecce_for_pls.py をお試しください。

 

 

r2 based on the latest measured y-values (r2LM)

時系列データ用の r2 です。

ソフトセンサーの検討など時系列データを解析するとき用のモデルの評価指標 (改良版 r2) [金子研論文]
わたしもついに Beware of ... 系の論文を書いてしまいました。その名の通り、注意喚起する系の論文です。過去には他にこんなものがありました。 Beware of q2! Beware of R2: Simple, Unambigu...

 

デモンストレーションは次の LWPLS のデモンストレーションをご覧ください。

 

 

Locally-Weighted Partial Least Squares (LWPLS, 局所PLS)

PLSが非線形性に対応した手法です。ソフトセンサーにおいて just-in-time モデリングの 1 つです。scikit-learn に準拠していますので、cross_val_predict や GridSearchCV を使えます。

Locally-Weighted Partial Least Squares (LWPLS, 局所PLS) ~あのPLSが非線形性に対応!~ [Python・MATLABコードあり]
Partial Least Squares (PLS) を変数間の非線形性に対応させた Locally-Weighted Partial Least Squares (LWPLS, 局所PLS) について、pdfとパワーポイントの資料を作成...

 

デモンストレーションとして demo_lwpls_r2lm.py をお試しください。LWPLS で時系列データの解析を行うデモンストレーション demo_time_series_data_analysis_lwpls_r2lm.py もあります。

 

 

相関係数 r に基づく変数選択・変数のクラスタリング

こちらの相関係数で変数選択したり変数のクラスタリングをしたりする方法です。

[Pythonコード付き] 相関係数で変数選択したり変数のクラスタリングをしたりしてみましょう
回帰分析やクラス分類をする前の、データセットの前処理の話です。2 つの説明変数 (記述子・特徴量) の間で、相関係数の絶対値が大きいとき、それらの変数は似ているということです。余計な変数は、回帰モデル・クラス分類モデルに悪影響を及ぼすため、...

 

相関係数の高い変数を選択するデモンストレーションとして demo_search_highly_correlated_variables.py を、相関係数でクラスタリングするデモンストレーションとして demo_clustering_based_on_correlation_coefficients.py をご覧ください。

 

 

ベイズ最適化 (Bayesian Optimization, BO)

https://datachemeng.com/bayesianoptimization/
https://datachemeng.com/bayesian_optimization_for_multiple_y/
BO のデモンストレーションとして、demo_bayesian_optimization.py をご確認ください。
さらに、demo_bayesian_optimization_multiple_y.py では目的変数が複数の場合に対応しています (このプログラムの使い方に関しては こちら をご覧ください)。
デモンストレーションとして、
  • demo_semi_supervised_learning_low_dim_no_hyperparameters.py (GP, OLS のようにハイパーパラメータのないモデリング手法)
  • demo_semi_supervised_learning_low_dim_no_hyperparameters_with_ad.py (GP, OLS のようにハイパーパラメータのないモデリング手法、AD を考慮して教師なしデータを選択)
  • demo_semi_supervised_learning_low_dim_with_hyperparameters.py (PLS, SVR のようにハイパーパラメータがあるモデリング手法)
  • demo_semi_supervised_learning_low_dim_with_hyperparameters_with_ad.py (PLS, SVR のようにハイパーパラメータがあるモデリング手法、AD を考慮して教師なしデータを選択)

があります!

 

 

サンプルを転移するタイプの転移学習 (Transfer Learning)

scikit-learn に準拠していますので、cross_val_predict や GridSearchCV を使えます。

[解析結果とPythonコードあり] 転移学習 (Transfer Learning) を用いたデータ解析
転移学習 (Transfer Learning) について、パワーポイントの資料とその pdf ファイルを作成しました。どんなシチュエーションで転移学習が使えるのか、そして転移学習により本当にモデルの精度は向上するのか、数値シミュレーション...
デモンストレーションとして、
  • demo_transfer_learning_no_hyperparameters.py (GP, OLS のようにハイパーパラメータのないモデリング手法)
  • demo_transfer_learning_with_hyperparameters.py (PLS, SVR のようにハイパーパラメータがあるモデリング手法)

があります!

 

 

バギングによるアンサンブル学習 (Ensemble Learning based on Bagging)

scikit-learn に準拠していますので、cross_val_predict や GridSearchCV を使えます。scikit-learn の BaggingRegressor や BaggingClassifier と比べて、サブモデルのハイパーパラメータもクロスバリデーションで最適化できたり、predict で推定値の標準偏差を計算できたりします。

DCEKit にバギングによるアンサンブル学習の機能を追加!scikit-learn の BaggingRegressor や BaggingClassifier との違いとは?
データ解析・機械学習のためのツールキット DCEKit にバギングによるアンサンブル学習の機能を追加しました。 アンサンブル学習というのは、回帰モデルだったりクラス分類モデルだったり、モデルをたくさん作って推定性能を上げよう!、といった手法...

 

デモンストレーションとして、
  • demo_bagging_regression_no_hyperparameters.py (GP, OLS のようにハイパーパラメータのない回帰分析手法)
  • demo_bagging_regression_with_hyperparameters.py (PLS, SVR のようにハイパーパラメータがある回帰分析手法)
  • demo_bagging_classification_no_hyperparameters.py (LDA のようにハイパーパラメータのないクラス分類手法)
  • demo_bagging_classification_with_hyperparameters.py (SVM のようにハイパーパラメータがあるクラス分類手法)

があります!

 

 

アンサンブル学習に基づく外れサンプル検出 (Ensemble Learning Outlier sample detection, ELO)

回帰分析のときに外れサンプルを検出する手法を開発しました [金子研論文]
応化先生と生田さんが論文 “Automatic outlier sample detection based on regression analysis and repeated ensemble learning” について話しています...

 

ELO のデモンストレーションとして、
  • demo_elo_pls.py (PLS のアンサンブル)

があります!

 

 

モデルの適用範囲・適用領域 (Applicability Domain, AD) [データ密度]

モデルの適用範囲・モデルの適用領域 (Applicability Domain, AD) ~回帰モデル・クラス分類モデルを使うとき必須となる概念~
今回は、モデルの適用範囲・モデルの適用領域 (Applicability Domain, AD) についてです。AD は回帰モデル・クラス分類モデルが本来の性能を発揮できるデータ領域のことです。回帰モデル・クラス分類モデルを使うとき必須にな...

 

AD のデモンストレーションとして、
  • demo_ad.py (回帰分析手法は GP)

があります!

 

今後も DCEKit を拡張していく予定です。拡張次第、ご案内いたします。引き続きよろしくお願いいたします!

 

以上です。

質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。

タイトルとURLをコピーしました