scikitlearnでよく使うモデルとパラメーター（教師ありモデル）

Qiita初投稿。
機械学習の学習の過程で、よく使うモデルとパラメーターの設定を毎回忘れてしまうので
(たいしてモデルを網羅できていませんが。。。)ここで備忘録として残しておくことにします。
内容に誤りがある場合はご指摘いただけると助かります。


1.線形回帰

| モデル名 	| 線形回帰 	|
|---	|---	|
| 目的 	| 回帰 	|
| .predictが出力する値 	| yの予測値(連続値) 	|
| 調整すべき主なパラメーター 	| なし 	|
| データ標準化が必要か？ 	| スケールが異なる入力の場合は必要 	|
| ハズレ値に対しては 	| 弱い 	|
| コマンド 	| sklearn.linear_model.LinearRegression 	|
| 特徴(損失関数など) 	| 予測する誤差を最小化する係数を<br>     見つける。過学習しやすい。 	|
| 利点 	| ・高次元データにも適用可能<br>     ・パラメータ調整不要 	|
| 欠点 	| ・過学習しやすい<br>     ・リアルなデータでは正直あまり使う機会はない 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・MSE(平均2乗誤差)<br>     ・RMSE(√平均2乗誤差)<br>     ・r2_score(決定係数)など 	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html 	|
| その他 	| - 	|

2.リッジ回帰
| 　 	| 線形回帰属 	|
|---	|---	|
| モデル名 	| リッジ回帰 	|
| 目的 	| 回帰 	|
| .predictが出力する値 	| yの予測値(連続値) 	|
| 調整すべき主なパラメーター 	| ＜alpha＞<br>     0なら正則化なし=線形回帰<br>     値が小さいほど正則化が弱く(0なら線形回帰と同じ)、過学習しやすい。<br>     大きいほど強く正則化を行う(係数の値を小さくする)ので、モデルの複雑さを制限する<br>     ※default=1.0 	|
| データ標準化が必要か？ 	| はい 	|
| ハズレ値に対しては 	| 弱い 	|
| コマンド 	| sklearn.linear_model.Ridge 	|
| 特徴(損失関数など) 	| OverFitを防ぐための回帰モデル。誤差の最小化に加え、係数のl2ノルムも合わせて最小化する。重要でない特徴量の係数は0に近づき、汎化性能が高い滑らかなFitが可能になる。<br>     (完全に0にはならない)。<br>     Overfitが疑われるときにはまずこちらを試す 	|
| 利点 	| ・高次元データにも適用可能<br>     ・線形回帰では過学習となるような<br>     　ケースで汎化性能を確保できる 	|
| 欠点 	| ・最適なalphaを見つける必要あり 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・MSE(平均2乗誤差)<br>     ・RMSE(√平均2乗誤差)<br>     ・r2_score(決定係数)など 	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html 	|
| その他 	| - 	|

3.ラッソ回帰
| 　 	| 線形回帰属 	|
|---	|---	|
| モデル名 	| ラッソ回帰 	|
| 目的 	| 回帰 	|
| .predictが出力する値 	| yの予測値(連続値) 	|
| 調整すべき主なパラメーター 	| ＜alpha＞<br>     0なら正則化なし=線形回帰<br>     値が小さいほど正則化が弱く(0なら線形回帰と同じ)、過学習しやすい。<br>     大きいほど強く正則化を行う(係数の値を小さくする)ので、モデルの複雑さを制限する<br>     ※default=1.0<br>      	|
| データ標準化が必要か？ 	| はい 	|
| ハズレ値に対しては 	| 弱い 	|
| コマンド 	| sklearn.linear_model.Lasso 	|
| 特徴(損失関数など) 	| OverFitを防ぐための<br>       回帰モデル。誤差の最小化に加え、係数のl1ノルムも合わせて最小化する。重要でない特徴量の係数は0になるため、モデルから取り除かれるため、特徴量選択を行う事が可能。<br>     重要でない特徴量があることがわかっている場合はこちらを試す。 	|
| 利点 	| ・モデル構築に不要な特徴量を除去できて<br>     　モデルがスッキリする 	|
| 欠点 	| ・最適なalphaを見つける必要あり 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・MSE(平均2乗誤差)<br>     ・RMSE(√平均2乗誤差)<br>     ・r2_score(決定係数)など 	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html 	|
| その他 	| - 	|
|  	|  	|

4.ロジスティック回帰
| 　 	| 線形回帰属 	|
|---	|---	|
| モデル名 	| ロジスティック回帰 	|
| 目的 	| 分類 	|
| .predictが出力する値 	| yが特定のラベルに分類される確率 	|
| 調整すべき主なパラメーター 	| ＜penalty＞<br>     penalty{‘l1’, ‘l2’, ‘elasticnet’, ‘none’}<br>     ※default=’l2’<br>     ＜C＞<br>     1/λ、つまりλの逆数を表すのがC。<br>     値が小さいほど正則化が弱く(0なら線形回帰と同じ)、過学習しやすい。<br>     大きいほど強く正則化を行う(係数の値を小さくする)ので、モデルの複雑さを制限する<br>      ※default=1.0 	|
| データ標準化が必要か？ 	| はい(sklearnではデフォルトでl2正則化がされるので) 	|
| ハズレ値に対しては 	| 弱い 	|
| コマンド 	| sklearn.linear_model.LogisticRegression 	|
| 特徴(損失関数など) 	| yのクラス分類を行うモデル。<br>     係数wと、特徴量Xの線形重み和をシグモイド関数に入れることで、0-1の範囲でyの予測値(yがあるラベルに属する確率)を<br>     出力する。<br>     2値分類だけでなく、3値以上の分類も可能。<br>     デフォルトではL2で正則化がされている。 	|
| 利点 	| ・高次元データにも適用可能 	|
| 欠点 	| ・線形回帰なので、特徴量が線形分離不可能の場合は精度が劣る 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・混同行列（confusion matrix）<br>     ・正解率（accuracy）:sklearn.metrics.accuracy_score<br>     ・適合率（precision）:sklearn.metrics.precision_score<br>     ・再現率（recall）<br>     ・F1スコア(f1)・・・recallとPrecision双方を加味したスコア<br>     など。<br>     ※accuracyだけでなくprecisionやrecallも<br>       　見ないと、「正しくPositive(Negative)をPositive(Negative)として予測しているか」の精度が見れないので注意。<br>      	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html 	|
| その他 	| model.predict_probaで、各ラベルに分類される確率を予測できる 	|
|  	|  	|

5.SVC
| 　 	| サポートベクター属 	|
|---	|---	|
| モデル名 	| SVC 	|
| 目的 	| 分類 	|
| .predictが出力する値 	| yがどのラベルに分類されるか 	|
| 調整すべき主なパラメーター 	| ＜kernel＞<br>     カーネル関数<br>     　linear：線形<br>     　poly：多項式<br>     　rbf：Radial basis function(放射基底関数)※デフォルト<br>     　sigmoid：シグモイドカーネル<br>     ＜gamma＞<br>     訓練データの位置を中心とした、同じクラスタの領域の<br>     凝集度を決める。小さいほど単純な分類境界となり、大きいほど複雑な決定境界になる<br>     ＜C＞<br>     コストパラメータ。値が小さいほど誤りを許容し、大きくなるほど誤りの際のペナルティが大きくなる(すなわち誤りに厳しくなる)ので、過学習をおこしやすくなる<br>     C→∞とすると，誤分類を許容しないハードマージンになる 	|
| データ標準化が必要か？ 	| はい 	|
| ハズレ値に対しては 	| クラスの分離境界に最も近い点だけが分離境界を決定するので、一般に強い 	|
| コマンド 	| sklearn.svm.SVC 	|
| 特徴(損失関数など) 	| yのクラス分類を行うモデル。<br>     利用にあたっては、データの標準化が必須。<br>     n次元空間上の特徴量の点をマージン(決定境界との距離)が最大化されるように、<br>     超平面で特徴量を分離する。<br>     2値分類だけでなく、3値以上の分類も可能。密なデータにも疎なデータにも使える。<br>     カーネルトリックを用いることで、線形ではないデータの分布に対しても、<br>     非線形(曲線)の決定境界も引くことができる。 	|
| 利点 	| ・分類モデルとしては精度が高い<br>     ・非線形(曲線)の決定境界も引くことができる。 	|
| 欠点 	| ・数万データ数以上になると、計算コストが大きすぎて実用的でない。<br>     ・パラメーターの調整にとても敏感 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・混同行列（confusion matrix）<br>     ・正解率（accuracy）:sklearn.metrics.accuracy_score<br>     ・適合率（precision）:sklearn.metrics.precision_score<br>     ・再現率（recall）<br>     ・F1スコア(f1)・・・recallとPrecision双方を加味したスコア<br>     など。<br>     ※accuracyだけでなくprecisionやrecallも<br>       　見ないと、「正しくPositive(Negative)をPositive(Negative)として予測しているか」の精度が見れないので注意。<br>      	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html?highlight=svc#sklearn.svm.SVC 	|
| その他 	| model.predict_probaで、各ラベルに分類される確率を予測できる 	|
|  	|  	|

6.LinearSVC
| 　 	| サポートベクター属 	|
|---	|---	|
| モデル名 	| LinearSVC 	|
| 目的 	| 分類 	|
| .predictが出力する値 	| yがどのラベルに分類されるか 	|
| 調整すべき主なパラメーター 	| ＜penalty＞<br>     penalty{‘l1’, ‘l2’, ‘elasticnet’, ‘none’}<br>     ※default=’l2’<br>     ＜C＞<br>     コストパラメータ。値が小さいほど誤りを許容し、大きくなるほど誤りの際のペナルティが大きくなる(すなわち誤りに厳しくなる)ので、過学習をおこしやすくなる 	|
| データ標準化が必要か？ 	| はい 	|
| ハズレ値に対しては 	| クラスの分離境界に最も近い点だけが分離境界を決定するので、一般に強い 	|
| コマンド 	| sklearn.svm.LinearSVC 	|
| 特徴(損失関数など) 	| カーネル関数を使用しないSVMに基づくクラス分類手法。<br>     カーネルトリックを用いないので、分離境界は直線になる。<br>     ほかは大体SVCと同じ。 	|
| 利点 	| ・分類モデルとしては精度が高い 	|
| 欠点 	| ・数万データ数以上になると、計算コストが大きすぎて<br>        実用的でない。<br>     ・パラメーターの調整にとても敏感<br>     ・非線形な分離境界は引くことができない 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・混同行列（confusion matrix）<br>     ・正解率（accuracy）:sklearn.metrics.accuracy_score<br>     ・適合率（precision）:sklearn.metrics.precision_score<br>     ・再現率（recall）<br>     ・F1スコア(f1)・・・recallとPrecision双方を加味したスコア<br>     など。<br>     ※accuracyだけでなくprecisionやrecallも<br>       　見ないと、「正しくPositive(Negative)をPositive(Negative)として予測しているか」の精度が見れないので注意。<br>      	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html?highlight=linearsvc#sklearn.svm.LinearSVC 	|
| その他 	| model.predict_probaで、各ラベルに分類される確率を予測できる<br>      	|
|  	|  	|

7.SVR
| 　 	| サポートベクター属 	|
|---	|---	|
| モデル名 	| SVR 	|
| 目的 	| 回帰 	|
| .predictが出力する値 	| yの予測値(連続値) 	|
| 調整すべき主なパラメーター 	| ＜kernel＞<br>     カーネル関数<br>     　linear：線形<br>     　poly：多項式<br>     　rbf：Radial basis function(放射基底関数)※デフォルト<br>     　sigmoid：シグモイドカーネル<br>     ＜C＞<br>     コストパラメータ。値が小さいほど誤りを許容し、大きくなるほど誤りの際のペナルティが大きくなる(すなわち誤りに厳しくなる)ので、過学習をおこしやすくなる。<br>＜epsilon＞ 決定境界と、データポイント間の誤差の不感帯。誤差がある一定値εを超えるまでは0と扱うので、<br>−ε<誤差<εの範囲のデータ点は誤差評価の対象となる。小さければ小さいほど、ハードマージンに近づくので、誤差を厳しく評価するが、小さすぎると過学習の可能性あり。※default=0.1 	|
| データ標準化が必要か？ 	| はい 	|
| ハズレ値に対しては 	| 線形回帰よりは外れ値に強い 	|
| コマンド 	| sklearn.svm.SVR 	|
| 特徴(損失関数など) 	| SVMのアイデアを回帰に適用したもの。<br>     ただしSVMとことなるのが、SVMは「分離超平面に最も近い点の、分離平面との距離」を最小化する命題だったのに対し、SVR では<br>     「すべて(※外れ値については別)のデータポイントの分布領域と、決定境界との距離」を  マージンとして定義する。<br>     決定境界と、各データポイントの±ε以下の誤差は0として扱うことで、ハズレ値の影響を受けにくい(つまり外れ値に強くなる)<br>          そして、そのマージンの中で、SVMのコンセプトに基づいて分離境界を引くことができれば、その超平面は、「いい感じに点の真ん中を通る直線」となり、つまり線形回帰と同じく、回帰式を求めることができる、というわけ。 	|
| 利点 	| ・高次元の特徴回帰問題を解くことができる<br>     ・特徴量がサンプルの数より多い場合に有効<br>・ハズレ値に強い 	|
| 欠点 	| ・数万データ数以上になると、計算コストが大きすぎて実用的でない。<br>     ・パラメーターの調整にとても敏感 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・MSE(平均2乗誤差)<br>     ・RMSE(√平均2乗誤差)<br>     ・r2_score(決定係数)など 	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html 	|
| その他 	| coef_　で、係数を取り出せる(kernel='linear'のときのみ)<br>  理論的な解説はここが詳しい<br>https://yuyumoyuyu.com/2021/01/10/supportvectorregression/    	|
|  	|  	|

8.DecisionTreeClassifier
| 　 	| 決定木属 	|
|---	|---	|
| モデル名 	| DecisionTreeClassifier 	|
| 目的 	| 分類 	|
| .predictが出力する値 	| yがどのラベルに分類されるか 	|
| 調整すべき主なパラメーター 	| ＜random_state><br>     アルゴリズムは各分割時に max_features をランダムに選択し、<br>     それらの中から最適な分割を見つけるが、最適な分割は実行ごとに異なる。<br>     つまり実行ごとに、分割に利用される特徴量が異なってしまうため、乱数を固定して<br>     再現性を担保しておく必要がある<br>     <max_depth><br>     学習時にモデルが学習する木の深さの最大値を表すパラメーター。<br>     max_depthの値が設定されていない時、木は訓練データの分類がほぼ終了するまで際限なくデータを分割し、過学習となるため、max_depthを指定して木が深くなりすぎないようにする必要がある。<br>     ＜ min_samples_split＞<br>     Node分割時の最小サンプルサイズ。小さいほど分割しやすいので,Overfitしやすい<br>     ＜ max_features＞<br>     Node分割時に用いて良い変数の数 。各Node分割時にランダムに変数を選び, その中で分割対象<br>     を決定。大きいほどより制限がないのでOverfitしやすい<br>     ＜ min_samples_leaf＞<br>     葉の最小サンプルサイズ。小さいほど細かくノードを分割するのでOverfitしやすい 	|
| データ標準化が必要か？ 	| いいえ 	|
| ハズレ値に対しては 	| 強い 	|
| コマンド 	| sklearn.tree.DecisionTreeClassifier 	|
| 特徴(損失関数など) 	| ある特徴量Xに着目し、その特徴量Xが~以上か？未満か？みたいな<br>     質問(ノード)を、繰り返し条件分岐させることで、特定の特徴量Xをもつ<br>     データサンプルをクラスタリングさせる。<br>     なぜそのクラスタリング結果になったか？が<br>     ツリー構造となっており、わかりやすい。<br>     各ノードで、異なる特徴量Xを判別に用いる。また、クラスタリング結果を可視化したときに、分離境界は、特徴量の軸に平行な境界線となる。<br>      	|
| 利点 	| ・高速に処理できる<br>     ・可視化も容易<br>     ・データのスケーリングは不要<br>     ・非線形のデータや説明変数の多い（次元の高い）データ、様々な尺度（質　的変数か量的変数かなど）が混在しているデータでも扱える 	|
| 欠点 	| ・単体だと精度が低い 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・混同行列（confusion matrix）<br>     ・正解率（accuracy）:sklearn.metrics.accuracy_score<br>     ・適合率（precision）:sklearn.metrics.precision_score<br>     ・再現率（recall）<br>     ・F1スコア(f1)・・・recallとPrecision双方を加味したスコア<br>     など。<br>     ※accuracyだけでなくprecisionやrecallも<br>       　見ないと、「正しくPositive(Negative)をPositive(Negative)として予測しているか」の精度が見れないので注意。<br>      	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html 	|
| その他 	| from sklearn.tree import plot_tree<br>     plot_tree(model,feature_names=X.columns)で<br>     決定木自体を可視化できる 	|
|  	|  	|

9.RandomForestClassifier
| 　 	| 決定木属 	|
|---	|---	|
| モデル名 	| RandomForestClassifier 	|
| 目的 	| 分類 	|
| .predictが出力する値 	| yがどのラベルに分類されるか 	|
| 調整すべき主なパラメーター 	| ＜random_state><br>     各分類木を作成する時、各分類木でランダムなデータポイントと特徴量を選択するので、再現性担保のために乱数を固定する必要がある<br>     <max_depth><br>     学習時にモデルが学習する木の深さの最大値を表すパラメーター。<br>     max_depthの値が設定されていない時、木は訓練データの分類がほぼ終了するまで際限なくデータを分割し、<br>     過学習となるため、max_depthを指定して木が深くなりすぎないようにする必要がある。<br>     ＜n_estimators＞　default:100<br>     決定木を何個用いるか。基本的に(計算コストは掛かるが)大きければ大きいほど汎化性能を確保できる。<br>     ＜ min_samples_split＞<br>     Node分割時の最小サンプルサイズ。小さいほど分割しやすいので,Overfitしやすい<br>     ＜ max_features＞<br>     Node分割時に用いて良い変数の数 。各Node分割時にランダムに変数を選び,   その中で分割対象を決定。大きいほどより制限がないのでOverfitしやすい<br>     ＜ min_samples_leaf＞<br>     葉の最小サンプルサイズ。小さいほど細かくノードを分割するのでOverfitしやすい 	|
| データ標準化が必要か？ 	| いいえ 	|
| ハズレ値に対しては 	| 強い 	|
| コマンド 	| sklearn.ensemble.RandomForestClassifier 	|
| 特徴(損失関数など) 	| 決定木（分類木）を複数組み合わせ、<br>     それぞれの決定木に、ランダムに分割したデータ<br>     と、ランダムに選択した特徴量のセットを与える。<br>     最後に各決定木の出力結果を多数決をとることで、<br>     単体の決定木よりも優れた精度を出す。<br>     広く使われる優秀な分類アルゴリズム。 	|
| 利点 	| ・決定木よりも頑健で、精度も高い。<br>     ・データのスケーリングは不要<br>     ・非線形のデータや説明変数の多い（次元の高い）データ、<br>     　様々な尺度（質的変数か量的変数かなど）が混在している<br>     　データでも扱える<br>      	|
| 欠点 	| 訓練セットのレンジ外にテストデータがある場合、予測精度が低い<br> （外挿ができない） <br>    パラメーターの設定に敏感で、複雑にすると容易に過学習に陥ることがある 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・混同行列（confusion matrix）<br>     ・正解率（accuracy）:sklearn.metrics.accuracy_score<br>     ・適合率（precision）:sklearn.metrics.precision_score<br>     ・再現率（recall）<br>     ・F1スコア(f1)・・・recallとPrecision双方を加味したスコア<br>     など。<br>     ※accuracyだけでなくprecisionやrecallも<br>       　見ないと、「正しくPositive(Negative)をPositive(Negative)として予測しているか」の精度が見れないので注意。<br>      	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html 	|
| その他 	| plot_feature_importances_(model)で、特徴量ごとの重要度を可視化できる 	|
|  	|  	|

10.RandomForestRegressor
| 　 	| 決定木属 	|
|---	|---	|
| モデル名 	| RandomForestRegressor 	|
| 目的 	| 回帰 	|
| .predictが出力する値 	| yの予測値(連続値) 	|
| 調整すべき主なパラメーター 	| RandomForestClassifierと同じ 	|
| データ標準化が必要か？ 	| いいえ 	|
| ハズレ値に対しては 	| 強い 	|
| コマンド 	| sklearn.ensemble.RandomForestRegressor 	|
| 特徴(損失関数など) 	| RandomForestClassifierの回帰木バージョン。 	|
| 利点 	| RandomForestClassifierと同じ 	|
| 欠点 	| 訓練セットのレンジ外にテストデータがある場合、予測精度が低い（外挿ができない）<br>     パラメーターの設定に敏感で、複雑にすると容易に過学習に陥ることがある 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・MSE(平均2乗誤差)<br>     ・RMSE(√平均2乗誤差)<br>     ・r2_score(決定係数)など 	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html 	|
| その他 	| plot_feature_importances_(model)で、<br>     特徴量ごとの重要度を可視化できる 	|
|  	|  	|

11.GradientBoostingClassifier
| 　 	| 勾配Boosting属 	|
|---	|---	|
| モデル名 	| GradientBoostingClassifier 	|
| 目的 	| 分類 	|
| .predictが出力する値 	| yがどのラベルに分類されるか 	|
| 調整すべき主なパラメーター 	| ＜random_state＞<br>     再現性担保のためには、ブースティングの各反復において，各ツリーに与える<br>     乱数シードを制御する必要がある。<br>     ＜learning_rate＞float, default=0.1<br>     個々の決定木が予測した分類結果に対して、その結果の誤りをどれくらい強く<br>     補正するかの割合。(学習率)<br>     n_estimatorsとはトレードオフの関係性(学習率を大きくすればlearning_rateは小さく、小さくすればlearning_rateは大きく)がある。大きくしすぎると、誤りを強く補正しすぎるため、OverFitになる。     <br>     ＜n_estimators＞<br>     決定木を何個用いるか。RandomForestでは大きければ大きいほど良かったが、n_estimatorsを大きくしすぎると、誤りを強く補正しすぎるため、OverFitになる。n_estimatorsを先に決めておき、最適なlearning_rateを探索する方法がよく使われる。     <br>＜max_depth＞<br>学習時にモデルが学習する木の深さの最大値を表すパラメーター。<br>     max_depthを指定して木が深くなりすぎないようにする必要がある。<br>     基本的に個々の木の深さは小さく設定され、最大でも5程度が適している(ような気がする)。 	|
| データ標準化が必要か？ 	| いいえ 	|
| ハズレ値に対しては 	| 弱い 	|
| コマンド 	| sklearn.ensemble.GradientBoostingClassifier 	|
| 特徴(損失関数など) 	| 勾配Boosting分類木モデル。教師あり学習の中でもとても強力で、<br>     広く使われている。<br>       決定木を複数組み合わせることで精度を向上させるコンセプトはRandomForestと同じだが、個々の決定木の出力結果の誤りを、次の決定木が修正するように<br>     (誤ったデータに重み付けする)シーケンシャルに学習していく。(バギング)<br>     最終的に、各決定木の出力結果の加重平均を取ることで、アウトプットを生成する。<br>     仕組み上、外れ値に対しては弱いのと、計算時間がかかる。<br>     <br>     ※This is because boosting builds each tree on previous trees'   residuals/errors. Outliers will have much larger residuals than non-outliers,   so boosting will focus a disproportionate amount of its attention on those   points<br>     <br>     https://www.quora.com/Is-XGBoost-robust-to-outliers<br>      	|
| 利点 	| ・Kaggleなどでもよく使われるほど、精度が高い<br>     ・データのスケーリングは不要<br>     ・非線形のデータや説明変数の多い（次元の高い）データ、<br>     　様々な尺度（質的変数か量的変数かなど）が混在している<br>     　データでも扱える 	|
| 欠点 	| ・計算コストが非常に高く付く<br>     ・可視化は難しい<br>     ・パラメーターの設定に敏感 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・混同行列（confusion matrix）<br>     ・正解率（accuracy）:sklearn.metrics.accuracy_score<br>     ・適合率（precision）:sklearn.metrics.precision_score<br>     ・再現率（recall）<br>     ・F1スコア(f1)・・・recallとPrecision双方を加味したスコア<br>     など。<br>     ※accuracyだけでなくprecisionやrecallも<br>       　見ないと、「正しくPositive(Negative)をPositive(Negative)として予測しているか」の精度が見れないので注意。<br>      	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html 	|
| その他 	| plot_feature_importances_(model)で、<br>     特徴量ごとの重要度を可視化できる 	|
|  	|  	|

12.GradientBoostingRegressor
| 　 	| 勾配Boosting属 	|
|---	|---	|
| モデル名 	| GradientBoostingRegressor 	|
| 目的 	| 回帰 	|
| .predictが出力する値 	| yの予測値(連続値) 	|
| 調整すべき主なパラメーター 	|      <br>     random_state:<br>     再現性担保のためには、ブースティングの各反復において，各ツリーに与える乱数シードを制御する必要がある。<br>     <br>     max_depth：木を成長させたい最大の深さ<br>     <br>     n_estimators：作成するツリーの量<br>     <br>     Learning_rate：個々の決定木が予測した分類結果に対して、その結果の誤りをどれくらい強く補正するかの割合。(学習率)<br>     <br>     loss：残差の計算に使用する損失関数<br>     （デフォルトは「ls」または最小二乗）<br>     <br>       max_leaf_nodes：各ツリーに必要なリーフノードの最大数。この数がトレーニングインスタンスの数よりも少なく、2つ以上のインスタンスが同じリーフ内にある場合、リーフの値はそのリーフ内のすべてのトレーニングインスタンス値の平均になる。 	|
| データ標準化が必要か？ 	| いいえ 	|
| ハズレ値に対しては 	| 弱い 	|
| コマンド 	| sklearn.ensemble.GradientBoostingRegressor 	|
| 特徴(損失関数など) 	| 勾配ブースティング回帰木モデル。<br>     教師あり学習の中でもとても強力で、広く使われている。 	|
| 利点 	| ・Kaggleでもよく使われるほど、精度が高い<br>     ・データのスケーリングは不要<br>     ・非線形のデータや説明変数の多い（次元の高い）データ、<br>     　様々な尺度（質的変数か量的変数かなど）が混在している<br>     　データでも扱える 	|
| 欠点 	| ・計算コストが非常に高く付く<br>     ・可視化は難しい<br>     ・パラメーターの設定に敏感 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・MSE(平均2乗誤差)<br>     ・RMSE(√平均2乗誤差)<br>     ・r2_score(決定係数)など 	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingRegressor.html?highlight=gradientboostingre#sklearn.ensemble.GradientBoostingRegressor 	|
| その他 	| plot_feature_importances_(model)で、<br>     特徴量ごとの重要度を可視化できる 	|
|  	|  	|

13.NLPClassifier
| 　 	| ニューラルネットワーク属 	|
|---	|---	|
| モデル名 	| MLPClassifier 	|
| 目的 	| 分類 	|
| .predictが出力する値 	| yがどのラベルに分類されるか 	|
| 調整すべき主なパラメーター 	|      <br>     こちらにまとまっている<br>     <br>     https://spjai.com/neural-network-parameter/<br>     <br>      	|
| データ標準化が必要か？ 	| はい 	|
| ハズレ値に対しては 	| ？ 	|
| コマンド 	| sklearn.neural_network   import MLPClassifier 	|
| 特徴(損失関数など) 	| 多層パーセプトロンからなる分類モデル。 	|
| 利点 	| ・sklearn上で試せるNNモデル<br>     ・パラメーターチューンすれば高い精度を期待できる 	|
| 欠点 	| ・(隠れ層の)パラメーターチューニング、層の設計が大変 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・混同行列（confusion matrix）<br>     ・正解率（accuracy）:sklearn.metrics.accuracy_score<br>     ・適合率（precision）:sklearn.metrics.precision_score<br>     ・再現率（recall）<br>     ・F1スコア(f1)・・・recallとPrecision双方を加味したスコア<br>     など。<br>     ※accuracyだけでなくprecisionやrecallも<br>       　見ないと、「正しくPositive(Negative)をPositive(Negative)として予測しているか」の精度が見れないので注意。<br>      	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html 	|
| その他 	| - 	|
|  	|  	|

14.NLPRegressor
| 　 	| ニューラルネットワーク属 	|
|---	|---	|
| モデル名 	| NLPRegoressor 	|
| 目的 	| 回帰 	|
| .predictが出力する値 	| yの予測値(連続値) 	|
| 調整すべき主なパラメーター 	| こちらにまとまっている<br>     <br>     https://spjai.com/neural-network-parameter/ 	|
| データ標準化が必要か？ 	| はい 	|
| ハズレ値に対しては 	| ？ 	|
| コマンド 	| sklearn.neural_network.MLPRegressor 	|
| 特徴(損失関数など) 	| 多層パーセプトロンからなる回帰モデル。 	|
| 利点 	| ・sklearn上で試せるNNモデル<br>     ・パラメーターチューンすれば高い精度を期待できる 	|
| 欠点 	| ・(隠れ層の)パラメーターチューニング、層の設計が大変 	|
| 精度評価の手法 	| ・model.score(y_pred,y)<br>     ・MSE(平均2乗誤差)<br>     ・RMSE(√平均2乗誤差)<br>     ・r2_score(決定係数)など 	|
| sklearnのドキュメント 	| https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html 	|
| その他 	| coefs_[i]で、i番目のレイヤの回帰係数を取り出せる<br>     intercepts_[i]で、切片（バイアス）項を取り出せる 	|
|  	|  	|