今回はPlotly Expressを使って折れ線グラフを表示します。
ラインチャート
ラインチャートを表示するためにはline関数を使用します。
[Google Colaboratory]
1 | import pandas as pd |
2次元のリストデータを作成し、それをデータフレームに変換し、line関数の第一引数に設定します。
[実行結果]
ラインチャート(折れ線グラフ)を表示することができました。
今回はPlotly Expressを使って折れ線グラフを表示します。
ラインチャートを表示するためにはline関数を使用します。
[Google Colaboratory]
1 | import pandas as pd |
2次元のリストデータを作成し、それをデータフレームに変換し、line関数の第一引数に設定します。
[実行結果]
ラインチャート(折れ線グラフ)を表示することができました。
前回記事に引き続きバブルチャートを表示します。
ファセットを利用すると、データをカテゴリごとに分割して可視化することができます。
facet_colに“continent”を指定し、大陸ごとに別のグラフで描画します。(10行目)
[Google Colaboratory]
1 | facet_fig = px.scatter( |
[実行結果]
データセットには年のデータ含まれています。(これまではすべての年のデータをまとめて描画していました。)
アニメーション機能を使って年ごとのバブルチャートを描画します。(12行目)
[Google Colaboratory]
1 | animation_fig = px.scatter( |
[実行結果]
グラフの下に再生ボタンやスライダーが表示され、年ごとにバブルチャートを切り替えることができます。
スライダを操作すると、指定した年のデータ描画されます。
最初の散布図では以下の2つの情報しか表現できませんでした。
Plotly Expressでインタラクティブな可視化を行うことにより、次のような情報も合わせて確認できるようになりました。
前回記事から引き続き、gapminderデータセットを使います。
人口の情報を散布図に加え、点の大きさで表現したバブルチャートを描画します。
また大陸(continent列)ごとに要素を色分けします。
[Google Colaboratory]
1 | px.scatter( |
[実行結果]
より多くの情報を得られるようになりました。
凡例(グラフ右上に表示)をクリックすると大陸ごとに表示・非表示を切り替えることができます。
ヨーロッパとアメリカのみを表示すると次のようなグラフになります。
[実行結果]
特定の要素にカーソルを合わせると、ホバーツールが表示され座標の情報に加え、国名・大陸名・人口の情報を確認することができます。
Ploty Expressはplotly.pyのラッパーで、簡潔なコードでデータを可視化できます。
Ploty Expressは以下のような機能をもち、多次元のデータを高い表現力で可視化できます。
gapminderデータセットを読み込みます。
[Google Colaboratory]
1 | import plotly.express as px |
[実行結果]
では一人当たりのGDP(gdpPercap列)と平均寿命(lifeExp列)を可視化していきます。
まずpandasのplotメソッドを使って可視化を行います。
logxオプションにTrueを指定し、X軸は対数で表示しています。
[Google Colaboratory]
1 | %matplotlib inline |
[実行結果]
上記の散布図では一人あたりGDPと平均寿命の関係は分かるものの、具体的な値は座標から読み取るしかありません。
また国名(country列)や人口(pop列)など、ほかの列の情報はこのグラフから読み取ることはできません。
Plotly Expressを使って可視化を行います。
[Google Colaboratory]
1 | px.scatter( |
[実行結果]
上図はpandasで作成したグラフと同じグラフのように見えますが、特定の要素にカーソルを合わせると、下記の図のようにホバーツールが表示されます。
[実行結果]
ホバーツールからは要素の値が確認でき、各座標の情報に加えて国名も見て取ることができます。
前回構築したクラスタリングモデルのエルボー図を表示します。
[Google Colaboratory]
1 | plot_model(kmeans, plot = "elbow") |
[実行結果]
急激に変化している箇所を最適なクラスタ数と判断することができます。
次にシルエット図を表示します。
[Google Colaboratory]
1 | plot_model(kmeans, plot = "silhouette") |
[実行結果]
各バーの縦幅が同じくらいになっていれば均等に分割できていると判断することができます。
predict_model関数に、構築したモデルとデータを渡すとクラスタリング(グループ化)を行うことができます。
[Google Colaboratory]
1 | ret = predict_model(kmeans, data=df_iris) |
[実行結果]
クラスタ番号がClusterとして追加されています。
このようにクラスタリングに関しても、複数アルゴリズムでのモデル構築や、エルボー図やシルエット図での評価まで簡単に行うことができました。
AutoMLを使って、非常に短いコードでモデルの構築や評価を行うことができました。
AIモデル構築の分野はますます便利になっていき、より簡単にモデル構築ができるようになってきています。
PyCaretを使って、教師なし学習(クラスタリング)を行っていきます。
まずアイリスデータを読み込みます。
[Google Colaboratory]
1 | import pandas as pd |
次にsetup関数を使って前処理を行います。
[Google Colaboratory]
1 | from pycaret.clustering import * |
silentオプションにTrueを設定し、型推定の確認をスキップしています。(5行目)
[実行結果]
PyCaretが提供しているクラスタリング一覧を確認してみます。
[Google Colaboratory]
1 | models() |
[実行結果]
クラスタリングに関するいろいろなアルゴリズムが提供されていることが分かります。
create_model関数に“kmeans”を指定し、クラスタリングモデルを作成します。
[Google Colaboratory]
1 | kmeans = create_model("kmeans", num_clusters=3) |
[実行結果]
SilhouetteやCalinski-Harabaszなどの評価指数が表示されました。
クラスタリング結果を可視化します。
[Google Colaboratory]
1 | plot_model(kmeans) |
[実行結果]
PCAが可視化され、きれいに分類されていることが確認できます。
PCAとは主成分分析のことで、特徴量を抽出することによって、次元削除や可視化をすることが可能になります。
PyCaretでいろいろな評価指標グラフを表示していきます。
evaluate_modelを実行すると、様々な評価指標を確認することができます。
[Google Colaboratory]
1 | evaluate_model(tuned_ridge) |
[実行結果]
plot_modelに“feature”を渡すと、Feature Importanceのグラフを表示することができます。
[Google Colaboratory]
1 | plot_model(tuned_ridge, "feature") |
[実行結果]
worst concave pointsが高いことが確認できます。
plot_modelに“confusion_matrix”を渡すと、Confusion Matrixのグラフを表示することができます。
[Google Colaboratory]
1 | plot_model(tuned_ridge, plot = "confusion_matrix") |
[実行結果]
精度よく分類されていることが分かります。
plot_modelに“error”を渡すと、Class Prediction Error Plotのグラフを表示することができます。
[Google Colaboratory]
1 | plot_model(tuned_ridge, "error") |
[実行結果]
横軸にカテゴリが表示され、予測が積み上げ棒で表示されています。
モデルがどのカテゴリで問題を抱えているか、カテゴリごとにどのような不正解があるのかを確認できます。
異なるモデルの長所と短所、およびデータセットにおける特有の課題の発見に役立ちます。
モデルを確定させて推論を実施します。
推論には、モデル構築に使っていないUnseenデータ(残り10%)を使用します。(2行目)
[Google Colaboratory]
1 | final_ridge = finalize_model(tuned_ridge) |
[実行結果(一部略)]
予測値がLabelとして追加されています。
確定したモデルは回帰モデルと同じように、ファイルに保存することができ、そのファイルを読み込むことでモデルの再利用が可能です。
以上が、PyCaretを使って分類モデルを構築して推論を行うフローになります。
PyCaretで分類モデルを構築してみます。
まず、乳がんのデータセットを読み込みます。
[Google Colaboratory]
1 | import pandas as pd |
前処理はPyCaretに任せるのでここではデータの加工は行いません。
[実行結果(一部略)]
モデル構築に使う訓練データ(90%)とモデル構築に使わないUnseenデータ(10%)に分割します。
[Google Colaboratory]
1 | tg_df = tg_df_all.sample(frac=0.90, random_state=0).reset_index(drop=True) |
[実行結果]
PyCaretを使って前処理を行います。
[Google Colaboratory]
1 | from pycaret.classification import * |
PyCaretの分類系ライブラリをインポートしています。(1行目)
setup関数のパラメータsilentにTrueを指定し、型推定の確認をスキップしています。(7行目)
[実行結果]
PyCaretが提供している分類モデル一覧を確認します。
[Google Colaboratory]
1 | models() |
[実行結果]
compare_models関数を使って、各モデルを構築し評価一覧を表示します。
sortに“F1”を設定しているので、F1評価の高い順に表示します。
[Google Colaboratory]
1 | compare_models(sort = "F1", fold = 10) |
[実行結果]
分類モデルの評価指標でモデル評価一覧が表示されました。
F1基準でExtra Trees Cassifierモデルの評価が1番高いことが確認できます。
2番目に精度が良くて、速度が速いRidge Classifierのチューニングを行います。
まずはチューニングなしで実行してみます。
create_model関数に、Ridge ClassifierのID ridge を設定し実行します。
[Google Colaboratory]
1 | ridge = create_model("ridge", fold = 10) |
[実行結果]
F1の平均は0.9686になりました。
次はハイパーパラメータのチューニングを行います。
optimize引数に対象指標F1、n_iter(パラメータ探索回数)に100を設定しtune_model関数を実行します。
[Google Colaboratory]
1 | tuned_ridge = tune_model(ridge, optimize = "F1", fold = 10, n_iter = 100) |
[実行結果]
F1が0.9686から0.9709に向上したことが確認できました。
PyCaretでは、SHAPによるモデルの評価を行うことが可能です。
interpret_model関数にモデルを渡すことで、summary_plotを表示することができます。
[Google Colaboratory]
1 | !pip install shap |
[実行結果]
どの説明変数が大きく影響していたかを図示してくれますので、大局的に結果を確認することができます。
interpret_model関数のplot引数に“correlation”を指定すると、dependence_plotを表示することができます。
[Google Colaboratory]
1 | interpret_model(final_rf, plot="correlation") |
[実行結果]
特定の説明変数とSHAP値の散布図が表示され、相関関係を確認することができます。
interpret_model関数のplot引数に“reason”を指定すると、force_plotを表示することができます。
observation引数には対象データのインデックスを設定します。
[Google Colaboratory]
1 | interpret_model(final_rf, plot="reason", observation=1) |
[実行結果]
個々のデータに対するSHAP値を確認することができます。
PyCaretで確定したモデルを再利用可能な状態で保存します。
save_model関数を使うと、モデルの保存をすることができます。
model_nameにはファイル名を指定します。
[Google Colaboratory]
1 | save_model(final_rf, model_name="final_rf_model") |
[実行結果]
final_rf_model.pklというファイルが出力されました
load_model関数を使うと、モデルを読み込むことができます。
model_nameには読み込むファイル名を指定します。
[Google Colaboratory]
1 | load_tuned_rf_model = load_model(model_name="final_rf_model") |
[実行結果]
学習済みモデルだけではなく、前処理の定義やパイプラインごと保存されているので、すぐに利用可能な状態となっています。
読み込んだモデルを使って推論を行います。
比較のために、保存前のモデルで実施したのと同じようにunseenデータ(10%の未使用データ)を使います。
[Google Colaboratory]
1 | predictions = predict_model(load_tuned_rf_model, data = boston_data_unseen) |
[実行結果]
保存前のモデルと全く同じ推論結果となりました。
このようにPyCaretではパイプラインごとにモデルが保存されいて再利用可能な状態となっています。
前処理をPyCaretで確定させておけば、モデルとの差分が発生することはありません。