Python仕事術

Pythonで機械学習 pycaretの使い方

  • Pythonで機械学習を行いたい
  • pycaretを使ってみたい方
  • 無料で機械学習を行う方法を知りたい

(本記事のコードを作成した開発環境はGoogle Colaboratory Python 3.10.12 となります。)

今回は、機械学習モデルを簡単に作成できるPythonのパッケージ「Pycaret」の使い方について解説していきます。

私自身AIや機械学習といった技術を仕事で生かせないものかと思ってはいましたが、「難しそう」、「お金がかかりそう」といった理由から手が出せずにいました。

今回紹介する「Pycaret」は簡単に機械学習が行え、Pythonが使える環境であれば良いので、無料で使用できる「Jupyter Lab」や「Google Colaboratory」で問題なく動作することができます。

本記事を参考に皆さんも機械学習にチャレンジしていただければ幸いです。

目次
  1. pycaretでできること
  2. pycaretを使った数値予測の流れ
  3. 学習データと予測したいデータ
  4. pycaretの使用方法
  5. コードのまとめ

❶pycaretでできること

1.学習データの前処理(setup メソッド)

機械学習に使用する学習データの前処理をsetupメソッドで行えます。前処理では、各columnのデータ型の設定や欠損値の処理など、これから機械学習のトレーニングをさせるのに使用する学習データのクレンジングを行います。

2.複数アルゴリズムの比較(compare modelsメソッド)

pycaretでは複数のアルゴリズムでmodelを作成することができます。compare modelsメソッドでは簡易的ではありますが、pycaret使用できる複数のアルゴリズムを計算することでどのアルゴリズムを使ったmodelが最適なのかを示してくれます。

3.modelの作成

model作成時に使用するメソッドは複数あります。順に処理することでmodelの精度をあげていきます。

・create modelメソッド

引数で指定したアルゴリズムでmodelを作成できます。

・tune modelメソッド

modelのハイパーパラメータを調整します。

・evaluate modelメソッド

引数で指定したmodelに対して、精度を把握するためのグラフや表を表示できます。

・finalize modelメソッド

与えられた全ての学習データを使ってモデルを最終版の作成します。

・save modelメソッド

作成したmodelを保存します。

4.modelの適用

load modelメソッドを使い、作成したmodelを読み込み、predict modelメソッドにて予測を実行します。

➋pycaretを使った数値予測の流れ

下記のpycaretで行うmodel作成とその使用方法の流れを図解します。

❸学習データと予測したいデータ

機械学習を活用するためには

  • 学習データ(AIにトレーニングさせるためのデータ)
  • 予測したいデータ

の2つのデータが必要です。

pycaretの練習用として下記にExcelデータを用意しました。

  • Sheet1:学習データ(AIにトレーニングさせるためのデータ)・・・5900行
  • Sheet2:予測したいデータ・・・100行
  • Sheet3:Sheet2の実際のデータ(答え合わせ用データ)・・・100行

学習データと予測したいデータは予測したいcolumn以外一致している必要があります。また、学習データの機械学習は行単位に行われます。以上のことを意識してデータづくりをする必要があります。

今回は練習用のデータとして上記のようなダイヤモンドの価格情報を使用します。ダイヤモンドには詳しくありませんが下記のような情報が入っているようです。

  • Carat Weight・・・カラット(重量)
  • Cut・・・カット品質
  • Color・・・色
  • Clarity・・・クラリティ(透明度)
  • Polish・・・ポリッシュ(表面研磨の度合い)
  • Symmetry・・・シンメトリー(対照的の度合い)
  • Report・・・鑑定機関
  • Price・・・価格

これらの要素から「Price」を予測するmodelを作っていきます。

また、作ったmodelを使用して下記に用意した予測したいデータの「Price」の値を予測していきたいと思います。

備考

pycaretは使用方法を学ぶために練習用としていくつかデータを提供しています。今回使用するダイヤモンドの価格データもその1つです。

pycaretをインストール後に下記コードにて取得することができます。

「diamond」の部分を変更することで他のデータを取得することもできます。

略称 内容
diabetes 糖尿病患者のデータ
wine ワインの品質データ
credit 信用評価データ
insurance 保険データ
heart 心臓病データ
boston ボストンの住宅価格データ
diamond ダイヤモンドの価格データ

❹pycaretの使用方法

それでは実際にpycaretを使っていきたいと思います。

1.学習データと予測したいデータの読み込み

pandasを使ってDataFrameでど各データを読み込みます。

  • data_1:学習データ
  • data_2:予測したいデータ

で読込みます。

2.pycaretのインストール

今回はGoogle Colaboratoryを使ってpycaretの使用方法を説明していきたいと思います。まず、下記コードにてpycaretをインストールしていきます。

3.pycaretのインポート

用途によってインポートする内容が変わります。今回は「Price」の値を予測するため回帰「 pycaret.regression」を使います。

回帰以外にも以下のものが用意されています。用途に応じてインポートしましょう。

用途モジュール名
分類pycaret.classification
回帰pycaret.regression
クリスタリングpycaret.clustering
異常検出pycaret.anomaly
自然言語処理pycaret.nlp
アソシエーション分析pycaret.arules

4.学習データの前処理

setup メソッドを使って学習データの前処理を行います。

引数は data = 学習データ と target = 予測する値のあるcolumn名 を指定すれば問題ありません。

今回は引数に

  • data = data_1
  • target=’Price’

を代入します。

実行すると学習データの各情報が表示されます。

5.複数のアルゴリズムの比較

compare modelsメソッドを使うことで各アルゴリズムで機械学習を行った場合の成績を確認することができます。

下記コードで直前でsetup メソッドを使って処理を行ったデータで成績を確認できます。

実行すると各アルゴリズムのmodelを使用した際の評価指標の一覧が表示されます。

表示される評価指標は下記の通りです。

略称 評価名 評価内容
MAE  平均絶対誤差 予測値と実際の値との差の絶対値の平均。予測誤差の絶対値の平均を評価するため、外れ値の影響を受けにくい。値が小さいほど、予測の精度が高いことを示しす。
MSE  平均二乗誤差 予測値と実際の値との差の2乗の平均。予測誤差の二乗の平均を評価する指標で、小さいほど予測の精度が高いことを示す。MAEよりも大きな値を持つ傾向がある。
RMSE  平方根平均二乗誤差 MSEの平方根を取ったもの。実際の値と予測値の差の平均的な大きさを示す。予測誤差の大きさを評価する指標で、値が小さいほど予測の精度が高いことを示す。
R2  決定係数 実際のデータに対するモデルの説明力を示す。予測変数が目的変数の変動をどれだけ説明できるかを示す。1に近いほど、モデルがデータをよく説明していることを示す。
RMSLE  平方根平均対数誤差 実際の値と予測値の対数を取り、その差の平均の平方根を示す。正確な予測値を重視するタスクで使用する。
MAPE  平均絶対パーセンテージ誤差 予測値と実際の値との差を実際の値の絶対値で割り、その平均を示す。予測誤差の平均の絶対値を評価する指標で、パーセンテージで誤差を表す。
MSLE  平均二乗対数誤差 実際の値と予測値の対数を取り、その差の2乗の平均を示す。対数スケールで評価される指標で、小さな誤差を強調する。
TT  トレーニング時間 モデルのトレーニングにかかる時間

また、比較されるアルゴリズムは下記の通りです。

略称 アルゴリズム名 アルゴリズム内容
xgboost Extreme Gradient Boosting  勾配ブースティング法の一種、多くの決定木モデルを組み合わせて高性能な予測モデルを作成する。
et Extra Trees Regressor  ランダムフォレストの一種、多数の決定木を組み合わせて予測を行うが、ランダムに分岐を選ぶ。
rf Random Forest Regressor  多数の決定木モデルを組み合わせて、バギングとランダム性を用いて予測を行う。
lightgbm Light Gradient Boosting Machine  勾配ブースティング法の一種、高速でメモリ効率が良い実装を持つ。
gbr Gradient Boosting Regressor  勾配ブースティング法を用いて、アンサンブル学習により予測を行う。
dt Decision Tree Regressor  単一の決定木モデルを使用して予測を行う。データの分割ルールにより予測を行う。
lr Linear Regression  線形回帰モデルであり、説明変数と目的変数の線形関係をモデル化する。
lasso Lasso Regression  線形回帰の一種、L1正則化を用いて説明変数の選択と係数の推定を行う。
llar Lasso Least Angle Regression  L1正則化を用いた回帰手法で、変数選択を行う。
ridge Ridge Regression  線形回帰の一種、L2正則化を用いて係数の推定を行う。
huber Huber Regressor  ロバスト回帰法の一種、外れ値に対して頑健な予測を行う。
ada AdaBoost Regressor  アダブースト法を用いてアンサンブル学習を行う。
omp Orthogonal Matching Pursuit  モデル選択法の一つ、非ゼロの係数を持つ説明変数を選択する。
en Elastic Net  L1とL2正則化を組み合わせた回帰手法で、変数選択と係数の推定を行う。
br Bayesian Ridge  ベイズ統計を用いて回帰モデルを構築し、事後分布を推定する。
dummy Dummy Regressor  ダミーの予測を行うためのモデル、ベースラインとして使用する。
knn K Neighbors Regressor  近傍のデータ点を用いて予測を行う非パラメトリックな回帰手法。
par Passive Aggressive Regressor  オンライン学習のためのアルゴリズムで、重みを適応的に更新する。
lar Least Angle Regression  変数選択法で、変数を追加する際に目的変数に最も影響を与える変数を選択する。

6.modelの作成

先の項目で表示した評価指標をもとに選んだアルゴリズムでmodelを作成していきます。

model作成時に使用するメソッドは複数あり、順に処理することでmodelの精度をあげていきます。

1.create_modelメソッド

引数で指定したアルゴリズムでmodelを作成します。

今回は一番成績の良かったアルゴリズム「xgboost 」を使いたいと思います。 

実行すると学習データを10分割して公差検証を行い、結果を表示します。

2.tune_modelメソッド

ハイパーパラメータのチューニングを行います。

実行するとハイパーパラメータのチューニング後、10分割して公差検証を行い結果を表示します。

(ハイパーパラメータのチューニング後の結果がもとのmodelより悪かった場合、前のパラメータに戻ります。)

3.evaluate_modelメソッド

精度を把握するためのグラフを表示します。

「Plot Type」にある項目をクリックして選ぶことで様々なグラフや指標を確認できます。

4.finalize_modelメソッド

与えられた全ての学習データを使ってモデルの最終版を作成します。

5.save_modelメソッド

作成したmodelを保存します。第1引数に保存するmodel名、第2引数に保存名を含めた保存先のパス を指定します。今回は「finalmodel」という名前で保存します。

実行すると作成した「.pkl」という拡張子でmodelが保存されます。

7.modelの適用

作成したmodelを使って実際に数値の予測をしていきたいと思います。

1.作成したmodelのロード

load_modelメソッドを使用し、作成したmodelを読み込みます。引数部分には使用するmodelのパスを入れます。

2.数値の予測

predict_modelメソッドを使って予測したいデータの予測を実行します。引数部分には先ほど読み込んだmodelと予測したいデータを入れます。。

3.予測結果の表示

「result」の中に予測結果がDataFrameで格納されます。

column名「prediction_label」が予測した値になります。

ExcelデータのSheet3に実際の値がありますので答え合わせしてみてください。

❺コードのまとめ

説明は長くなりましたが、数行のコードを書くだけで、複数のアルゴリズムからmodelを作成し、その中から最も成績の良いモデルを選定してくれ、さらにハイパーパラメータのチューニングまでやってくれます。

Pycaretを知ることで機械学習が簡単に扱うことができるようになると思います。

最後に今回使ったコードを下記にまとめます。