-- Views
February 09, 26
スライド概要
PyCaretのsetup関数は、機械学習の実験を開始するための全工程(前処理、データ分割、環境構築)を一手に引き受けます。実行には、データ、目的変数、そして結果の再現性を確保するためのsession_idが最低限必要です。
One-Hot Encoding: カテゴリー変数を数値に変換する手法です。モデルがデータ間の順序を誤認識するのを防ぐため、各カテゴリーを独立した列に展開します。前処理後にデータの列数が増えるのはこのためです。
交差検証(StratifiedKFold): データを複数グループに分け、交代でテストを行うことで、データの偏りによる評価の誤りや過学習を防ぎ、信頼性の高い性能指標を得ることができます。
記述スタイルには簡潔な「関数型API」と、より柔軟な「オブジェクト指向API」の2種類がありますが、迅速なビジネス分析にはコード量の少ない関数型が適しています。
すべてのビジネスパーソンが意思決定プロセスにデータを活用する思考を身につけるため、まずは、データサイエンスの分析を体験していきましょう。SECIモデルの最初の段階、共同化(Socialization)からはじめていきます。 下記のブログで、ここにアップしたスライド、動画を随時、公開中です。 【ブログ】https://tutorial4datascience.blogspot.com/ 【Youtubeチャンネル】https://www.youtube.com/@DataScience_for_everyone 【Kindle】そして、このブログをまとめて書籍にしました! https://amzn.to/4ryVppn https://amzn.to/4pGgFb1
4th STEP 機械学習 Section 13 回帰(2) 前処理 Setup Compare Models Analyze Model データサイエンス チュートリアル Prediction Save Model 1
4th STEP 機械学習 Section13 回帰(2) 前処理 モジュールのインポートとsetup関数の実行 1行目は解説で、2行目は、PyCaretのうち回帰に用いるモジュール『regression』をインポートしています。このモジュール は、二項分類または多項分類に使用できます。さらに、 setup関数によるいくつかの前処理機能、18以上のすぐに使えるア ルゴリズムと、学習済みモデルの性能を分析するためのプロットが用意されています。 ワイルドカード「*」を使うとモジュールで公開されているすべての関数や変数などがインポートされて使えるようになります。 3行目は、PyCaretの分類モジュールに含まれるsetup関数で、欠損値処理、データ分割などの前処理を行っています。 データサイエンス チュートリアル 2
4th STEP 機械学習 Section13 回帰(2) 前処理 setup 関数 setup(data , target = 'Class variable' , session_id = 123) 必要最小限の引数は下記の*3つ その他の引数の主なものは、下記のとおりです。 これが引数でできるなんて!ちょっとワクワクしませんか? ignore_features 無視したい特徴量のリスト normalize True Trueに設定するとデータが正規 化される train_size 訓練データのサイズ、例:=0.7 では70%が学習用データとして使 用される log_data Trueにすると、学習およびテスト データがCSV形式で保存される *session_idは、無くても動きますが、毎回違う結果が出てくる ことがありますので固定しておきましょう。 分析するデータ名 目的変数 後で再現可能にする ための擬似乱数設定 data target session_id その他は『PyCaretのsetup関数の引数について』を参照してください! https://qiita.com/Asagumo63/items/99357d4b472a9219040e データサイエンス チュートリアル 3
4th STEP 機械学習 Section13 回帰(2) 前処理 setup関数の出力(1) 出力を表示しています。結果が望ましくない 場合は、引数を新たに追加します。 引数で指定した『Session id』、『Target』が確認できます。 機械学習のタスクの種類は、回帰であることを示しています。 読み込んだ分析対象データの行×列 前処理されたデータの行×列 前処理された訓練データの行×列 *One-Hot Encodingにより、 読み込んだ元データより列数が増 えています。 前処理されたテストデータの行×列 数値とみなされる特徴量の個数 カテゴリー変数の個数 欠損値の処理が下記の場合であることを示しています。 数値特徴量の場合:欠損値をその列の平均値or中央値で補完 カテゴリ特徴量の場合:欠損値をその列の最頻値で補完。 データサイエンス チュートリアル 4
4th STEP 機械学習 Section13 回帰(2) 前処理 setup関数の出力(2) 欠損値処理は、数値データには平均値または中央値を、カテゴリデータには最頻値で 補完します。 数値の欠損値処理は、平均値で補完します カテゴリーデータの欠損値処理は、最頻値で補完します *One-Hot Encodingは上位25まで行います。 特定の列をカテゴリデータとして指定しなかったことを表します。PyCaretにお任せ状態です。 **交差検証は、StratifiedKFold(K分割交差検証)を選択 交差検証の分割数は10 並列処理に使用されるCPUコアの数、-1はすべてのコアを使用。 GPUを使用してトレーニングを行うかどうか、FalseはGPUを使いません。 実験に付けられた名前 データサイエンス チュートリアル 5
4th STEP 機械学習 Section13 回帰(2) 前処理 setup関数の出力(補足1) One-Hot Encodingは、機械学習においてカテゴリ変数を数値データに変換するための最も一般的な手法の一つです。 この手法では、1つのカテゴリ列が、それぞれのカテゴリに対応する複数の新しいバイナリ列に展開されます。すなわち、新しい 列の各行には、元のカテゴリが存在する場合は 1、存在しない場合は 0 が割り当てられます。 元データ One-Hot Encoding 色 色_赤 色_青 色_緑 赤 青 赤 緑 1 0 1 0 0 1 0 0 0 0 0 1 多くの機械学習アルゴリズム(特に線形モデル)は、数値を入力として想定しています。カテゴリ変数をそのまま扱うと、アル ゴリズムがそれらの間に順序関係があると誤って解釈してしまう可能性があります。例えば、「赤」を 1、「青」を 2、「緑」を 3 と数値に変換した場合、アルゴリズムは「緑」が「赤」よりも大きいと認識してしまいます。One-Hot Encodingは、このよう な順序関係の誤解を防ぎ、モデルがカテゴリ間の関係を正しく学習できるようにするために使用されます。 データサイエンス チュートリアル 6
4th STEP 機械学習 Section13 回帰(2) 前処理 setup関数の出力(補足2) 交差検証では、データセットを複数の部分集合に分割し、 それぞれの部分集合を交互にテストデータとして使用しながら、残 りの部分集合でモデルを学習させます。 この過程を繰り返すことで、モデルの性能を複数回評価し、その平均値を最終的な 性能指標として用います。 交差検証の種類 【出典】Cross-Validation(交差検 証)を行い、最適なアルゴリズム/パラメー タを発見する(Vertica9.0新機能) https://verticatech.ashisuto.co.jp/cross_validation/ K分割交差検証 データセットをk個の部分集合に分割し、k回の評価を行う。 層化K分割交差検証 クラスの分布を考慮してデータセットを分割する。 他の方法は、参照ページを参考に! 参照 https://otafuku-lab.co/aizine/cross-validation0910/ 評価指標 評価指標 説明 正解率(Accuracy) 正しく分類された割合 適合率(Precision) 正と予測した中で実際に正である割合 真陽性率(Recall) 実際に正である中で正と予測できた割合 F1-score 精度と再現率の調和平均 データサイエンス チュートリアル 7
4th STEP 機械学習 Section13 回帰(2) 前処理 Setup関数 オブジェクト指向API(1) ここからは、モジュールのインポートとSetup関数を使った前処理(スライド16-19)をオブジェクト指向APIでプログラムを書い ていきます。ちなみに、前のプログラムは、「関数型API」と呼びます。どちらの方式でも構いませんが、短いコードの場合は、 『関数型API』で書いていきましょう。 オブジェクト指向APIでは、インポートは、下記のように書きます。 2行目で、pycaret.regressionモジュールからRegressionExperimentクラスをインポートしています。 3行目では、オブジェクト指向プログラミングを可能にしています。具体的には、 RegressionExperiment クラス の オブジェクト(インスタンス) を作成し、expという変数に割り当てます。 データとそれに関連する処理の設計図 クラスという設計図に基づいて生成された、具体的なオブジェクト(インスタンス)のこと データサイエンス チュートリアル 8
4th STEP 機械学習 Section13 回帰(2) 前処理 Setup関数 オブジェクト指向API(2) expと名付けたオブジェクトの型を表示してインポートされたものを確認しましょう!『type(exp)』と書きます。 expオブジェクト(インスタンス)の型がpycaret.regression.oop.RegressionExperimentであることが表示されます。 これは、expがRegressionExperimentクラスのオブジェクト(インスタンス)であることを意味します。 PyCaret 3.0以降では、 RegressionExperimentクラスはpycaret.regression.oopモジュールに移動しました。そのた め、PyCaret 3.0以降を使用している場合は、型がpycaret.regression.oop.RegressionExperiment と表示されま す。端的に言えば、関数型APIとオブジェクト指向API(OOP API)が、両方使えるということです。 データサイエンス チュートリアル 9
4th STEP 機械学習 Section13 回帰(2) 前処理 Setup関数 オブジェクト指向API(3) オブジェクト指向APIで、『setup』関数を使ってみましょう! 出力は、 「関数型API」の場合と同じです。 データサイエンス チュートリアル 10
4th STEP 機械学習 Section13 回帰(2) 前処理 Setup関数 関数型API&オブジェクト指向API 2つの流儀でSetup関数をコーディングしても、結果は同じになります。 関数型API from pycaret.regression import * s = setup(data, target = 'charges', session_id = 123) オブジェクト指向API from pycaret.regression import RegressionExperiment type(exp) exp = RegressionExperiment() exp.setup(data, target = 'charges', session_id = 123) データサイエンス チュートリアル 11