投稿

ラベル(チュートリアル)が付いた投稿を表示しています

Translate

#60 Section 15 回帰(4) モデルの分析(1)

イメージ
 前のSectionでは、『compare_models』関数で評価が高かったモデル『catboost』を『best』と宣言しましたが、今回は、その『best』というモデルを分析していきましょう。 『 plot_model 』関数を使用すると、テストセットにおける学習済みモデルのパフォーマンスをグラフによって分析できます。 plot_model(モデル名, plot='グラフの種類’) plot_modelのグラフの種類についての詳細は、下記の公式ドキュメントの『Examples by module→Regression』を参照してください。 https://pycaret.gitbook.io/docs/get-started/functions/analyze#regression さて、続けてPyCaretの公式チュートリアルを見ていきましょう。 『モデル名』は、「best」を指定しています。 『グラフの種類』には、「 'residuals' 」を指定しています。これにより、『 残差プロット (Residuals Plot)』を出力します。 実行して、出力を見てみましょう、残差プロットが表示されます。 残差 は、 実際の値と予測値の差 のことです。 ● 散布図 (左側)  横軸: モデルによる予測値(Predicted Values)  縦軸: 残差(Residuals、実際の値と予測値の差) この散布図により、予測値の大きさに関わらず残差がランダムに分布しているか(パターンがないか)を確認します。理想的なモデルでは、残差は横軸の0の周りに均等に散らばっています。 ● ヒストグラム (右側) 散布図の残差の分布を示すヒストグラムが表示されます。    回帰分析の基本的な仮定として、残差は正規分布に従うことが望ましいため、ヒストグラムが釣鐘型(正規分布に近い形)になっているかを確認します。 以下の場合、モデルはデータの構造を適切に捉えており、回帰分析の仮定がおおむね満たされていると判断できます。 ・ 残差が0の周りに均等に分散している(散布図) ・ 残差に特定のパターンが見られない(散布図) ・ 残差の分布が正規分布に近い(ヒストグラム) 次は、 『グラフの種類』に「 ‘error’ 」と記入しています。横軸に実際の値、縦軸に予測値をプロ...

#59 Section14 回帰(3)モデルの評価・比較

イメージ
 今回は、「モデルの評価・比較」を体験していきましょう。 『 compare_models 』関数は、ライブラリで使用可能なすべてのアルゴリズム(PyCaretでは『モデル』と言います)を交差検証を用いて訓練し、評価指標を算出して性能を評価します。この関数の出力は、交差検証での平均スコアを含む評価指標一覧(次スライド参照)で、様々なアルゴリズムの性能を比較できます。 『分類』で行ったように、関数型API、オブジェクト指向APIの二つの方法があります。順番にコードを実行しましょう。 また、『compare_models(sort=“評価指標”) 』で、 任意の指標で結果を並べ替えることもできます。 compare_models関数を使った前のスライドのコードを入力すると、下記の結果が出力されます。 表頭には、評価指標がいくつか並んでいます。 また、それぞれのモデルは、デフォルトで決定係数(R2)の降順に表示されます! さて、ここからは、前のスライドに出てきた評価指標を解説していきます。 まずは、 平均絶対誤差 (MAE/Mean Absolute Error) 平均絶対誤差(MAE/Mean Absolute Error)は、各データに対して「予測値と正解値の差(誤差)」の絶対値を計算し、その総和をデータ数で割った値(平均値)を算出したもの。スライドの式で算出されます。 平均絶対誤差に普遍的な目安はありませんが、数値が小さいほど予測精度が高いと評価されます。 平均絶対誤差はあくまで相対的な指標ですから、過去の類似データで比較したり、複数のモデルで比較する等して使用します。 【参考】  https://atmarkit.itmedia.co.jp/ait/articles/2105/19/news022.html 2番目は、 平均二乗誤差 (MSE/Mean Squared Error) 平均二乗誤差(MSE/Mean Squared Error)は、各データに対して「予測値と正解値の差(誤差)」の二乗の総和を計算し、その総和をデータ数で割った値(平均値)を算出したもの。下記のスライドに示す式で算出されます。 平均二乗誤差に普遍的な目安はありませんが、0に近いほど予測値と実測値の差(誤差)が小さいことを示します。誤差を2乗するため、大きな誤差(外れ値)が評価に与...

#58 Section 13 回帰(2)前処理

イメージ
ここからは、『setup』関数によるいくつかの前処理機能を体験していきます。  (『#49 Section 5 分類(2)前処理』と重複する部分もありますが、このSectionから読み始める人もいるかもしれませんので、省略はしないで書きました!)  まずは、モジュールのインポートと setup関数 の実行です。下記のスライド2を参照ください。 1行目に # import pycaret classification and init setup とあり、setup関数を初期化するような説明となっていますが、『init』は初期化という意味ではなく、機械学習の実験を開始するための準備作業全体を指していますから、ここではsetup関数を実行して前処理を行うという意味で理解しておきましょう。 2行目は、PyCaretのうち分類に用いるモジュール『classification』をインポートしています。このモジュールは、二項分類または多項分類に使用できます。さらに、 『setup』関数によるいくつかの前処理機能、18以上のすぐに使えるアルゴリズムと、学習済みモデルの性能を分析するためのプロットが用意されています。 ワイルドカード「*」を使うとモジュールで公開されているすべての関数や変数などがインポートされて使えるようになります。 3行目は、PyCaretの分類モジュールに含まれる『setup』関数で、 欠損値処理 、 データ分割 などの 前処理 を行っています。 ここで、setup関数について詳しく説明します。 setup関数は、最小限、『 分析するデータ名 』→data、『 目的変数 』→target、『 後で再現可能にするための擬似乱数設定 』→session_idという引数が必要になります。 session_idは、無くても動きますが、毎回違う結果が出てくることがありますので固定しておきましょう。 また、その他の引数の主なものは、下記のとおりです。 『ignore_features』→無視したい特徴量のリスト 『normalize  True』→Trueに設定するとデータが正規化される 『train_size』→訓練データのサイズ、例:=0.7では70%が学習用データとして使用される 『log_data』→Trueにすると、学習およびテストデー...

#56 分析環境再構築/コラボのPythonバージョンアップ

イメージ
本の出版を終え、久しぶりにブログを再開しようとコラボのノートブック『Binary Classification』を開けて、実行するとPycaretがインストールできないではありませんか! 調べてみると、Google Colabのリリースノートに「8月27日 Python runtimes upgraded to Python 3.12.」となっています。 Pycaretは、Python 3.10までしかサポートされていませんので、インストールができないわけです。 https://pycaret.gitbook.io/docs/learn-pycaret/faqs#does-pycaret-work-with-all-os-and-python-versions これでは、下記のブログ記事に相当するコードが動かなくなります。 #48 Section4 分類(1) 教材の用意&PyCaretのインストール/インポート ↓ #54 Section10 分類(7)モデルの保存・再利用 せっかくAutoMLの世界に触れた読者のみなさまをがっかりさせてしまわないように、そして、猫のタローがやる気を失わないように、いろいろと試してみました。 (1) コラボで、Pythonをダウングレードする →geminiに聞きながら、いろいろとやってみたのですが、出来ませんでした・・・。成功したコードを知っている人がいれば、教えてください。 (2) venv(ブイエンブ)で仮想環境を各々の読者に作ってもらう →Pythonバージョン3.3以降の標準ライブラリとして提供されているvenvで、各々の読者が仮想環境を作成して、コードの体験をしてもらうことも選択肢にありましたが、やめました。仮想環境の作成で、疲れてしまう人が出てきますから。 (3) Dockerを使う →Dockerは、持ち運べる仮想環境を作成するもので、私が作った仮想環境でコラボとほぼ同様な操作性を持つ「Jupyter Notebook」でコードを書いたり、結果を表示することができます。WindowsでもDockerを使えると書いてあったので、勉強中です。ハードルが高いです・・・。 いろいろとgeminiに聞いていくうちに、geminiが手軽な方法を提案してくれました。コラボに実装されている「 ランタイム バージョン 」を選択する方...

#55 Section11 分類(8)まとめ

イメージ
さて、分類の最後です。 初めての Pycaret はいかがでしたか? 出力された評価結果、分析結果を詳しく説明しましたが、最低限、下記のコードを書けば、機械学習の『 二項分類 』で分析することができます。 再利用の「load_model」関数を入れても全部で16行! コードを書くのが億劫だと思っている方でも、1行のコードで、どんどん出力が出ますので、さまざまな種類の機械学習を体験していきましょう。 次回からは、 回帰 (Regression)を体験していきます!

#54 Section10 分類(7)モデルの保存・再利用

イメージ
さて、せっかく最も性能が良いモデルを見つけたので、それを保存して、またの機会に使えるようにしておきましょう。 pycaretの『save_model』関数を使用し、下記のコードによって、選択したモデル(「best」)を保存することができます。  save_model(選択したモデルの名前, '保存するモデルの名前') 今回は、「my_first_pipeline」という名前で保存します。 「my_first_pipeline」は、現在の作業ディレクトリに、モデルのIDに *.pkl の拡張子が付いたファイル(* pickle形式 )として保存されます。これは、後でいつでも利用することができます。 pickle形式のファイルは、path引数で指定した場所、または今回のようにpath引数を省略した場合は現在の作業ディレクトリに保存されます。関数の出力や、ファイルシステムを直接確認することで、保存場所を特定できます。ただし、 pickleファイルはテキスト形式ではなく、コンピュータが効率的にデータを読み書きするためのバイナリ形式で保存されています。そのため、Googleドライブの検索エンジンでは、ファイルの内容をテキストとして解析することが難しく、 キーワードで検索することができません 。 save_model関数の主なアウトプットは、モデルだけでなく、データの前処理方法全体が一つのパイプラインとして保存されたこと、そしてそのパイプラインに含まれる個々の処理ステップの詳細と、最終的な学習済みモデルの種類とハイパーパラメータ、そして保存されたファイルの名前を示しています。この情報があれば、保存されたパイプラインがどのような処理を行い、どのようなモデルを含んでいるかを後で正確に把握することができます。 モデルの出力にでてくる英語の文章の説明を下記の2枚のスライドにまとめました。 わずか数行で、このような処理をしていたことに驚きです! 「 load_model(‘保存したモデル名‘) 」を使うと、「my_first_pipeline」という名前で保存したモデルを読み込む(ロードする)ことができます。ここでは、読み込んだモデルを「loaded_best_pipeline」と名付け直しています。 出力は、下図の青い線で囲んだものになります。 この出力の「 ▶ 」をク...

#53 Section9 分類(6)予測

イメージ
今回は、compare_models関数で求めた最も性能が良かったモデル(lr/logistic Regression)で、予測をしてみましょう。 下記のコードは、setup()で分割したテストデータ(231行×9列/Transformed test set shape)に対して予測した結果を返してくれます。 holdout_pred = predict_model(モデル名) 宣言した『holdout_pred』のholdoutは、モデルを評価するデータを作るためにデータを分割することを意味しています。別に何と宣言してもいいのですが、わかりやすいように『holdout_pred』としておきましょう。 出力は、主な評価指標となります。 『compare_models』関数を使って、モデルを評価した際の評価指標一覧と比べて、どうでしょうか?正解率(Accuracy)とF1-score (F1)はやや下がっていますが、数値が高いまま維持されています。 次に、予測結果の性能評価をした「holdout_pred」の最初の5行を見てみましょう。 holdout_pred.head() 出力を見ると、テストデータに 予測ラベル ( prediction_label )と 予測確率 ( prediction_score )が付与されていますね。 予測ラベル(prediction_label)は、予測されたインスタンスのクラスを表しています。「0」が糖尿病陰性、 「1」が糖尿病陽性でしたね。 また、予測確率(prediction_score)は、インスタンスが予測されたクラスである確率を表しています。 最も性能の良かったモデル「best」(lr/logistic Regression)をget_data('diabetes')で読込んだ「data」(訓練データ+テストデータ)すべてにあてはめて性能を確認してみます。 まずは、 「data」 の列名「Class variable」を削除し、 モデルをあてはめるデータを作成します。 「data」をコピーして、列名「Class variable」を削除し、「new data」と宣言します。次に「new data」の最初の5行を確認してみます。 下記のコードを使って、「new_data」で予測をしてみましょう! predic...

#52 Section8 分類(5)モデルの分析(2)

イメージ
さて、モデルのパフォーマンスを分析するパートの続きを始めます。 実は、PyCaretでは、「plot_model関数」を使わなくても、下記の「evaluate_model関数」を使うことで、様々なモデルの評価を可視化(グラフ化)することができます。 下図のように、 evaluate_model(best) と短いコードを書き、実行すると、21種類の描画(Plot type)を選択するボタンが現れます。 何もしない状態では、「Pipline Plot」が選択され、機械学習モデルを構築する際にPyCaretが自動的に行った前処理を視覚的に表現しています。SimpleImputerは欠損値の補完、 CleanColumnNamesはデータセットの列名の整形をしたことを表しています。 各ボタンをクリックすると、それぞれの評価を可視化したグラフが現れます。下記は、 『plot_model』関数を使って表示させたグラフですね。 グラフの中には、直感的に理解しにくいものも含まれています。4th STEPでは、クラスの予測をすることが最大の目的ですので、今は理解できなくても構いません。 予測結果が思わしくない場合、データサイエンティストや統計に詳しいメンバーとディスカッションする時にこのグラフが威力を発揮します。それぞれの グラフを見て、スライドの緑文字のように感じることができれば 一人前です。 一通り、どんなものか、解説していきます。 *********** 1. Hyperparameters パラメーター(Parameter)は、モデルが訓練データから自動的に学習し、調整していく重みやバイアスなどの値です。それに対して、ハイパーパラメータ(Hyperparameter)は、学習前に人手で設定するアルゴリズムの挙動を制御する値です。つまり、パラメータはモデルが学習によって得たもの、ハイパーパラメータはモデルの学習の前に設定するものとなります。 Hyperparametersでは、PyCaretが ハイパーパラメータをどのように設定したかを表示 してくれます。 本来、分析者が経験等に基づいて決めるものですが、PyCaretはいい感じに決めてくれます。 次スライドでハイパーパラメーターの解説をしますが、PyCaretには、このハイパーパラメーターをチューニングして一番結果が良いもの...