[Pythonコード付き] 主成分分析(PCA)に基づく半教師あり学習

回帰分析のときに、教師ありデータ (目的変数 y の値がそろったデータ) と教師なしデータ (y の値がないデータ) とを合わせてから主成分分析 (Principal Component Analysis, PCA) で成分 (潜在変数) を抽出し、教師ありデータにおいて PCA 後の成分と y との間で回帰モデルを構築する Python コードを作成しましたので共有します。この手法を図で表すとこんな感じです。

 

いわゆる半教師あり学習 (半教師付き学習) です。半教師あり学習のメリットはこちらに書いたとおりです。

半教師あり学習 (半教師付き学習) の4つのメリット (回帰分析・クラス分類)
機械学習の手法、統計的・情報学的手法の中には、教師なし学習や教師あり学習があります。教師なし学習では、変数を使ってサンプル群を可視化(見える化)したり、クラスター解析(クラスタリング)したりします。教師あり学習では、物性・活性などの目的変数...

 

コードはこちらにあります。

GitHub - hkaneko1985/semi_supervised_learning: Semi-Supervised Learning considering Applicability Domain (AD)
Semi-Supervised Learning considering Applicability Domain (AD) - hkaneko1985/semi_supervised_learning

 

メインのプログラムは semi_supervised_learning_pca.py です。サンプルデータセットとして、教師ありデータ: descriptors_with_logS.csv、教師なしデータ: descriptors_for_prediction.csv がありますので、semi_supervised_learning_pca.py と同じフォルダ (ディレクトリ) に置いてください。教師ありデータは水溶解度のデータセットです。

回帰分析手法は以下の中から選べます。

 

  • ‘pls’ : Partial Least Squares regression (PLS)
  • ‘rr’ : Ridge Regression (RR)
  • ‘lasso’ : Least Absolute Shrinkage and Selection Operator (LASSO)
  • ‘en’ : Elastic Net (EN)
  • ‘lsvr’ : Linear Support Vector Regression
  • ‘nsvr’ : Nonlinear Support Vector Regression [Gaussian kernel]
  • ‘dt’ : Decision Tree (DT)
  • ‘rf’ : Random Forest (RF)
  • ‘gp’ : Gaussian Process regression (GP)

それぞれの詳細については、こちらをご覧ください。

データ解析・機械学習に関する手法・考え方・注意点のまとめ
データ解析に関するいろいろな手法を解説した記事や、データ解析をするときの考え方の記事をまとめました。興味のある内容がございましたら、ぜひリンクへ飛んでいただけたらと思います。pdfファイルやパワーポイント(pptx)ファイルは、自由にご利用...

 

まず、教師ありデータの説明変数 X と教師なしデータとを合わせて、PCA を行います。PCA の主成分を何成分まで用いるかは、選んだ回帰分析手法を用いて、教師ありデータでクロスバリデーションにより最適化します。

回帰モデル・クラス分類モデルを評価・比較するためのモデルの検証 (Model validation)
いろいろな回帰モデル・クラス分類モデルを構築したり、モデルの中のハイパーパラメータ (PLSの成分数など) を決めたりするとき、モデルを評価・比較しなければなりません。そのためのモデルの検証 (model validation) の方法につ...

 

検討する主成分の最大数は max_pca_component_number の変数で設定してください。

最適化された数の主成分を説明変数として、回帰モデルを構築し、教師なしデータの y の値を推定します。推定値は estimated_y.csv という名前の csv ファイルに保存されます。

興味がありましたら、ぜひご活用ください。

 

以上です。

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

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