たった2行で機械学習手法を選定！

# 初めに
`pycaret`よりも早く多くの機械学習手法を比較・選定してくれる
`Lazypredict`をご存知でしょうか？
**Lazy**・・・**怠け者**
名前の通り、怠け者が予測するには打って付けの手段になりそうだ！！

# まずはインストール

~~~python
pip install lazypredict
~~~

# 準備
**前提：データの外れ値処理は実施済みであること**
👆ここは怠けてはいけない！ここがエンジニアの腕の見せ所だ！

この記事では怠けますが、
下記の過去の記事からtrain.csv,test.csvを取得してください

https://qiita.com/shimokame777/items/d370a7ac94432e222dc5

Lazypredictは入・出力因子の変数分けが必要なので
X_train,Y_train,X_test,Y_testと設定しておく
~~~python
# データインポート
data_train = pd.read_csv('train.csv')
data_test = pd.read_csv('test.csv')
X_train=data_train.iloc[:,1:9]
Y_train=data_train.iloc[:,9]
X_test=data_test.iloc[:,1:9]
Y_test=data_test.iloc[:,9]
~~~

# 手法選定を実行する
~~~python
# lazypredict
import lazypredict
# 回帰予測の場合は下記のライブラリをインポート
from lazypredict.Supervised import LazyRegressor
# 分類問題の場合は下記をインポートしてください
# from lazypredict.Supervised import LazyClassifier

reg=LazyRegressor(verbose=1,ignore_warnings=True,predictions=True)
models, predictions=reg.fit(X_train,X_test,Y_train,Y_test)
~~~
**これで終了！はやい！！怠けられます！！**

結果の確認はdataframeなので下記を実行するだけ
~~~python
models
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2696103/117a2571-240c-c743-1701-b569de4632e7.png)

予測結果は下記を実行
~~~python
predictions
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2696103/b65c82b9-c694-96d9-64d3-03fe56980d6d.png)

# Pycaret vs Lazypredict

# モデルの種類の比較
pycaretの18種、LazyPredictはなんと**41種**を比較してくれる！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2696103/04d4b3db-585e-49ba-55ff-df57522b52b7.png)

# 精度の比較
pycaretには無いHistGradientBoostingRegressorを
LazyPredictは選定している点は異なるが、精度は同等かな！？
| | ベスト手法| RMSE | 計算時間(sec) |
|:-:|:-:|:-:|:-:|
| LazyPredict  |HistGradientBoostingRegressor   | 0.09  | 1.36  |
| Pycaret  | LightGBM  | 0.0916  | 0.2283  |

LazyPredictの結果は下記の折りたたみ参照。

<details><summary>折りたたんでます</summary>

Model|Adjusted R-Squared|R-Squared|RMSE|Time Taken
|:-:|:-:|:-:|:-:|:-:|
HistGradientBoostingRegressor|0.83|0.83|0.09|1.36
LGBMRegressor|0.82|0.83|0.09|0.29
XGBRegressor|0.82|0.82|0.09|0.45
GradientBoostingRegressor|0.78|0.78|0.10|0.93
RandomForestRegressor|0.78|0.78|0.10|2.48
ExtraTreesRegressor|0.78|0.78|0.10|1.09
BaggingRegressor|0.76|0.76|0.11|0.22
NuSVR|0.75|0.75|0.11|1.51
SVR|0.74|0.74|0.11|0.40
MLPRegressor|0.70|0.70|0.12|0.74
KNeighborsRegressor|0.65|0.65|0.13|0.07
BayesianRidge|0.64|0.65|0.13|0.02
Ridge|0.64|0.65|0.13|0.02
RidgeCV|0.64|0.65|0.13|0.03
TransformedTargetRegressor|0.64|0.65|0.13|0.03
LinearRegression|0.64|0.65|0.13|0.02
LassoLarsIC|0.64|0.65|0.13|0.02
Lars|0.64|0.65|0.13|0.04
LarsCV|0.64|0.65|0.13|0.05
LassoLarsCV|0.64|0.65|0.13|0.05
ElasticNetCV|0.64|0.65|0.13|0.09
LassoCV|0.64|0.65|0.13|0.16
SGDRegressor|0.64|0.65|0.13|0.02
ExtraTreeRegressor|0.64|0.64|0.13|0.03
HuberRegressor|0.62|0.62|0.14|0.06
LinearSVR|0.61|0.62|0.14|0.13
RANSACRegressor|0.61|0.61|0.14|0.13
DecisionTreeRegressor|0.60|0.61|0.14|0.03
OrthogonalMatchingPursuitCV|0.60|0.61|0.14|0.02
AdaBoostRegressor|0.60|0.60|0.14|0.47
PassiveAggressiveRegressor|0.48|0.48|0.16|0.03
OrthogonalMatchingPursuit|0.44|0.44|0.16|0.02
GeneralizedLinearRegressor|0.44|0.44|0.16|0.02
TweedieRegressor|0.44|0.44|0.16|0.02
GaussianProcessRegressor|0.29|0.29|0.19|1.86
PoissonRegressor|0.27|0.27|0.19|0.02
Lasso|-0.01|-0.00|0.22|0.02
ElasticNet|-0.01|-0.00|0.22|0.01
DummyRegressor|-0.01|-0.00|0.22|0.02
LassoLars|-0.01|-0.00|0.22|0.02
KernelRidge|-1.82|-1.80|0.37|0.85
</details>




Pycaretの結果は下記の折りたたみ参照

<details><summary>折りたたんでます</summary>

||Model|MAE|MSE|RMSE|R2|RMSLE|MAPE|TT (Sec)
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
lightgbm|Light Gradient Boosting Machine|0.0623|0.0084|0.0916|0.8183|0.0622|0.2283|0.3500
gbr|Gradient Boosting Regressor|0.0698|0.0098|0.0989|0.7886|0.0676|0.2600|0.2125
et|Extra Trees Regressor|0.0708|0.0104|0.1017|0.7765|0.0692|0.2687|0.3900
rf|Random Forest Regressor|0.0710|0.0108|0.1041|0.7662|0.0709|0.2681|0.6450
lr|Linear Regression|0.0952|0.0159|0.1262|0.6559|0.0875|0.4072|1.5550
lar|Least Angle Regression|0.0952|0.0159|0.1262|0.6559|0.0875|0.4072|0.0125
br|Bayesian Ridge|0.0951|0.0159|0.1262|0.6559|0.0875|0.4069|0.0125
ridge|Ridge Regression|0.0949|0.0160|0.1264|0.6551|0.0876|0.4035|0.0125
huber|Huber Regressor|0.0929|0.0165|0.1285|0.6434|0.0875|0.3721|0.0325
knn|K Neighbors Regressor|0.0963|0.0184|0.1356|0.6028|0.0935|0.3897|0.0275
ada|AdaBoost Regressor|0.1160|0.0194|0.1391|0.5818|0.1006|0.5839|0.1125
dt|Decision Tree Regressor|0.0964|0.0220|0.1482|0.5257|0.1002|0.3411|0.0175
par|Passive Aggressive Regressor|0.1223|0.0248|0.1562|0.4660|0.1056|0.5507|0.0125
omp|Orthogonal Matching Pursuit|0.1167|0.0247|0.1573|0.4662|0.1088|0.4622|0.0100
llar|Lasso Least Angle Regression|0.1680|0.0464|0.2154|-0.0008|0.1525|0.8630|0.0100
lasso|Lasso Regression|0.1680|0.0464|0.2154|-0.0008|0.1525|0.8630|0.0125
en|Elastic Net|0.1680|0.0464|0.2154|-0.0008|0.1525|0.8630|0.0100
dummy|Dummy Regressor|0.1680|0.0464|0.2154|-0.0008|0.1525|0.8630|0.0100
</details>

# まとめ
LazyPredictの強みは
たった2行のコードで実行できる点と
モデル種類が41種類と豊富である点だと考えます
※分類問題では何種類かは調査してませんのでご了承ください

日々の予測では
**データ分析・データ前処理**
　⇒　**LazyPredict**
　　　⇒　**手法決定**
　　　　　⇒　**ハイパーパラメータチューニング**
　　　　　　　⇒　**予測**
といったフローで効率化を図っていこうと思ってます

最後までお読みいただきありがとうございました