DCEKit にバギングによるアンサンブル学習の機能を追加!scikit-learn の BaggingRegressor や BaggingClassifier との違いとは?

データ解析・機械学習のためのツールキット DCEKit にバギングによるアンサンブル学習の機能を追加しました。

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

 

アンサンブル学習というのは、回帰モデルだったりクラス分類モデルだったり、モデルをたくさん作って推定性能を上げよう!、といった手法です。バギングというのは、アンサンブル学習の一つであり、元のデータセットにおけるサンプルをランダムに選んだり、説明変数をランダムに選んだり、その両方行ったりして、サブのデータセットをたくさん作り、サブデータセットごとにモデル (サブモデル) を構築することで、モデルをたくさん作ります。新しいサンプルにおける推定値は、回帰分析のときはすべてのサブモデルの推定値の平均値、クラス分類のときはサブモデルの推定結果の多数決とします。

ランダムフォレストを一般化した感じで、決定木にかぎらず、 (PLS とか SVM とか) 任意の手法でサブモデルを構築できます。

ランダムフォレスト(Random Forests, RF)~アンサンブル学習で決定木の推定性能を向上!~
ランダムフォレスト(Random Forest, RF)について、pdfとパワーポイントの資料を作成しました。データセットが与えられたときに、RFで何ができるか、RFをどのように計算するかが説明されています。pdfもスライドも自由にご利用く...

 

バギングのメリットの一つとして、推定値の信頼性を議論できます。回帰分析のとき、すべてのサブモデルの推定値の標準偏差を確認することで、推定値がどれくらいばらつくかを見積もれます。クラス分類のときは、あるクラスと推定したサブモデルの割合を信頼性の指標とします。

scikit-learn にもバギングの機能はありまして、BaggingRegressorBaggingClassifier が準備されています。基本的にはこれらで問題ないのですが、少しかゆいところに手が届かない印象がありました (2019 年 9 月 2 日現在)。たとえば、BaggingRegressor でサブモデルの推定値の標準偏差を計算できないとかです。

なので、DCEKit に DCEBaggingRegressor や DCEBaggingClassifier を追加しました。scikit-learnBaggingRegressorBaggingClassifier と比べた特徴は以下のとおりです。

 

  • 回帰分析において、predict でサブモデルの推定値の標準偏差も同時に出力できる
  • サブモデルごとにクロスバリデーションでハイパーパラメータを最適化できる (手法によっては時間がかかります)
  • サブデータセットごとに変数の標準化 (オートスケーリング) ができる

 

それぞれ使い方は、BaggingRegressorBaggingClassifier に寄せています。なお、DCEBaggingRegressor や DCEBaggingClassifier も scikit-learn に準拠していますので、scikit-learn の cross_val_predict や GridSearchCV を使えます。

こちらに詳しい使い方の説明を追記しましたので、

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

 

もし興味があればお試しいただければと思います。

 

以上です。

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

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