#はじめに
先日、リリースされた機械学習ライブラリーPyCaretを使ってみました。
データの特徴量分析や複数のモデルとの性能比較作業が自動化され、これまでのデータサイエンティストの作業時間がだいぶ減ると思います。
今回は、回帰問題のボストン不動産問題をPyCaretでかけてみます。
**前回の記事:
1. PyCaretでワインの品質を分類してみた **
**2. PyCaretでタイタニック生存予想をしてみた **
#1. PyCaretのインストール
下記のコードを実行しインストールします。
Anacondaを使っていますが、PyCaret専用の仮想環境を立ち上げてインストールしました。
既存のCondaで管理されてる仮想環境では、エラーが発生する場合があります。(恐らくpipとcondaとの衝突が原因)
pip install pycaret
#2.データの取得
PyCaretはいくつのオープンソースデータセットをget_data()で提供しています。
提供しているデータセットの一覧は、下記のリンクで確認可能です。
https://pycaret.org/get-data/#datasets
今回はボストン不動産価格データセットを使います。
from pycaret.datasets import get_data
dataset = get_data('boston')
Pandasのprofile_report()を使い、データの中身を見てみます。
import pandas_profiling
dataset.profile_report()
データの説明です。
ボストン不動産のデータサイズは、506行X14列です。
このデータには、説明変数の説明です。
-
crim: 町ごとの一人当たりの犯罪率
-
zn: 25,000平方フィートを超える区画に分けられた住宅地の割合。
-
indus: 町あたりの非小売業の割合(面積比)
-
chas: Charles River dummy variable (= 1 路が川と接している場合; 0 その他).
-
nox: 窒素酸化物濃度(1000万分の1)
-
rm: 住居あたりの部屋の平均数
-
age: 1940年より前に建てられた所有者が居住するユニットの割合。(データセットの調査年度が1978年)
-
dis: 5つのボストン雇用センターまでの距離の加重平均
-
rad: 環状高速道路へのアクセシビリティのインデックス
-
tax: 10,000ドルあたりの固定資産税率
-
ptratio: 町別の生徒-教師比率
-
black: =1000(Bk-0.63)^ 2, ここでBkは、町の黒人の割合。
-
lstat: 人口の低いステータス(%)
-
medv(目的変数):所有者が居住する住宅の中央値(\ $ 1000s)
#3.データの前処理
sample()を利用し、データセット90%を学習データに、10%をテストデータに分けます。
data = dataset.sample(frac=0.9, random_state=786).reset_index(drop=True)
data_unseen = dataset.drop(data.index).reset_index(drop=True)
print('Data for Modeling: ' + str(data.shape))
print('Unseen Data For Predictions: ' + str(data_unseen.shape))
結果 (10項目まで表記)
Data for Modeling: (455, 14)
Unseen Data For Predictions: (51, 14)
setup()を利用して、データの前処理を行います。その時、目的変数を引数target=medvと指定します。
from pycaret.regression import *
exp_reg101 = setup(data = data, target = 'medv',session_id=12)
#4.モデルの比較
compare_models()で、データセットを複数の回帰モデルを用いて分析を行い、その結果を表にまとめます。どの回帰モデルを使うか検討の時、かなり役に立つ機能です。
Pycaretが提供する回帰モデルは10種類以上で、下記のリンクで確認が可能です。
compare_models()
catBoost RegressorのRMSE=3.1399で、R^2=0.859でした。今回は、PyCaretの性能評価ということで、8位のLinear Regression(R^2=0.6739)で話を進めます。
#5.分析モデルの生成
分類モデルを選択して、モデリングを行います。create_model()を使います。
今回は、Linear Regressionモデルを利用します。
lr = create_model('lr')
R-2の平均が0.6739でした。(k-fold法、n_fold=10)
結果
#6.分析モデルのチューニング
tune_modelを用いて、モデルのチューニングも行います。
tuned_lr = tune_model('lr')
チューニング前のR^2の平均が0.6739、チューニング後の平均が0.6739と改善されませんでした。Linear Regressionの場合、tuned_model()は、あまり期待できないかもしれません。
#7.分析モデルの可視化
plot_modelを用いて、分析結果を可視化します。
plot_model(tuned_lr)
#8.分析モデルの評価
evaluate_model()を使い、複数の評価を同時に行うことが可能です。
evaluate_model(lr)
黄色い枠の中のボタンを押すと、各々の評価結果が表示されます。
#9.予測
finalize_model()でモデルをFinalizeした後、predict_model()で予測を行います。
予測の時には、テストデータ(ここでは、unseen_data)を使います。
final_lr = finalize_model(tuned_lr)
unseen_predictions = predict_model(final_lr, data=data_unseen)
unseen_predictions.head()
Label列は、予測の結果を意味します。medv列は正解です。
#10.まとめ
- PyCaretで回帰問題を分析を行いました。
10.1 分析に使用したPycaret関数一覧
- データの前処理: setup()
- モデルの比較: compare_models()
- 分析モデルの生成: create_model()
- チューニング: tune_model()
- 可視化: plot_model()
- 評価: evaluate_model()
- 予測: finalize_model(), predict_model()
#11.参考資料
1.PyCaret Home Page , http://www.pycaret.org/
2.PyCaret Classification, https://pycaret.org/classification/
3. 最速でPyCaretを使ってみた, https://qiita.com/s_fukuzawa/items/5dd40a008dac76595eea
4.PyCaretでワインの品質を分類してみた。 https://qiita.com/kotai2003/items/c8fa7e55230d0fa0cc8e
5. PyCaretでタイタニック生存予想をしてみた。https://qiita.com/kotai2003/items/a377f45ddee9829ed2c5