データ解析に関するいろいろな手法を解説した記事や、データ解析をするときの考え方の記事をまとめました。興味のある内容がございましたら、ぜひリンクへ飛んでいただけたらと思います。
pdfファイルやパワーポイント(pptx)ファイルは、自由にご利用ください。
数学(行列計算・線形代数・統計・確率)が不安な方へ
高校数学の知識から、人工知能・機械学習・データ解析へつなげる、必要最低限の教科書
人の学習と人工知能の学習~人工知能を学習させるとかモデルを構築するということ~
最尤推定・最尤法~与えられたデータから確率分布のパラメータを推定する~
ニュートン法(ニュートン・ラフソン法)~f(x)=0の解を数値的に求める~
DCEKit
- DCEKit (Data Chemical Engineering toolKit) を PyPI にリリース!
- DCEKit (Data Chemical Engineering toolKit) のクラスや関数の解説 (取扱説明書)
- DCEKit にバギングによるアンサンブル学習の機能を追加!scikit-learn の BaggingRegressor や BaggingClassifier との違いとは?
データの前処理
- 基本的なデータの前処理方法 オートスケーリング(標準化)・変数選択など
- データ解析前における、説明変数(特徴量・記述子)の決め方・選び方の方針
- 特徴量に関する基本的な考え方~複数の物質が混合されてできた物質~
- 特徴量を抽象化して、モデルの逆解析により得られるサンプルの多様性を高める
- 主成分分析(Principal Component Analysis, PCA)の前に変数の標準化(オートスケーリング)をしたほうがよいのか?
- 本当に標準偏差(分散)が0の説明変数(記述子・特徴量)を削除してよいのか?
- [Pythonコード付き] 相関係数で変数選択したり変数のクラスタリングをしたりしてみましょう
- スペクトル・時系列データの前処理の方法~平滑化 (スムージング) と微分~
- トレーニングデータ・バリデーションデータ・テストデータの定義
- 回帰分析・クラス分類をするときの、モデル構築用データ (トレーニングデータ) とモデル検証用データ (テストデータ) の分け方 [Kennard-Stoneアルゴリズムのコードあり]
- 外れ値検出 (Outlier Detection) もしくは 外れサンプル検出 (Outlier Sample Detection) ~他の値・サンプルと大きく異なる値・サンプルを見つけよう!~
- 回帰分析のときにアンサンブル学習で自動的かつロバストに外れサンプルを見つける Python プログラムを公開します
- One-Class Support Vector Machine (OCSVM) で外れ値・外れサンプルを検出したりデータ密度を推定したりしよう!
- 回帰分析からクラス分類に変換したり、クラス分類から回帰分析に変換したりするメリット・デメリット
- どんなクラス分類のデータも回帰分析に変換する方法 (説明変数にも使えます)
- X と Y が一貫した関係をもつようなデータセットの作り方
- 回帰分析のときに外れサンプルを検出する手法を開発しました [金子研論文]
変数変換
- どのようなときに目的変数Yではなくlog(Y)にしたほうがよいのか?~対数変換するメリットとデメリット~
- 目的変数の値が0から1の間のとき、予測値も0から1の間にしたい!→ロジット変換はどうでしょう?
- バッチプロセスにおける特徴量の作り方
補完
データセットの可視化・見える化
- データの可視化をする理由
- データの可視化・見える化のための手法を選ぶときの2つのポイント
- 見える化・可視化した結果を評価する指標を開発しました、ハイパーパラメータの設定もこれでOK (Python・MATLABプログラムあり)
- 主成分分析(Principal Component Analysis, PCA)
- 独立成分分析 (Independent Component Analysis, ICA)
- 自己組織化マップ(Self-Organizing Map, SOM)
- Generative Topographic Mapping (GTM)
- ガウス過程による潜在変数モデル(Gaussian Process Latent Variable Model, GPLVM)で非線形性を考慮した潜在変数を計算しよう!
- Sparse Generative Topographic Mapping(SGTM): データの可視化とクラスタリングを一緒に実行する方法 [金子研論文]
- t-distributed Stochastic Neighbor Embedding (t-SNE) ~データの可視化に特化した手法~
クラスタリング
- 階層的クラスタリング(クラスター分析)、近いクラスターを結合していく
- k平均法 (k-means clustering) 非階層的クラスタリング
- 混合ガウスモデル (Gaussian Mixture Model, GMM)~クラスタリングするだけでなく、データセットの確率密度分布を得るにも重宝します~
変数選択・特徴量選択
- [Pythonコード付き] 相関係数で変数選択したり変数のクラスタリングをしたりしてみましょう
- Stepwise (ステップワイズ) 法による説明変数 (入力変数・記述子・特徴量) の選択~手軽な変数選択手法~
- GAPLS, GASVR でモデルの推定性能がよくなるように説明変数の選択をしよう![Pythonコードあり]
- [Pythonコードあり] スペクトル解析における波長領域や時系列データ解析におけるプロセス変数とその時間遅れを選択する方法
- [解析結果付き] Boruta、ランダムフォレストの変数重要度に基づく変数選択手法
- 変数選択・特徴量選択のときに注意すること
- 変数選択・特徴量選択のときの意識は、モデルの予測精度を上げることより、不要な変数・特徴量を削除することです
回帰分析
- k最近傍法(k-Nearest Neighbor, k-NN)でクラス分類・回帰分析・モデルの適用範囲(適用領域)の設定をしよう!
- 最小二乗法による線形重回帰分析
- 部分的最小二乗回帰(Partial Least Squares Regression, PLS)
- Locally-Weighted Partial Least Squares (LWPLS, 局所PLS) ~あのPLSが非線形性に対応!~ [Python・MATLABコードあり]
- リッジ回帰(Ridge Regression, RR), Least Absolute Shrinkage and Selection Operator (LASSO), Elastic Net (EN)
- サポートベクター回帰(Support Vector Regression, SVR)
- 決定木(Decision Tree, TD)
- ランダムフォレスト(Random Forest, RF)
- [デモのプログラムあり] 勾配ブースティングGradient Boosting、特に Gradient Boosting Decision Tree (GBDT), XGBoost, LightGBM
- 誤差逆伝播法によるニューラルネットワーク(BackPropagation Neural Network, BPNN)~深層学習(ディープラーニング)の基礎~
- ガウス過程による回帰(Gaussian Process Regression, GPR)
- [Pythonコードあり] 教師あり混合ガウスモデル(Supervised Gaussian Mixture Models)で回帰分析も逆解析も自由自在に♪~Gaussian Mixture Regression(GMR)~
- Generative Topographic Mapping(GTM)でデータの可視化・回帰分析・モデルの適用範囲・モデルの逆解析を一緒に実行する方法 [金子研論文]
- [Python・MATLABコードあり] クロスバリデーションしないで非線形回帰モデルのハイパーパラメータを最適化する方法~サンプルの中点の活用~
- 目的変数 Y における測定誤差などのばらつきを考慮したモデリング
- 目的変数の実測値vs.予測値プロットが横になってしまう(寝てしまう)ときは非線形手法を検討しよう
- モデルの予測精度を上げるための考え方・方針
クラス分類
- クラス分類とクラスタリング、名前は似ていますが全く異なります
- k最近傍法(k-Nearest Neighbor, k-NN)でクラス分類・回帰分析・モデルの適用範囲(適用領域)の設定をしよう!
- 線形判別分析(Linear Discriminant Analysis, LDA)
- サポートベクターマシン(Support Vector Machine, SVM)
- 決定木(Decision Tree, TD)
- ランダムフォレスト(Random Forest, RF)
- [デモのプログラムあり] 勾配ブースティングGradient Boosting、特に Gradient Boosting Decision Tree (GBDT), XGBoost, LightGBM
- 誤差逆伝播法によるニューラルネットワーク(BackPropagation Neural Network, BPNN)~深層学習(ディープラーニング)の基礎~
- 単純ベイズ分類器 (ナイーブベイズ, Naïve Bayes Classifier) でクラス分類
- モデルの予測精度を上げるための考え方・方針
アンサンブル学習
- アンサンブル学習 ~三人寄れば文殊の知恵~ たくさんモデルを作って推定性能を上げよう!
- ランダムフォレスト(Random Forest, RF)
- アンサンブル学習でも、各サブモデルの適用範囲・適用領域をちゃんと考えよう!~Ensemble learning method Considering Applicability Domain of each Submodel (ECADS)~
- Adaboost (Adaptive Boosting) によるアンサンブル学習のやり方を解説します
- [デモのプログラムあり] 勾配ブースティングGradient Boosting、特に Gradient Boosting Decision Tree (GBDT), XGBoost, LightGBM
半教師あり学習 (半教師付き学習)・転移学習
- 半教師あり学習 (半教師付き学習) の4つのメリット (回帰分析・クラス分類)
- 回帰分析における半教師あり学習 (半教師付き学習) のメリットを確認しました!
- [Pythonコード付き] 主成分分析(PCA)に基づく半教師あり学習
- [Pythonコードあり] 半教師あり学習するときはサンプル選択しましょう!
- [解析結果とPythonコードあり] 転移学習 (Transfer Learning) を用いたデータ解析
モデルの検証
- 回帰分析手法・クラス分類手法の選び方
- 回帰モデル・クラス分類モデルを評価・比較するためのモデルの検証 (Model validation)
- モデルの検証やその後における外れ値・外れサンプルの扱い
- ハイパーパラメータの選択に失敗してしまったときの対処法
- 回帰分析における目的変数の実測値 vs. 推定値プロットを、解像度を上げて見る
- 人工知能・機械学習のときには過学習 (オーバーフィッティング) に気をつけよう!~過学習とその対処法~
- ぜんぶオーバーフィッティングのせいだ。
- オーバーフィッティング(過学習)の本質を理解して実用的な議論をする
- ダブルクロスバリデーション(モデルクロスバリデーション)でテストデータいらず~サンプルが少ないときのモデル検証~
- モデルの推定性能を評価しても、その結果で最適化したら評価にならないので注意ですよ!
- バリデーション結果は、少数の比較には使ってよいが最適化に使ってはいけない!~外部バリデーションや(ダブル)クロスバリデーションでは何を評価しているのか?評価するときのジレンマとは?~
- y-randomizationで過学習(オーバーフィッティング), Chance Correlation(偶然の相関)の危険度を評価!
- 小さなデータセットが抱える大きな問題
- 回帰モデル・クラス分類モデルの検証 (バリデーション) について考えていること
- クロスバリデーション(交差検定)のとき、変数の標準化(オートスケーリング)はどうするか?
- モデルの予測精度は、目的変数Yの誤差だけでなくモデルの適用範囲を含めて議論しましょう
- r2やRMSE・MAEはもう古い!?回帰分析においてモデルを評価するための新しい指標を開発しました
- [Pythonコード付き] テストデータのMAEをトレーニングデータから推定する方法を開発したので紹介します [金子研論文]
- テストデータ・バリデーションデータ(モデル検証用データ)におけるモデルの精度が低いときのポジティブな側面
- モデルを運用することを想定して、モデルの設計をしましょう!
モデルの適用範囲
- モデルを作るのにサンプル数はいくつ必要か?に対する回答~モデルの適用範囲・モデルの適用領域~
- モデルの適用範囲・モデルの適用領域 (Applicability Domain, AD) ~回帰モデル・クラス分類モデルを使うとき必須となる概念~
- 内挿・外挿は、モデルの適用範囲内・適用範囲外と違いますので注意が必要です
- 守りの AD 攻めの BO (AD: モデルの適用範囲、BO: ベイズ最適化)
- モデルがどれくらい外挿できるか (モデルの適用範囲の外をどのくらい予測できる) の検証方法
- 本当に標準偏差(分散)が0の説明変数(記述子・特徴量)を削除してよいのか?
- k最近傍法(k-Nearest Neighbor, k-NN)でクラス分類・回帰分析・モデルの適用範囲(適用領域)の設定をしよう!
- One-Class Support Vector Machine (OCSVM) で外れ値・外れサンプルを検出したりデータ密度を推定したりしよう!
- ガウシアンカーネルを用いた SVR ではモデルの適応範囲を考慮しなくてよいの?!
- モデルの予測精度は、目的変数Yの誤差だけでなくモデルの適用範囲を含めて議論しましょう
- [デモのプログラムあり] Local Outlier Factor (LOF) によるデータ密度の推定・外れサンプル(外れ値)の検出・異常検出
- Xの変数を適切に非線形変換して線形の回帰モデルを作るとモデルの適用範囲・適用領域が広がるかも![検証結果とPythonプログラムあり]
- [Pythonコード付き] テストデータのMAEをトレーニングデータから推定する方法を開発したので紹介します [金子研論文]
モデルの解釈
- モデルの解釈に関する考え方・スタンス
- 回帰係数=寄与度とすることは危険、どうしても寄与度を求めたいときはPCRやPLSの1成分モデルで、ただ基本的には寄与度ではなく重要度で議論
- 非線形モデルにおける特徴量の寄与の指標を有効に活用する方法
- 非線形モデルの解釈をしよう!~非線形モデルを各変数で偏微分~
モデルの逆解析
- 回帰モデル・クラス分類モデルの逆解析~目標のY(物性・活性など)を達成するためのX(説明変数・記述子・特徴量・パラメータ・入力変数)とは?~
- モデルの逆解析をするときのチェックリスト
- モデルの精度が低いときも、モデルの逆解析ってやるべき?
- 目的変数の予測値だけでなく、説明変数の感度も設計のときに考慮する
- ランダムフォレスト(Random Forest, RF)や決定木(Decision Tree, DT)で構築したモデルを逆解析するときは気をつけよう!
- [Pythonコードあり] 教師あり混合ガウスモデル(Supervised Gaussian Mixture Models)で回帰分析も逆解析も自由自在に♪~Gaussian Mixture Regression(GMR)~
- 部分的最小二乗回帰 (Partial Least Squares Regression, PLS) モデルの逆解析するときのちょっとしたメリット
- 材料設計の限界(モデルの逆解析の限界)は分かるのか?
- モデルの使い方~モデルの逆解析と目的変数の評価~
- 目的変数が複数個あるときのモデルの逆解析、結局どのサンプルを選んだらよいの??
- [Pythonコードあり] 既存のサンプルの分布に従うように、モデルの逆解析用のサンプルをたくさん生成する方法
- [Pythonコードあり] 特徴量ごとや特徴量間に制限があるときの、モデルの逆解析用のサンプル生成
- モデルを運用することを想定して、モデルの設計をしましょう!
化学構造の扱い・化学構造生成
- 化学構造・分子・化合物の扱いに関する基本的なこと
- 化合物における三次元の化学構造の扱い、構造最適化計算のメリット・デメリット
- RDKit をインストールできなかったり import できなかったりしたときの対処法まとめ (Anaconda ユーザー向け)
- 誘導体の化学構造を自動生成するプログラムを作りました。ご自由にお使いください
- Structure Generator based on R-Group (SGRG) を使って何ができますか?
- メインの骨格を適当に変えたり、側鎖を適当に変えたりして、新たな化学構造を生成するPython プログラムを公開します
- 物性や活性の推定値が大きくなるように、メインの骨格と側鎖を遺伝的アルゴリズムで最適化して、新たな化学構造を生成するPythonプログラムを公開します
- [Pythonコードあり] ベイズ最適化で所望の物性や活性となる確率の高い化学構造を生成する (物性・活性が2つ以上でもOK)
- [Pythonコードあり] GTMR(Generative Topographic Mapping Regression)でデータの可視化・回帰分析・モデルの適用範囲・モデルの逆解析・化学構造生成をいっぺんにやってしまいます! (物性・活性が2つ以上でもOK)
- [高分子設計]モノマーの構造から二量体・三量体・・・を生成するPythonプログラムを作りましたのでぜひご活用ください
実験計画法
- 実験計画法の概要~データを上手く使って実験のコスパを上げましょう!~
- 実験計画法で実験パラメータの候補を選択する (直交表を作成する) プログラムを公開します
- ベイズ最適化(Bayesian Optimization, BO)
- 目的変数が複数のときに実験計画法のベイズ最適化(Bayesian Optimization, BO)が対応!
- ベイズ最適化で複数の目的変数がある場合の対応[Probability of Improvement(PI)以外]
- ベイズ最適化で期待できること
- ベイズ最適化において一度に複数の実験をするときに候補を選択するシンプルな方法
時系列データ解析 (ソフトセンサーなど)
- 時系列データを扱うときの3つの注意点(ソフトセンサー解析など)[データ解析用のPythonプログラム付き]
- 適応型ソフトセンサーで産業プラントにおけるプロセス状態等の変化に対応する (Adaptive Soft Sensor)
- 適応型ソフトセンサーを検証できる Python コードを作りましたので、ぜひご自身のデータセットでお試しください
- Locally-Weighted Partial Least Squares (LWPLS, 局所PLS) ~あのPLSが非線形性に対応!~ [Python・MATLABコードあり]
- Ensemble Online Support Vector Regression (EOSVR) ~Moving Window 型の非線形適応型ソフトセンサー~
異常検出・異常診断
- T2統計量・Q統計量~異常値を検出したり、モデルの適用範囲・適用領域(AD)を設定したり~
- One-Class Support Vector Machine (OCSVM) で外れ値・外れサンプルを検出したりデータ密度を推定したりしよう!
- [デモのプログラムあり] Local Outlier Factor (LOF) によるデータ密度の推定・外れサンプル(外れ値)の検出・異常検出
距離・類似度
- このデータセットにはどの距離を用いればよいの??~ユークリッド距離・マンハッタン距離・チェビシェフ距離・マハラノビス距離~
- カーネル関数って結局なんなの?→サンプル間の類似度と理解するのがよいと思います!
データベース
- データセット作成のときに注意する6つのこと
- データ解析・機械学習のしやすいデータセットの作り方
- サンプルを集めるときに意識するとよいこと [データベース作成]
- モデルを作るのにサンプル数はいくつ必要か?に対する回答~モデルの適用範囲・モデルの適用領域~
プログラミング
- 機械学習を試したい方へ、プログラミング不要で実行できるアプリ「DCE tool」を作りました。ご自由にお使いください
- データ解析・機械学習をはじめたいとき、市販のソフトウェアを使うのがよいか、プログラミングを勉強するのがよいか、それぞれのメリット・デメリットを考える
- プログラミング課題(模範解答付き)
- MATLAB に慣れた人が Python を始めるときの11の注意点
- [実績あり] 機械学習・データ解析・Pythonに関する10時間のハンズオンセミナー(体験学習)でどのくらいのことができるようになるのか?
- プログラミングのボトルネックは、プログラミングではないところにあり!
- [無料公開] 「化学のための Pythonによるデータ解析・機械学習入門」 の “はじめに” と目次の詳細
- プログラミング未経験者のためのデータ解析・機械学習、連載スタート!
- プログラミングを始めるときに入門書を使うべきか、使わないべきか
失敗例
その他
- データ解析の基本的な流れを整理します
- どんなときにデータ解析・データ分析で成果がでやすいか?
- 良くない実験結果も、データ解析・機械学習するときは大事なデータです
- ノイズとの付き合い方、普段の生活でも同じこと!?
- ロバストなモデル・手法・方法ってどういうこと?推定性能が高い、とは違います!
- サンプル数が少ないときはどうするか?・・・うーん、仕方がないので幅で考えましょう! (一変数・単変量で正規分布に従う場合)
- サンプル数が少ないときはどうするか?・・・うーん、仕方がないのでデータ分布を仮定してたくさんサンプリングしましょう! (多変量の場合)
- 記述子の計算結果を保存する(データベース化する)ときの3つの注意点
- 個性的な人工知能をつくる
- 人工知能は本質的に何をしているのか
- 人を成長させる人工知能
- 機能的なモノと意味があるモノ~MLR, SOMはオワコン?~
- 尺度水準~変数(記述子・特徴量)のレベルを把握しておきましょう~
- (ノート)パソコンの選び方~金子研で購入するときにチェックする7つの項目~
- すでに100万サンプル超え!?金子研ではこれまでどのようなデータセットを扱ってきたのか
- バーチャル(virtual)についてあまり知られていない意味を説明することで、機械学習関係に対する信用度が上がるきっかけにならないかと淡い期待をよせる
- 意識と無意識、形式知と暗黙知、言語と非言語~データ解析・機械学習におけるヒヨコのオスメスを見分け方をすべて言語化できるか?~