#49 Section5 分類(2) 前処理

>100 Views

February 05, 26

スライド概要

PyCaretでの分析は、setup関数の実行から始まります。この関数は、欠損値処理やデータ分割などの複雑な前処理を自動化し、機械学習の実験環境を一括で整える役割を担います。

●setup関数の重要引数: 最低限、対象データ(data)、予測したい項目(target)、そして結果の再現性を確保するためのsession_idを指定します。正規化や特定の列の除外も引数一つで設定可能です。

●交差検証(Cross-Validation): データを複数のグループに分け、テスト役を交代しながら複数回評価する手法です。これにより、データの偏りによる性能評価の誤認や、訓練データにのみ適合してしまう「過学習」を防ぎ、モデルの信頼性を客観的に高めます。

2つの記述スタイル: 簡潔な「関数型API」と拡張性の高い「オブジェクト指向型API」がありますが、まずは、直感的にわかりやすい関数型でコードを書いていきましょう。

profile-image

すべてのビジネスパーソンが意思決定プロセスにデータを活用する思考を身につけるため、まずは、データサイエンスの分析を体験していきましょう。SECIモデルの最初の段階、共同化(Socialization)からはじめていきます。 下記のブログで、ここにアップしたスライド、動画を随時、公開中です。 【ブログ】https://tutorial4datascience.blogspot.com/ 【Youtubeチャンネル】https://www.youtube.com/@DataScience_for_everyone 【Kindle】そして、このブログをまとめて書籍にしました!   https://amzn.to/4ryVppn   https://amzn.to/4pGgFb1

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

4th STEP 機械学習 前処理 Section 5 分 類(2) 前処理 Setup Compare Models Analyze Model データサイエンス チュートリアル Prediction Save Model 1

2.

4th STEP 機械学習 Section5 分類(2) 前処理 モジュールのインポートとsetup関数の実行 1行目は解説で、2行目は、PyCaretのうち分類に用いるモジュール『classification』をインポートしています。このモジュー ルは、二項分類または多項分類に使用できます。さらに、 setup関数によるいくつかの前処理機能、18以上のすぐに使える アルゴリズムと、学習済みモデルの性能を分析するためのプロットが用意されています。 ワイルドカード「*」を使うとモジュールで公開されているすべての関数や変数などがインポートされて使えるようになります。 3行目は、PyCaretの分類モジュールに含まれるsetup関数で、欠損値処理、データ分割などの前処理を行っています。 データサイエンス チュートリアル 2

3.

4th STEP 機械学習 Section5 分類(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

4.

4th STEP 機械学習 Section5 分類(2) 前処理 setup関数の出力(1) 出力を表示しています。結果が望ましくない場合 は、引数を新たに追加します。 引数で指定した『Session id』、『Target』が確認できます。 機械学習のタスクの種類は、二値分類であることを示しています。 他にMulticlass(多クラス分類)、Regression(回帰)があります。 読み込んだ分析対象データの行×列 前処理されたデータの行×列 前処理された訓練データの行×列 前処理されたテストデータの行×列 数値とみなされる特徴量の個数 データの前処理(欠損値の補完、カテゴリ変数のエンコーディング、特徴量のスケーリング など)が実行されたことを意味しています。 欠損値の処理が下記の場合であることを示しています。 数値特徴量の場合:欠損値をその列の平均値or中央値で補完 カテゴリ特徴量の場合:欠損値をその列の最頻値で補完。 データサイエンス チュートリアル 4

5.

4th STEP 機械学習 Section5 分類(2) 前処理 setup関数の出力(2) 数値の欠損値処理は、列の平均値を代入 カテゴリ変数の欠損値処理は、列の最頻値を代入 *交差検証は、StratifiedKFold(K分割交差検証)を選択 【参照】 https://www.codexa.net/cross_validation/ *交差検証の分割数は、10であることを示しています 並列処理に使用するCPUコアの数は、「-1」すなわち、利用可能な すべてのCPUコアを使用 GPUを使用せず、CPUを使用してモデルの訓練 実験結果のログ記録はしない 実験の名前は、PyCaretが自動的に名付ける PyCaretが自動的に生成したセッションIDが16進数で「8d1d」で ある *交差検証は、次のスライドで解説します。 データサイエンス チュートリアル 5

6.

4th STEP 機械学習 Section5 分類(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 精度と再現率の調和平均 データサイエンス チュートリアル 6

7.

4th STEP 機械学習 Section5 分類(2) 前処理 オブジェクト指向API PyCaretのオブジェクト指向APIは、関数を直接呼び出すのではなく、クラスとい う設計図から作った「オブジェクト」に対して指示を出すというイメージです。 従来のPyCaretの使い方は、例えばデータを準備するために setup() 関数を 呼び出し、モデルを作成するために create_model() 関数を呼び出す、という ように、個々の処理に対応した関数を直接実行していました。これが「関数を直 接実行する」という意味です。 ■ オブジェクト指向APIの利点 ・コードの整理と再利用性: 関連する処理がオブジェクトにまとまるため、コード が整理され、同じ処理を何度も書く必要が減ります。 ・柔軟性と拡張性: オブジェクトの状態を保持できるため、より複雑な処理やカ スタマイズがしやすくなります。 一方、オブジェクト指向APIでは、まず特定のタスク(例えば分類や回帰)を行 ・より自然な記述: 現実世界の概念をモデル化しやすいため、コードがより直感 うための「Estimator」というクラスのオブジェクトを作成します。そして、そのオブ 的になります。 ジェクトが持つ「メソッド」と呼ばれる機能を使って、データの準備(fit() メソッド)、 PyCaretのオブジェクト指向APIを使うことで、より構造化された、柔軟で再利用 モデルの作成(create_model() メソッド)、評価(predict() メソッド)など 性の高い機械学習のワークフローを構築できる可能性があります。 の一連の操作を行います。 例えるなら、 関数を直接実行する方法 は、料理のレシピを見て、個々の工程(「野菜を切 る」「肉を炒める」「煮込む」など)をその都度指示するようなイメージです。 オブジェクト指向API は、料理人(オブジェクト)を雇って、「今日のディナーを 作って」と全体的な指示を出すようなイメージです。料理人は、野菜を切ったり、 肉を炒めたりする様々なスキル(メソッド)を持っていて、あなたの指示に応じてそ れらを使いこなします。 データサイエンス チュートリアル 7

8.

4th STEP 機械学習 Section5 分類(2) 前処理 オブジェクト指向API 用語の説明(1) クラスは、プログラミングにおける設計図のようなものです。 クラスには、その設計図がどのような特性(属性)を持ち、どのような振る舞い (メソッド)ができるかが定義されています。 属性: そのものが持つ情報や性質。例えば、犬のクラスであれば「名前」「年齢」 「犬種」「毛の色」などです。家のクラスであれば「広さ」「部屋数」「色」などです。 メソッド: そのものができる動作や機能。犬のクラスであれば「吠える」「歩く」「食べ る」などです。家のクラスであれば「ドアを開ける」「電気をつける」などです。 PyCaretのオブジェクト指向APIでは、ClassificationExperimentや RegressionExperimentといったクラスが用意されており、これらが分類や回 帰といったタスクの設計図となっています。これらのクラスからオブジェクトを作成し、 そのオブジェクトのメソッド(例えば setup(), create_model(), predict() な ど)を呼び出すことで、機械学習のプロセスを実行していくのです。 PyCaretのオブジェクト指向APIでは、ClassificationExperimentクラスや RegressionExperimentクラスのオブジェクト(インスタンス)を作成して、分 類や回帰の機械学習実験を管理します。この実験オブジェクトの変数名として、 expという名前がよく用いられます。 プログラミングでは、クラスを元に「オブジェクト(インスタンス)」と呼ばれる実体 を作り出すことができます。同じクラスから作られたオブジェクトは、同じ種類の属性 とメソッドを持ちますが、それぞれの属性の値は異なる場合があります(例えば、 同じ犬のクラスでも、名前や年齢はそれぞれ異なります)。 ■ クラスを使うメリット ・整理整頓: 関連するデータ(属性)と処理(メソッド)を一つにまとめること で、コードが整理され、理解しやすくなります。 ・再利用性: 一度定義したクラスは、何度も再利用して複数のオブジェクトを作 ることができます。 ・拡張性: 既存のクラスを元に、新しい機能を追加したり、振る舞いを変更した りすることが比較的容易です(継承など)。 ・抽象化: 複雑な処理をクラスという一つのまとまりとして扱うことで、内部の複 雑さを隠蔽し、より抽象的なレベルでプログラムを設計できます。 データサイエンス チュートリアル 8

9.

4th STEP 機械学習 Section5 分類(2) 前処理 オブジェクト指向API 用語の説明(2) Estimator(エスティメータ)は、データを学習して何らかの予測や判断を 行うモデルのことを指します。 PyCaretのオブジェクト指向APIにおいて「Estimator」という言葉が直接クラス 名として使われることは少ないかもしれませんが、ClassificationExperiment やRegressionExperiment などの実験を管理するクラスが内部的に様々な機 械学習モデル(例えば、ロジスティック回帰、決定木、ランダムフォレストなど)の オブジェクト(インスタンス)を扱っており、これらの個々のモデルがEstimatorに 相当します。 create_model() メソッドなどで指定するモデルの名前(例: 「lr」 (ロジスティッ ク回帰)、「dt‘」(決定木))に対応するものが、まさに学習と予測を行う Estimatorのオブジェクト(インスタンス)です。 PyCaretのオブジェクト指向APIでは、ClassificationExperimentや RegressionExperimentといったクラスが用意されており、これらが分類や回 帰といったタスクの設計図となっています。これらのクラスからオブジェクトを作成し、 そのオブジェクトのメソッド(例えば setup(), create_model(), predict() な ど)を呼び出すことで、機械学習のプロセスを実行していくのです。 PyCaretのオブジェクト指向APIでは、ClassificationExperimentクラスや RegressionExperimentクラスのインスタンス(オブジェクト)を作成して、分 類や回帰の機械学習実験を管理します。この実験オブジェクトの変数名として、 expという名前がよく用いられます。 データサイエンス チュートリアル 9

10.

4th STEP 機械学習 Section5 分類(2) 前処理 Setup関数 オブジェクト指向API(1) ここからは、モジュールのインポートとSetup関数を使った前処理(スライド16-19)をオブジェクト指向APIでプログラムを書い ていきます。ちなみに、前のプログラムは、「関数型API」と呼びます。どちらの方式でも構いませんが、短いコードの場合は、 『関数型API』で書いていきましょう。 オブジェクト指向APIでは、インポートは、下記のように書きます。 2行目で、pycaret.classificationモジュールからClassificationExperimentクラスをインポートしています。 3行目では、オブジェクト指向プログラミングを可能にしています。具体的には、ClassificationExperiment クラス の オブジェクト(インスタンス) を作成し、expという変数に割り当てます。 データとそれに関連する処理の設計図 クラスという設計図に基づいて生成された、具体的なオブジェクト(インスタンス)のこと データサイエンス チュートリアル 10

11.

4th STEP 機械学習 Section5 分類(2) 前処理 Setup関数 オブジェクト指向API(2) expと名付けたオブジェクトの型を表示してインポートされたものを確認しましょう!『type(exp)』と書きます。 expオブジェクト(インスタンス)の型がpycaret.classification.oop.ClassificationExperimentであることが表示され ます。 これは、expがClassificationExperimentクラスのオブジェクト(インスタンス)であることを意味します。 PyCaret 3.0以降では、ClassificationExperimentクラスはpycaret.classification.oopモジュールに移動しました。そ のため、PyCaret 3.0以降を使用している場合は、型がpycaret.classification.oop.ClassificationExperimentと表 示されます。 データサイエンス チュートリアル 11

12.

4th STEP 機械学習 Section5 分類(2) 前処理 Setup関数 オブジェクト指向API(3) オブジェクト指向APIで、『setup』関数を使ってみましょう! 出力は、 「関数型API」の場合と同じですね。 データサイエンス チュートリアル 12

13.

4th STEP 機械学習 Section5 分類(2) 前処理 Setup関数 関数型API&オブジェクト指向API 2つの流儀でSetup関数をコーディングしても、結果は同じになります。 関数型API from pycaret.classification import * s = setup(data, target = 'Class variable', session_id = 123) オブジェクト指向API from pycaret.classification import ClassificationExperiment type(exp) exp = ClassificationExperiment() exp.setup(data, target = 'Class variable', session_id = 123) データサイエンス チュートリアル 13