PyCaretを用いた機械学習とサンプルコード

 本投稿は,PyCaret[1]を用いた機械学習の行い方と,そのサンプルコードに関する投稿です.本投稿で説明に用いた,Pythonモジュール(samplML.py)や学習用のデータ(training_data.csv)は,筆者のGitHubアカウント[2]にて,公開しています.
 本投稿の開発環境は,PyCaret v3.3.2を用いています.また,サンプルコードを書いた2025年8月16日時点で,PyCaretがサポートしているPythonのバージョンはv3.9系~3.11系であるため,Pythonはv3.10.11を用いました.

 本投稿の,機械学習における各アルゴリズムや指標の説明に関しては,末尾の参考文献に記載する技術ブログ[3]を参照しており,内容が重複しています.これは,管理者によって削除されいつアクセスできなくなってもおかしくないWebサイト/ページの性質に対し,本投稿の筆者自身の手元に情報を記録として残す備忘録を目的としているためです.

目次

  1. 機械学習の流れ
  2. 取り組む問題設定とライブラリの準備
  3. 学習データの準備と前処理
  4. アルゴリズムの決定と学習モデル作成と最適化
  5. 学習モデルの最適化前後の評価
  6. 学習モデルを用いた予測
  7. 各種Tips
    参考文献

1. 機械学習の流れ

図1 機械学習の主な流れ

 図1に示す機械学習の流れに沿い,サンプルコードを抜粋しながら第2章~第6章で説明する.
 サンプルコードをはじめとする諸ファイルとそのディレクトリ構造は下記の通りである.サンプルコードにおいては,実行に必要なファイルは実行ファイルと同じディレクトリに格納しておく必要がある.また,サンプルコードによって生成されるファイルは,実行ファイルと同じディレクトリに格納されるようにしてある.

./
├ finalized_model.pkl :作成したモデル.サンプルコード実行後に生成される
├ logs.log       :ログファイル.サンプルコード実行後に生成される
├ prediction_data.csv :家賃を予測したい各特徴量の条件を記入したもの
├ result.txt      :予測結果を記載したファイル.サンプルコード実行後に生成される
├ sample_ML.py     :サンプルコード.実行ファイル
└ training_data.csv  :学習データ

 本投稿で扱う用語の定義を行う.機械学習では,”モデル”という用語がしばしば扱われるが,下記のように文脈によって指すものが異なる.

  • 入力した学習データに基づき学習し作成したモデル
  • その学習・モデル作成に用いたモデル(例:ランダムフォレスト,勾配ブースティング)

 これらを区別するべく,本投稿では,作成したモデルを”学習モデル”または”モデル”と呼称する.そして学習やモデル作成に用いたモデルを”学習アルゴリズム”または”アルゴリズム”と呼称する.

2. 取り組む問題設定とライブラリの準備

 機械学習で問題解決する際,そもそもどのような問題を扱うのかによって,用いるアルゴリズムが異なる.扱う問題を大別すると表1に示す例があげられる.

表1 問題設定の大別
回帰
  • Pycaretで扱う際のモジュール・ライブラリ名:pycaret.regression
  • 連続値に対し予測する問題
    • 家の面積から,家賃を予測(線形回帰)
    • 家の面積,立地,築年数など,複数の要素から家賃を予測(重回帰)
    • 入力と出力の関係が曲線で表される場合の予測(非線形回帰)
分類
  • Pycaretで扱う際のモジュール・ライブラリ名:pycaret.classification
  • 教師あり学習に基づき,入力データがどの分類に該当するかを予測する問題
    事前に正解データが必要
クラスタリング
  • Pycaretで扱う際のモジュール・ライブラリ名:pycaret.clustering
  • 教師なし学習に基づき,入力データがどの分類に該当するかを予測する問題
    事前の正解データが不要,入力データ同士の類似性に基づき分類する
異常検知
  • Pycaretで扱う際のモジュール・ライブラリ名:pycaret.anomaly
  • 大量のデータの中から,他とは異なる傾向を示すデータを検出する問題
    • 外れ値の検出
    • 変化点の検出

 ライブラリは,PyCaretを扱う.そしてPyCaretで回帰問題を扱う際は,下記コードでインポートできる.importの記述方法において,ワイルドカードを用いず具体的に1つ1つ記述している理由は,PEP8にて非推奨とされていることと,Sphinxを用いたドキュメント生成を行う場合を考慮したためである[4].

from pycaret.regression import setup, compare_models, pull, create_model, tune_model, finalize_model, save_model, plot_model, predict_model, load_model

3. 学習データの準備と前処理

 本投稿で扱う学習データ(training_data.csv)は,筆者が調べたある地域の実際の物件のデータ(全261個)をまとめたものである.特徴量は,表2に示す4つである.そして目的変数(予測したい対象)は,表3の通りである.

 機械学習には,内挿と外挿の概念がある.内挿は,学習したデータの範囲内で予測を行う.これに対し外挿は,学習したデータの範囲外で予測を行う.機械学習は,基本として内挿の範囲でのみ予測を行うものである.そのため,本投稿で紹介するサンプルコードと学習データを扱う際は,各特徴量に対し,表1にて示した値の範囲内で予測を行われたし.

表2 本サンプルコードで扱う特徴量
特徴量 値の範囲
駅までの徒歩時間[分]
  • 1~21
面積[m^2]
  • 30.39~108.93
部屋の階数[階]
  • 0~13
    • 0:一戸建てとしての物件であり,1つの物件でありながら1階と2階がある物件を表す
    • 1以上:アパート/マンションとしての物件であり,その物件(部屋)がある階を表す
築年数[年]
  • 1~50
表3 本サンプルコードで扱う目的変数
特徴量 値の範囲
家賃[万円]
  • 学習データにおける,値の範囲4.5~16.2
  • 内挿の場合,特徴量は学習データの範囲内の値を用いて予測を行う.しかし目的変数においては,特徴量の組み合わせ次第で,出力される予測値は,学習データにおけ値の範囲外を取り得る

 サンプルコードは,学習データの形式がCSVファイル(文字コード:UTF-8,BOM無し)を前提に作ってある.筆者が用意したtraining_data.csvを編集する際は,注意されたし.

 前処理に関しては,本投稿では基本として省略する.
 そのうえで前処理とはどのようなものか簡略的な説明だけする.例えば学習データに,性別に関する特徴量があり,”男性”/”女性”という値を持っていたとする.これらは数値データなく文字データであり,機械学習での処理が困難なため,”男性”=0,”女性”=1のように数値に置き換える.

4. アルゴリズムの決定と学習モデル作成と最適化

 サンプルコードでは,クラスsampleMLのクラス関数make_model()にて,アルゴリズムの決定と学習モデル作成と最適化を行う.

 PyCaretの関数compare_models()を用いて,各アルゴリズムの各指標における結果を比較する.本投稿では,比較結果の中でR^2の指標に着目し,R^2の値が最も大きかったアルゴリズムが自動的に採用されるよう,下記のようにコーディングしている.

# アルゴリズムの比較
compare_models() # アルゴリズムごとの比較結果を表示
df_compare_models_result = pull() # PyCaretの関数pull()は,直前に実行したPyCarertの処理結果を取得する
self.ml_algorithm = df_compare_models_result.loc[df_compare_models_result["R2"].idxmax()] # R^2の値が最も大きいアルゴリズムを採用する

 この関数compare_models()は,各アルゴリズムの比較する際,内部的に各アルゴリズムを用いてモデルを作成し比較している.そのため,「作成した学習モデルが学習データをどれだけ説明できているか」の評価指標であるR^2が,この関数compare_models()で各アルゴリズムを比較する際の指標の1つとしてあげられている.

 関数compare_models()における学習アルゴリズム名および指標に関し,それぞれ説明する表4および表5を,第4.3節に示す.用いるアルゴリズム名を指定する場合は,表4の”ID”の項目に記載した名称を下記のように引数として与える.

self.created_model = create_model("et") # 任意のアルゴリズムでモデルを作成したい場合の例("et"は,Extremely Randomized Trees)

 PyCaretの関数create_model()を用いて,指定したアルゴリズムでモデルを作成するよう,下記のようにコーディングしている.
 そして作成したモデルに対し,PyCaretの関数tune_model()を用いて最適化・ハイパーパラメータのチューニングを行う.場合によっては,最適化は不要な操作である.引数のn_iterは,ハイパーパラメータの組み合わせを試行する反復回数である.計算時間とトレードオフの関係にあり,デフォルトは10である.引数のoptimizeは,最適化を行う観点である.

# 指定したアルゴリズムでモデルを作成
self.created_model = create_model(self.ml_algorithm.name) # アルゴリズムの比較で求めたR^2が最大のアルゴリズムを用いる
self.tuned_model = tune_model(self.created_model, n_iter = 10, optimize = "r2") # モデルの最適化
self.finalized_model = finalize_model(self.tuned_model) # モデルの確定
save_model(self.finalized_model, model_name = "finalized_model") # 作成したモデルをファイルとして保存.load_modelで読み込めば,以後もこのモデルを使用可能
表4 回帰問題における学習アルゴリズムの概要
ID 概要
catboost
  • アルゴリズム名:CatBoost Regressor,キャットブースト
  • 特徴[3]:
    • 決定木ベースの勾配ブースティングに基づくアルゴリズム
    • カテゴリカル変数(質的変数)の扱い方が上手い
    • 決定木のツリー構造を最適にして過学習を防ぐ
    • XgboostやLightGBMよりも精度が高くなる可能性がある
gbr
  • アルゴリズム名:Gradient Boosting Regressor,勾配ブースティング
  • 特徴:
    • ブースティングの弱学習器に決定木を使用したアルゴリズム
    • 1つ前の弱学習器における予測の残差を,次の学習器で小さくするようにして,前の結果を反映する
et
  • アルゴリズム名:Extra Trees Regressor,エクストラツリー
  • 特徴[3]:
    • Random Forestと同様に,ランダムな木を複数用いてバギングする
    • ブートストラップサンプリングはせず,訓練データ全てを用いる
    • シンプルで高速に動き,分類精度もRandom Forestに匹敵する
rf
  • アルゴリズム名:Random Forest,ランダムフォレスト
  • 特徴:
    • 決定木の王道と呼ばれるアルゴリズム[3]
    • アンサンブル学習の中でも,バギングと呼ばれる手法
    • 強みは,比較的に良い精度を出す傾向があること
    • 弱みは,決定木と比較して可読性が低いこと
xgboost
  • アルゴリズム名:Extreme Gradient Boosting,エックスジーブースト
  • 特徴:
    • 勾配ブースティングをさらに高性能化,高速化したもの
    • 強みは,精度が高いこと.欠損値をそのまま扱うことが可能なこと
    • 弱みは,決定木と比較して可読性が低いこと
lightgbm
  • アルゴリズム名:Light Gradient Boosting,ライトジービーエム
  • 特徴[3]:
    • xgboostの軽量版的なアルゴリズム
    • 精度の上げるためには特徴量の調整が必要
ada
  • アルゴリズム名:AdaBoost Regressor,アダブースト
  • 特徴[3]:
    • 勾配ブースティング系アルゴリズムの先駆け
    • 直前の弱識別器で誤ったサンプルに対する重みを大きくして学習を行う
lr
  • アルゴリズム名:Linear Regression,線形回帰
  • 特徴[3]:
    • 線形モデルによる回帰分析を行う
ridge
  • アルゴリズム名:Ridge Regression,リッジ回帰
  • 特徴:
    • 正則化によって過剰な過学習を防ぐ線形アルゴリズム(正則化項がペナルティの強さを表す)
    • 重回帰分析の目的関数に,L2ノルムの二乗(各パラメータに二乗の和)を足している
    • 重回帰分析の目的関数である平均二乗誤差と正則化項が最小になる場所を最適解とする
lar
  • アルゴリズム名:Least Angle Regression(LARS),最小角回帰
  • 特徴[3]:
    • Lassoの推定アルゴリズム
br
  • アルゴリズム名:Bayesian Ridge,ベイズ線形回帰
  • 特徴[3]:
    • 最適解を含めて分布として捉えようとするアルゴリズム
dt
  • アルゴリズム名:Decision Tree,決定木
  • 特徴:
    • 条件による分岐を”根”からたどることで,最も条件に合致する”葉”を検索するアルゴリズム[3]
    • 決定木単体では弱い予測アルゴリズム[3]
    • 強みは,可読性が高いことと,必要な前処理が少ないこと(標準化や外れ値除去が不要)
    • 弱みは,過学習になる場合が多く,汎用性の低いアルゴリズムになりがち(そのため,木構造の深さの上限を低下させるなど,ハイパーパラメータのチューニングで過学習を抑制することが肝要)
et
  • アルゴリズム名:Elastic Net,エラスティックネット
  • 特徴[3]:
    • リッジ回帰とラッソ回帰の折衷案のアルゴリズム
    • ラッソ回帰の「モデルに取り込める特徴量の数に制限がある」という問題点をカバー
lasso
  • アルゴリズム名:Lasso Regression,ラッソ回帰
  • 特徴:
    • 正則化によって過剰な過学習を防ぐ線形アルゴリズム(重回帰分析で用いた目的関数に正則化項を加えペナルティを課す)
    • 重回帰分析の目的関数に,L1ノルム(各パラメータの絶対値の和)を足している
    • 重みの一部が0になることで特徴量を減らす.特徴量が多い場合に,特に高い効果が期待できる.また,重要な特徴量の特定や,データを解釈する目的でも用いられるアルゴリズム
huber
  • アルゴリズム名:Huber Regressor,フーバー回帰
  • 特徴:
    • Huber損失関数を用いた回帰アルゴリズム
    • 誤差が小さいときは通常の二乗誤差を使用し,誤差が大きい(=外れ値の可能性がある)ときは絶対値誤差に切り替えることで,外れ値の影響を軽減する
omp
  • アルゴリズム名:Orthogonal Matching Pursuit(OMP),直交マッチング追跡
  • 特徴[3]:
    • 貪欲法の1つ
knn
  • アルゴリズム名:K-Nearest Neighbors Regressor,K-近傍法
  • 特徴:
    • 近くのデータほど似たものであるという仮定に基づく,距離ベースの手法
    • 全てのデータの距離を計算するため,正規化を行いデータのスケールを整えることで,計算量を減らすこともできる
llar
  • アルゴリズム名:Lasso Least Angle Regression,ラッソ最小角回帰
  • 特徴[3]:
    • LARSを使用したラッソ回帰
par
  • アルゴリズム名:Passive Aggressive Regressor(PA)
  • 特徴[3]:
    • オンライン機械学習のアルゴリズムの一つ
    • 訓練事例を正しく分類できなかった場合重みを更新
ard
  • アルゴリズム名:Automatic Relevance Determination(ARD),関連度自動決定
  • 特徴[3]:
    • 目的変数に対する個々の特徴量の寄与の大きさを見積もる手法
ransac
  • アルゴリズム名:Random Sample Consensus(RANSAC)
  • 特徴[3]:
    • 外れ値をうまく無視して法則性(パラメータ)を推定をする手法
tr
  • アルゴリズム名:TheilSen Regressor,テイルセン回帰
  • 特徴[3]:
    • 外れ値の影響を受けないモデル
kr
  • アルゴリズム名:Kernel Ridge,カーネルリッジ回帰
  • 特徴[3]:
    • カーネル法を回帰問題に適用したもの
svm
  • アルゴリズム名:Support Vector Machine(SVM),サポートベクタマシン
  • 特徴:
    • 与えられたデータを線形分離する思想で,2つのカテゴリを識別する分類器
    • 元々は線形分類器としても利用されていたが,特徴空間上で線形分類を行う手法が提案された
    • 強みは,未知のデータへの識別性能が比較的に高いこと.ハイパーパラメータの数が少ないこと
    • 弱みは,学習する際にデータの標準化もしくは正則化を必ず行う必要があること
mlp
  • アルゴリズム名:Multi Level Perceptron(MLP),多層パーセプトロン
  • 特徴[3]:
    • 複数の形式ニューロンが多層に接続されたネットワーク
    • 現在の機械学習の基盤となっている
表5 各指標の概要
指標名(略称) 概要
MAE
  • 指標名:Mean Absolute Error,平均絶対誤差
  • 特徴:
    • 実測値と予測値との差の絶対値に対する平均値を誤差とし,評価する指標
    • 見方:
      実測値と予測値の差が元になっているため,0に近いほど,予測に誤差がないことを意味する
MSE
  • 指標名:Mean Squared Error,平均二乗誤差
  • 特徴:
    • 実測値と予測値との差の二乗に対する平均値を誤差とし,評価する指標
    • 差を2乗していることから,大きな差をより重く扱い評価する
    • 二乗しているため,誤差の単位は,実測値や予測値の単位とは異なる
    • 見方:
      実測値と予測値の差が元になっているため,0に近いほど,予測に誤差がないことを意味する
RMSE
  • 指標名:Root Mean Squared Error,二乗平均平方根誤差
  • 特徴:
    • 実測値と予測値との差の2乗に対する平均値の平方根の値を誤差とし,評価する指標
    • 差を2乗していることから,大きな差をより重く扱い評価する
    • 最終的に平方根を取っているため,誤差の単位は,実測値や予測値の単位と同じである
    • 見方:
      実測値と予測値の差が元になっているため,0に近いほど,予測に誤差がないことを意味する
R2
  • アルゴリズム名:R^2,決定係数
  • 特徴:
    • 作成した学習モデルが,学習データのばらつきをどれだけ説明できているかを評価する指標
    • 見方[3]:
      • 0.9以上:過学習の可能性あり
      • 0.8以上:良いモデル
      • 0.6以下:予測できていない

5. 学習モデルの最適化前後の評価

 サンプルコードでは,クラスsampleMLのクラス関数show_evaluate_model()にて,作成したモデルに対し最適化の前と後の評価を図示する.作成したモデルの良し悪しや,より良いモデルを作成するための判断に用いるものであり,クラス関数show_evaluate_model()の処理は省いても機械学習と予測自体は可能である.
 サンプルコードでは,数ある指標の中から”学習曲線”,”実測値と予測値”,”特徴量の訓練への寄与”の3つの指標で,最適化の前と後のそれぞれの評価と図示を行っている(計6個の図示).

# モデルの最適化前
print("最適化前の「学習曲線」「実測値と予測値」「特徴量の訓練への寄与」を図示")
plot_model(self.created_model, scale = 4, plot = "learning") # 学習曲線の図示
plot_model(self.created_model, scale = 4, plot = "error") # 予測誤差の図示
plot_model(self.created_model, scale = 4, plot = "feature") # 特徴量の重要度の図示

# モデルの最適化後
print("最適化後の「学習曲線」「実測値と予測値」「特徴量の訓練への寄与」を図示")
plot_model(self.tuned_model, scale = 4, plot = "learning") # 学習曲線の表示
plot_model(self.tuned_model, scale = 4, plot = "error") # 予測誤差の図示
plot_model(self.tuned_model, scale = 4, plot = "feature") # 特徴量の重要度の図示

 関数plot_model()に伴う,実行環境ごとの挙動の違いを表6に示す.また,関数plot_model()で図示できる各指標の説明を,表7~表8に示す.

表6 実行環境ごとの関数plot_model()の挙動
実行環境 挙動
Terminal
(例:GNOME-terminalからPythonファイルを実行した場合)
  • 関数plot_model()を複数記述していても,1個目の図のウィンドウを閉じた時点で,プログラムの実行が強制終了される
Spyder(IDE)
  • 関数plot_model()を記述している分だけの図が,タブ”プロット”またはタブ”IPythonコンソール”に全て表示され,次の処理へ自動で遷移する
Visual Studio Code(エディタ)
  • 図示されたウィンドウを閉じないと,次の図示や処理に遷移しない
  • 例えば関数plot_model()を6回連続で記述していた場合は,1個目の図のウィンドウを閉じると2個目の図のウィンドウが表示され,これを6個目まで繰り返さないと,次の処理へ遷移しない
表7 関数plot_model()の各指標
Cooks Distance Plot(クックの距離,ID:cooks)[3]
  • i番目の観測地を使用し計算された係数と,観測地を使用しないで計算された係数との,距離に対する測度
  • 図中の破線が,推奨される閾値である.それ以上は,外れ値の可能性ありと判断できる
Prediction Error Plot(予測誤差プロット,ID:error)[3]
  • 横軸に実際の値を,縦軸に予測値をプロットしたもの
  • 予測が完全である場合,傾き1の直線上に点が載る
  • 点が傾き1の直線周辺に集まるモデルが,良いモデルである
Feature Importance(top 10)(特徴量の重要度(上位10個の特徴量),ID:feature)[3]
  • 目的変数に及ぼす影響に関し,降順で特徴量が表示される(上位10個までの特徴量)
Feature Importance(all)(特徴量の重要度(全ての特徴量),ID:feature_all)[3]
 
  • 目的変数に及ぼす影響に関し,降順で特徴量が表示される(全ての特徴量)
Learning Curve(学習曲線,ID:learning)[3]
  • データ数に応じた予測精度を表すグラフ
  • 横軸にデータサイズ,縦軸に予測精度をプロットしている
  • 良いモデルの指標として「データが増えるごとにtraining scoreが減少し,cross validation scoreが増加する」ことが望ましいと言われている
  • training scoreとcross validation scoreの差が大きい場合は,学習数が足りていない可能性がある.データ数を増やすことで,モデルの精度向上を図れる可能性がある
Manifold Learning(多様体学習,ID:manifold)
  • 多様体学習とは,構造の本質を保ったまま,高次元データを低次元空間(二次元)で可視化・解析するための次元削減手法(関数plot_model()では,t-SNEやUMAPを用いて低次元可視化している)
  • 各点は,1つのサンプルを表している(学習データ中の,1行文のデータ)
  • 色は,目的変数における連続値の大小を表している(家賃0万円が暗い赤,16万円が暗い青)
  • 回帰問題の場合は,近くの点同士で色が滑らかに変化している場合,モデルが目的変数をうまく予測できていることを表す
    (分類問題の場合は,異なる点の色がはっきり分かれているほど,モデルがうまく分類できていることを表す)
Residuals Plot(残差プロット,ID:residuals)[3]
  • 横軸に予測値,縦軸に残差をプロットしたもの
  • 良いモデルの場合,残差と予測値は相関しないため,残差0のところに横に並ぶようなプロットになる
  • 残差はランダムな誤差になるはずのため,ヒストグラムは正規分布になる
  • 外れ値が生じるケースは下記の通り
    • 回帰式が適切ではない
    • データが不適切
    • 学習不足
Recursive Feature Selection(RFS,再帰的特徴選択,ID:rfe)[3]
  • 特徴量の選択数に応じた予測スコアを,折れ線グラフで表したもの
  • 横軸は特徴量の数を,縦軸は予測精度を表す.予測精度が最大のところに破線が縦に引かれている
  • サンプルコードで出力した左図において,特徴量の個数が4個のとき,最大スコアの0.833になっている
  • 再帰的特徴量選択における,特徴量の選択順番は,Feature Importance(特徴量の重要度)の順位が高いものから選択されている
Validation Curve(検証曲線,ID:vc)
  • ハイパーパラメータの値を変えたときの予測精度を表すグラフ
  • 横軸にハイパーパラメータ,縦軸に予測精度をプロットしている.横軸のハイパーパラメータは,使用するアルゴリズムによって異なる(表8)
  • ハイパーパラメータの値を確認でき,訓練精度(Training Score)と検証精度(Cross Validation Score)との差が小さくなるものを選ぶと良い
表8 Validation Curveにおけるアルゴリズムとハイパーパラメータ[3]
ハイパーパラメータ 横軸が取るハイパーパラメータ
  • CatBoost Regressor
  • Decision Tree
  • Extreme Gradient Boosting
  • Extra Trees Regressor
  • Gradient Boosting Regressor
  • Light Gradient Boosting
  • Random Forest
  • max_depth
  • Support Vector Machine
  • C
  • Multi Level Perceptron
  • Ridge Regression
  • alpha
  • AdaBoost Regressor
  • n_estimators
  • K-Neighbors Regressor
  • n_neighbors

6. 学習モデルを用いた予測

 サンプルコードでは,クラスsampleMLのクラス関数prediction()にて,目的変数に対する予測を行う.

df_target = pd.read_csv("prediction_data.csv", encoding = "utf-8") # 予測させたい条件の読み込み
self.df_predicted = predict_model(self.finalized_model, data = df_target)

 ”駅までの徒歩時間”,”面積”,”部屋の階”,”築年数”の各特徴量がどのような条件の場合の家賃を予測したいかを,サンプルコードでは実行前にprediction_data.csvに記入しておく必要がある(図2).
 図2に示したprediction_data.csvには,目的変数である”家賃”の列が設けてある.これは,コード中の学習データを格納した二次元の行列や,予測したい条件を格納した二次元の行列など,各行列の列数を統一し扱いを楽にする目的のためである.そして,”家賃”は目的変数であるため,どのような数値を入力しても予測に影響しない.他方で,列数の変化が生じないよう某かの値を入力しておく必要があるため,図2に示す通り”0”を入力してある.
 prediction_data.csvは,training_data.csvと同様に,文字コードがUTF-8(BOM無し)のCSVファイルである.

図2 prediction_data.csvの入力例

7. 各種Tips

 機械学習における実行時間の大半を,モデルの作成に対する処理が占める.そしてモデル作成に要する時間に影響を与える要素として,特徴量の数や,ハイパーパラメータのチューニングにおける反復数があげられる.サンプル数が多く,偏りも無い場合は,チューニングの反復数を少なくすることも,実行時間の短縮手段の1つとしてあげられる.

 DataFrame型の変数などで扱うデータセットに対し,代入や演算などの操作を行う場合は,for文を用いて一行一行確認し操作をするのではなく,ベクトル化によってデータセット全体に一括処理を行うことで,実行時間の短縮を期待できる.
 for文を用いる場合,Pythonのインタプリタが1つ1つの反復処理を実行する.この過程で,オーバーヘッド(元の目的の処理に対し,追加で発生する処理)が生じるため,処理が遅くなる.これに対し,ベクトル化された操作では,低レベル言語で書かれたライブラリによってデータ全体を処理するため,Pythonのオーバーヘッドが発生しない.
 また,メモリアクセスの観点でも,高速化の効果が期待できる.for文は,データに対し逐次アクセスを行う.これに対しベクトル化された操作は,連続したメモリ領域に一括で操作を行うことができる.これによりキャッシュのヒット率が上がり,処理速度が向上する.

 関数plot_model()引数に”scale”を与える.これは,出力する図の大きさに対し,倍率を指定し調整する引数であり,デフォルト値は1である.筆者・サンプルコードにおいては,出力した図を本投稿で用いる目的で,scale = 4に拡大している.

plot_model(self.tuned_model, scale = 4, plot = "learning") # 学習曲線の表示

 Python向けのグラフ描画ライブラリであるMatplotlibのインストールとその日本語化をすることで,解決できる.まず,下記コマンドをコンソール等に入力し,Matplotlibの日本語パッケージを開発環境にインストールする.

pip install japanize_matplotlib

 その後,機械学習のコーディングを行っているPythonファイル上で,Matplotlibやその日本語モジュールを,下記のようにインポートする.

import matplotlib.pyplot as plt
import japanize_matplotlib

参考文献

  1. Home – PyCaret, PyCaret, https://pycaret.org/, (参照2025-8-15).
  2. YANAKA Shunsuke, ynksnk/makeDocumentsBySphinx, GitHub, https://github.com/ynksnk/machineLearningSampleCode, (参照2025-8-15).
  3. Shugigashi, PyCaretの初心者向けまとめ(回帰編) #Python – Qiita, Qiita Inc., https://qiita.com/shuhigashi/items/0fb37468e64c76f4b245, (参照2025-8-15).
  4. PythonコードのドキュメントをdocstringとSphinxを用いて自動生成する方法 – word in the world, word in the world, https://word-in-the-world.com/2025/01/31/docstring-and-sphinx/,(参照2025-8-15).
  5. Takumi_Fukuda(福田 琢巳), 簡単にできる機械学習 ~PyCaretを使ってみた~ #Python – Qiita, Qiita Inc., https://qiita.com/Takumi_Fukuda/items/99e60793ac700974cfc4, (参照2025-8-18).
  6. 2g, Pycaretの使い方, クラスメソッド株式会社, https://zenn.dev/ottantachinque/articles/2022-05-05_pycaret, (参照2025-8-18).
  7. mitama (id:nigimitama), LightGBMの「No further splits with positive gain」というwarningの意味 – 盆暗の学習記録, 株式会社はてな, https://nigimitama.hatenablog.jp/entry/2021/01/05/205741, (参照2025-8-18).
  8. Shugigashi, PyCaretの初心者向けまとめ(分類編) #Python – Qiita, Qiita Inc., https://qiita.com/shuhigashi/items/cb6816a1da1d347bbdc2, (参照2025-8-18).
  9. ground0state(abetan), Pycaretの回帰・分類で出力されるグラフの種類について解説, Qiita Inc., https://qiita.com/ground0state/items/57e565b23770e5a323e9, (参照2025-8-18).