Help us understand the problem. What is going on with this article?

scikit-learnで機械学習パイプラインをインタラクティブに描画、HTML保存する方法

本記事では、scikit-learnのv0.23から搭載された、インタラクティブなパイプライン確認の実装、そしてそれをHTML化して保存、活用する方法を解説します。

環境

  • scikit-learn==0.23.2
  • Google Colaboratory

本記事の実装コードはこちらに置いています
https://github.com/YutaroOgawa/Qiita/tree/master/sklearn

実装

[1] バージョン更新

まず、Google Colaboratoryのscikit-learnのバージョンが2020年9月ではv0.22なので、v0.23へと更新します。

!pip install scikit-learn==0.23.2

pipで更新したあとは、Google Colaboratoryの「ランタイム」→「ランタイムを再起動」を実行し、
ランタイムを再起動します。
(これで、scikit-learnがpipで入れた新しいv0.23になります)

[2] パイプライン構築

例えば、以下のようにして、前処理と機械学習モデルを組み合わせた
機械学習パイプラインを構築します。

[必要なimportを実施]

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.compose import make_column_transformer
from sklearn.linear_model import LogisticRegression

[パイプラインを構築]

# 数値データの前処理(中央値で欠損値補完して、標準化)
num_proc = make_pipeline(SimpleImputer(strategy='median'), StandardScaler())

# カテゴリデータの前処理(欠損値には"misssing"を代入補完し、ワンホットエンコーディング)
cat_proc = make_pipeline(
    SimpleImputer(strategy='constant', fill_value='missing'),
    OneHotEncoder(handle_unknown='ignore'))

# 前処理クラスを作成
preprocessor = make_column_transformer((num_proc, ('feat1', 'feat3')),
                                       (cat_proc, ('feat0', 'feat2')))

# 前処理と機械学習モデルを1つのパイプラインにする
clf = make_pipeline(preprocessor, LogisticRegression())

[3] インタラクティブにパイプラインを可視化

インタラクティブにパイプラインを可視化するには、単純で、

sklearn.set_config(display="diagram")

を加えるだけです。

[インタラクティブに可視化]

# パイプラインを表示させる設定
from sklearn import set_config

set_config(display="diagram")

# 描画
clf

すると、JupyterNotebook(Google Colabortory)の結果欄に、以下のようにパイプラインが描画されます。
pipe_sklearn3.png

このパイプラインの図の各要素をクリックすると、
インタラクティブに画像が変化し、その要素の詳細設定が表示されます。
(以下の図は、カラム前処理の欠損値処理方法を詳細確認する場合:pipeline-2のSimpleImputerをクリック)

pipe_sklearn.png

パイプラインをHTMLとして保存する方法

コメント欄でいただいたように、このインタラクティブなパイプラインをHTML化して保存することができます。

「JupyterNotebook上でしか動かないのでは、ちょっとな・・・」

と思っていたので、非常に嬉しい情報です。

@DataSkywalker さま、誠にありがとうございます。

実装としては最後に、

from sklearn.utils import estimator_html_repr

with open('my_estimator.html', 'w') as f:  
    f.write(estimator_html_repr(clf))

を実行します。すると、my_estimator.htmlとして、インタラクティブなパイプラインのHTMLが保存されます。

Google Colaboratoryであれば、

# Google Colaboratoryからダウンロード
from google.colab import files
files.download('my_estimator.html')

を実行することで、my_estimator.htmlをダウンロードすることができます
(HTMLファイルにCSSのstyleも含まれ300行ほどの内容でした)。

インタラクティブにパイプラインを説明する資料として、
HTMLをドキュメントなどに貼り付ける、などができそうです。

mdファイルにリンクとして入れても良いですし、無理やりmdファイルをhtml化してから結合しても良いです。
(mdファイルにそのままhtmlを読み込むのは難しい・・・?)

document_example.gif

このあたりのファイルもすべて、こちらに置いています
https://github.com/YutaroOgawa/Qiita/tree/master/sklearn

まとめ

scikit-learnのバージョンをv0.23以上にして、
sklearn.set_config(display="diagram")を加えるだけで、
パイプラインをインタラクティブに可視化(そして、HTMLで保存)することができます。

ぜひお試しください♪


備考

【執筆者】電通国際情報サービス(ISID)AIトランスフォーメーションセンター 開発Gr
小川 雄太郎(主書「つくりながら学ぶ! PyTorchによる発展ディープラーニング」 、その他「自己紹介詳細」

【Twitter】
IT・AI関連やビジネス・経営系を中心に、私が面白いと思った記事や最近読んだ新刊書籍の感想などを発信しています。これらの分野の情報を収集したい方はぜひフォローしてみてください♪(海外情報が多めです)

小川雄太郎@ISID_AI_team

【その他】
私がリードする、「AIトランスフォーメーションセンター 開発チーム」ではメンバを募集中です。ご興味、ご関心をお持ちの方は、こちらのページから、応募をお待ちしております。

【そくめん君】
いきなり応募は・・・という方は、カジュアル面談を「そくめん君」で行わせていただいております。
こちらもぜひご利用ください♪
https://sokumenkun.com/2020/08/17/yutaro-ogawa/

【免責】本記事の内容そのものは著者の意見/発信であり、著者が属する企業等の公式見解ではございません


(参考)
https://scikit-learn.org/stable/auto_examples/release_highlights/plot_release_highlights_0_23_0.html
https://towardsdatascience.com/9-things-you-should-know-about-scikit-learn-0-23-9426d8e1772c

sugulu_Ogawa_ISID
(株)電通国際情報サービス、AI トランスフォーメーションセンター、AIテクノロジー部に所属。小川雄太郎。 主著「つくりながら学ぶ! PyTorchによる発展ディープラーニング」。 twitter @ISID_AI_team で情報発信しています。フォローお待ちしています。 機械学習、ディープラーニング関連技術を活用したアジャイルなサービス構築、人材教育に興味があります。
https://github.com/YutaroOgawa/about_me
isid
電通国際情報サービス(Information Services International-Dentsu, Ltd. 通称ISID)は、アメリカのGE社と電通の合弁会社として創業しました。 2000年に東証一部上場し、現在は単体で社員数約1,500人の会社です。ISIDにおける先端技術を活用した挑戦と事例、 検証した技術などを紹介します。
https://www.isid.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした