scikit-learnのモジュール全部説明する

- scikit-learn(機械学習のpythonライブラリ)のモジュールを全部説明しました
- モチベ：スクラッチで実装した後で「あ〜組み込みであったのかよ〜」となり、悲しみが発生したため
- [公式 API Reference](https://scikit-learn.org/stable/modules/classes.html)を参考に書いています
- [公式用語集](https://scikit-learn.org/stable/glossary.html)と合わせてご覧ください
- 個人的によく使うものは太字にしています
- 記事内容にプルリクがある場合はコメントいただけると嬉しいです

|名前|説明|
|:---|:---|
|base|文字通り他のクラスや関数のベースになるもの。<br>これらを継承すればクラス等を自作できる。([例](https://scikit-learn.org/stable/auto_examples/cluster/plot_inductive_clustering.html#sphx-glr-auto-examples-cluster-plot-inductive-clustering-py))|
|calibration|分類器の確率のCalibrationに使う。<br>つまり、分類器が各ラベルに割当てた確率と実際の確率を近づける。([解説](https://scikit-learn.org/stable/modules/calibration.html#calibration))|
|**cluster**|クラスタリングとバイクラスタリング。|
|compose|transformer(fit_transformメソッド等を持つ変換器)をpandas DataFrameに適用できる。|
|covariance|母集団の共分散行列を推定する。|
|cross_decomposition|正準相関分析（CCA）等。|
|**datasets**|①iris等のトイデータセットをロードする。<br>②オンライン上の有名データセットをDLしてロードする。<br>　(ローカルにキャッシュがあればそれを使う。)<br>③自分で好きなデータを作る。|
|**decomposition**|PCA、ICA等の次元削減・行列分解。|
|discriminant_analysis|判別分析。ハイパラ調整が必須ではない分類器。<br>①LDA(線形判別分析) : 次元削減にも使える。<br>②QDA(二次判別分析) : 非線形分類が出来る。|
|dummy|ダミー推定器。(ランダムな二値分類器等)<br>各Metricのベースライン値を得られる。|
|**ensemble**|ランダムフォレスト等のアンサンブル学習。<br>(個人的に[この章](https://scikit-learn.org/stable/modules/ensemble.html)は読み物としても面白くて好きです。)|
|exceptions|警告とエラーが定義されている。自分で使うことは無いかも。|
|experimental|試験的に導入されているもの。<br>今はここにしかないクラスやメソッドはない。|
|feature_extraction|生データ(画像、テキスト)からの特徴抽出。|
|feature_selection|高次元データの特徴選択。値を閾値でカット、大きい順にN個、等|
|gaussian_process|GP(ガウシアンプロセス)ベースの回帰、分類。<br>推定値や推定クラスを確率分布で表現出来るが、計算量が高い。([解説](https://scikit-learn.org/stable/modules/gaussian_process.html))|
|impute|欠損値の補完。|
|inspection|特徴量がモデルに与える影響の検査。モデルの解釈に使える。<br>①Partial dependence : 特徴量と出力の関係を見る。([解説](https://scikit-learn.org/stable/modules/partial_dependence.html))<br>②Permutation importance : 特徴量の重要性を見る。([解説](https://scikit-learn.org/stable/modules/permutation_importance.html#permutation-importance))|
|isotonic|単調回帰(Isotonic regression)。<br>出力が単調増加になる制約を与えた線形回帰。|
|kernel_approximation|フーリエ変換を用いたカーネル近似。|
|kernel_ridge|カーネルリッジ回帰。|
|**linear_model**|線形モデル。ロジスティック回帰等。|
|**manifold**|多様体学習。t-SNEやisomap等の非線形次元削減。|
|**metrics**|cos類似度、AUC、f1値等様々な指標(Metric)|
|mixture|混合ガウス分布のフィッティング。|
|**model_selection**|モデル選択・ハイパラ探索。<br>①train_test_split系<br>②GridSearchCV系<br>③cross_validate系|
|**multiclass**|推定器をマルチラベル化するのに使う。|
|multioutput|マルチクラス回帰・分類。だが、scikit-learnの全ての推定器はマルチクラス出力機能があるので要らない子。|
|naive_bayes|スパムフィルタ等に使われるナイーブベイズ分類器。軽い。<br>確率分布としてガウス/多項/カテゴリ/ベルヌイ分布等を仮定可能。|
|neighbors|kNN法。ユークリッド距離だと高次元で弱い。(cos類似度等を用いる)<br>①教師なしkNN : k近傍はどのデータか?をバイナリ正方行列で返す。<br>②分類 : 距離に応じて重み付けも可能。<br> - k-NN(近い順にk個のデータの投票)<br> - Radius-N(半径内データの投票) : サンプリングが不均一な時、有効。<br>③回帰 :データラベルを連続変数と考え、分類の手法を応用する。|
|neural_network|ニューラルネット。PyTorch等の専用ライブラリ使ったほうが良い。<br>(sklearnはGPUサポートが無く、[今後対応する予定もない](https://scikit-learn.org/stable/faq.html#will-you-add-gpu-support)。)|
|**pipeline**|transformer(fit_transformメソッド等を持つ変換器)を繋ぎ、<br>最後にestimator(分類器や回帰器)に渡すパイプライン。<br>コードが読みやすくなる。<br>memoryオプションでキャッシュ利用し、メモリ使用量削減可。|
|**preprocessing**|前処理。([解説1](https://scikit-learn.org/stable/modules/preprocessing.html)、[解説2](https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html))<br>①連続変数 : バイナリ化、量子化、正規化、標準化等<br>②離散変数 : バイナリ化等(他クラスだけでなく他ラベルでも可)<br>③その他 : Polynomial featureの生成等|
|random_projection|Random projection。乱数を使った次元削減。PCA等より軽い。<br>相対誤差は発生するが、高次元空間でのユークリッド距離を保ったまま低次元に射影できる。([この論文](https://arxiv.org/abs/1803.05350)のIntroductionがわかりやすい)<br>その性質を利用して、本来高次元で効かないkNNを高次元データに使える。<br>射影先の次元が低すぎるとJohnson-Lindenstrauss lemmaが成立しない。<br>成立する下限は[Burr et al., 2018](https://arxiv.org/abs/1803.05350)で示された。|
|semi_supervised|半教師あり学習。<br>少量のラベル付きデータと大量のラベルなしデータを用いて分類。|
|**svm**|サポートベクトルマシン。回帰・分類どちらでも使える。<br>特徴量がN次元の時、各サンプルとのマージン(距離)が最大となるN-1次元の超平面を求める。<br>カーネルトリックで超平面を非線形に拡張出来る。<br>正則化は必須だが、サンプルサイズ<<特徴量数 の時に強い。<br>分類時の確率はキャリブレーションされていないので注意。<br>|
|tree|決定木。回帰でも分類でも可のノンパラ手法。<br>データからif文の閾値を学習させる。|
|utils|効率的なアルゴリズム等、Developer向けの便利機能。<br>他のモジュール内で使われている。自分で使うことは無いかも。|