見出し画像

Scikit-learn

scikit-learnは、Pythonで書かれた機械学習ライブラリです。データの前処理からモデル構築、評価まで、機械学習に必要な機能を網羅していることが特徴です


scikit-learn入門

scikit-learnとは?

scikit-learnは、Pythonで書かれた機械学習ライブラリです。様々な機械学習アルゴリズムが実装されており、データの前処理からモデルの構築、評価まで、一連の機械学習プロセスを効率的に行うことができます。

特徴

  • 多様なアルゴリズム: 回帰、分類、クラスタリング、次元削減など、幅広い機械学習アルゴリズムが実装されています。

  • 一的なインターフェース: 異なるアルゴリズムでも、基本的に同じようなインターフェースで利用できるため、学習コストが低いです。

  • 拡張性: NumPyやSciPyなどの数値計算ライブラリとの連携が容易で、カスタムなアルゴリズムを開発することも可能です。

scikit-learnでできること

  • データの前処理: 欠損値の補完、特徴量のスケーリング、特徴量選択など

  • モデルの構築: 線形回帰、ロジスティック回帰、サポートベクターマシン、決定木、ランダムフォレスト、ニューラルネットワークなど

  • モデルの評価: 精度、適合率、再現率、F1スコアなどの評価指標を用いたモデルの評価

  • モデルの選択: グリッドサーチやランダムサーチを用いたハイパーパラメータの最適化

scikit-learnでできる前処理

scikit-learnの 'preprocessing'モジュールには、様々な前処理を行うための機能が提供されています。

欠損値処理

  • 削除: 欠損値を含む行や列を削除する。

  • 補完: 平均値、中央値、最頻値などで欠損値を補完する。

  • KNNによる補完: 近傍のデータの値を参照して補完する

スケーリング

  • 標準化: データを平均0、標準偏差1に正規化する。

  • 正規化: データを0から1の範囲に収める。

  • ロバストスケーリング: 中央値と四分位範囲(IQR)を使用してデータをスケーリングします。外れ値の影響を受けにくいため、外れ値が多いデータセットに適しています。

  • ベクトルノルムスケーリング: 各データポイントをそのベクトルノルムで割る方法です。

  • 最大絶対値スケーリング: 各データポイントをその特徴量の最大絶対値で割る方法です。これにより、全ての特徴量は-1から1の範囲内に収まります。

カテゴリカルデータのエンコーディング

  • ラベルエンコーディング: カテゴリを数値に変換する

  • One-hotエンコーディング: 各カテゴリをバイナリのベクトルに変換する

特徴量選択

  • 相関係数: 特徴量間の相関関係を計算し、相関の高い特徴量を選択する。

  • 変動係数: 特徴量の変動係数を計算し、変動が大きい特徴量を選択する。

  • SelectKBest: スコア関数に基づいて上位K個の特徴量を選択する。

scikit-learnにおけるデータの分割(訓練データとテストデータ)

  • 訓練データ: モデルの学習に使用されるデータです。

  • テストデータ: モデルの性能評価に使用される、モデルが一度も見ていないデータです。

scikit-learnのtrain_test_split関数

scikit-learnのtrain_test_split関数は、データをランダムに訓練データとテストデータに分割する便利な関数です。

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • X: 説明変数(特徴量)

  • y: 目的変数

  • test_size: テストデータの割合(デフォルトは0.25)

  • random_state: 乱数シード(毎回同じ分割結果を得たい場合に指定)

分割の理由

  • 過学習の防止: 訓練データに過度に適合してしまう(過学習)ことを防ぎ、汎化性能の高いモデルを構築するため。

  • モデルの性能評価: テストデータを用いて、モデルが未知のデータに対してどれほどの精度で予測できるか評価するため。

その他の分割方法

  • K分割交差検証: データをK個に分割し、それぞれを順番にテストデータとして、残りを訓練データとして利用する手法です。

  • 留め出し法: データを訓練データと検証データ、テストデータの3つに分割する方法です。

教師あり学習(回帰)について

教師あり学習とは?

教師あり学習とは、正解データ(ラベル)付きのデータを学習させ、新しいデータに対して予測を行う機械学習の手法です。いわば、正解を見ながら問題を解くようなイメージです。

回帰とは?

回帰は、教師あり学習の一種で、連続値を予測する問題を解くための手法です

さまざまな回帰モデル

  • 線形回帰: 説明変数と目的変数の間に線形な関係を仮定するシンプルなモデル

  • 多項式回帰: 非線形な関係を表現するために、特徴量を多項式で変換する

  • サポートベクター回帰: マージンを最大化するように超平面を決定する

  • 決定木回帰: 決定木を用いて非線形な関係をモデル化する

  • ランダムフォレスト回帰: 複数の決定木を組み合わせることで、より安定した予測を行う

  • ラッソ回帰、確率的勾配降下法回帰、重回帰、エラスティックネット

回帰モデルの評価指標について

回帰モデルの評価指標は、モデルがどれだけ正確にデータを予測できているかを数値的に評価するための指標です。代表的なものとして、MAE、MSE、RMSE、R²などがあります。

代表的な評価指標

MAE (Mean Absolute Error): 絶対誤差の平均

  • 予測値と実測値の絶対的な誤差の平均値

  • 外れ値の影響を受けにくい

  • 直感的に理解しやすい

MSE (Mean Squared Error): 平均二乗誤差

  • 予測値と実測値の差の二乗の平均値

  • 大きな誤差にペナルティを与える

  • 多くの機械学習アルゴリズムの損失関数として利用される

  • 値が小さいほど誤差の少ないモデルと言えます

RMSE (Root Mean Squared Error): 平均二乗二乗根誤差

  • MSEの平方根

  • 目的変数の単位と同じになるため、解釈しやすい

  • 値が小さければ小さいほど、誤差の小さいモデルであると言えます。

R² (決定係数): 決定係数

  • モデルが説明できる変動の割合

  • 1に近いほど、モデルがデータをよく説明している

教師あり学習(分類)

分類とは?

分類は、教師あり学習の一種で、離散的な値を予測する問題を解くための手法です。

分類モデル

  • ロジスティック回帰: データがどのクラスに属するかの確率を推定する

  • k近傍(k-NN):新しいデータポイントを、その近傍に存在するk個のデータポイントのクラスに基づいて分類

  • サポートベクターマシン: データを最もよく分離する超平面を見つける

  • 決定木: 木構造を用いて、データを順次分割していく

  • ランダムフォレスト: 複数の決定木を組み合わせることで、より安定した予測を行う

  • ニューラルネットワーク: 人間の脳神経回路を模倣したモデル

評価指標

  • 正解率 (Accuracy): 全てのサンプルに対する予測の正確さの割合です。最も単純な評価指標ですが、データが不均衡な場合(あるクラスのデータが圧倒的に多い場合)には適切でない場合があります。

  • 適合率 (Precision): 正として予測されたサンプルのうち、実際に正しかったサンプルの割合です。

  • 再現率 (Recall): 実際に正のクラスに属するサンプルのうち、正しく正と予測されたサンプルの割合です。

  • F1スコア: 適合率と再現率の調和平均です。適合率と再現率のバランスを評価する際に用いられます。

  • 混同行列: 予測結果をより詳細に分析するための表です。

教師なし学習

教師なし学習はラベルなしのデータから構造やパターンを見つけ出す機械学習の手法です。データがどのように構成されているかを理解するために使用され、クラスタリングや次元削減などが代表的な技術です。顧客のセグメンテーション、異常検知、次元削減を通じたデータの可視化などに用いられます。

クラスタリング

クラスタリングは、データをいくつかのグループ(クラスター)に分ける手法です。各クラスター内のデータポイントは互いに類似しており、クラスター間では異なる性質を持っています。

  • K-meansクラスタリング:データポイントをk個のクラスターに分け、各クラスターの中心からの距離を最小化するようにグループ分けします。

  • 階層クラスタリング:データを段階的に結合し、最終的に木構造(デンドログラム)を形成します。クラスター数はデンドログラムを切る位置で決まります。

  • DBSCAN(Density-Based Spatial Clustering of Applications with Noise):高密度な領域をクラスターとみなし、低密度な領域は外れ値(ノイズ)として扱います。

次元削減

次元削減は、データの次元(特徴量)を削減し、データの構造を保ちながら、データの可視化や計算コストの削減を図る手法です。

  • 主成分分析(PCA: Principal Component Analysis):データの分散を最大化する方向にデータを射影し、少ない次元にデータを変換します。これにより、データの重要な構造を保ちながら次元を削減できます。

  • t-SNE(t-Distributed Stochastic Neighbor Embedding):高次元のデータを低次元に変換し、データ間の類似性を視覚化します。特にデータのクラスタリング構造を2次元や3次元で見るのに適しています。

教師なし学習の評価

  • クラスターの評価指標

  • 次元削減の可視化

モデルの評価

モデルの評価は、トレーニングされたモデルがどの程度うまく機能しているかを測定するプロセスです。これには、モデルが新しいデータにどれだけ適応できるかを評価することも含まれます。

交差検証(クロスバリデーション)

汎化性能を測定する方法をクロスバリデーションといいます。汎化性能とは、未知のデータに対する精度が良いことを指します。
データを複数の「フォールド」に分割し、各フォールドをテストセットとして使用しながら他のフォールドでトレーニングを行います。このプロセスを全てのフォールドで実行し、結果の平均をとります。これにより、モデルの汎化性能をより正確に評価できます。

学習曲線

トレーニングデータの量に対するモデルのパフォーマンスを視覚化したものです。データが増えるにつれて、モデルがどのように学習していくかを確認できます。

評価指標の選定

モデルの評価には、適切な指標を選ぶことが重要です

  • 精度(Accuracy): 全体のうち、正しく分類された割合。

  • 精度(Precision): 予測ポジティブのうち、正しく予測された割合。

  • 再現率(Recall): 実際のポジティブのうち、正しく予測された割合。

  • F1スコア: PrecisionとRecallの調和平均。

  • ROC-AUC: ROC曲線の下の面積で、分類モデルの性能を評価。

モデルのチューニング

モデルのチューニングでは、ハイパーパラメータを調整してモデルの性能を最適化します。
ハイパーパラメータは、モデルのトレーニング前に設定する必要があるパラメータで、モデルの学習過程や結果に大きな影響を与えます。

グリッドサーチ(Grid Search)

複数のハイパーパラメータの組み合わせを網羅的に試し、最も良いパフォーマンスを発揮する組み合わせを見つけます。

ランダムサーチ(Random Search)

パラメータの組み合わせをランダムに選びます。これにより、計算コストを抑えつつ、良好なパラメータセットを見つけることが可能です。

パイプライン(Pipeline)の利用

データ前処理やモデル学習など、複数の処理を一連の流れとしてパイプラインにまとめることで、コードの整理や再利用がしやすくなります。また、パイプライン全体のハイパーパラメータのチューニングも可能です。

モデルの保存と読み込み

モデルをトレーニングした後、再利用や実運用に向けて保存しておくことが重要です。scikit-learnでは、joblibやpickleを使ってモデルを簡単に保存・読み込みすることができます。

#保存
from joblib import dump
dump(model, 'model.joblib')
#読み込み
from joblib import load
model = load('model.joblib')


この記事が気に入ったらサポートをしてみませんか?