評価方法

機械学習モデルを解釈するSHAP

機械学習モデルを学習させた時に、実際にモデルはどの特徴量を見て予測をしているのかが知りたい時があります。今回はモデルによる予測結果の解釈性を向上させる方法の1つであるSHAPを解説します。 目次 1. XAIとは 2. SHAPとは 3. 実験・コード 1:回帰モデル(Diabetes dataset) __3.1 データ読み込み __3.2 モデル作成 __3.3 SHAP値 __3.4 SHAP可視化 4. 実験・コード 2:画像データ(Imagenet) __4.1 データ読み込み __4.2 モデル作成 __4.3 SHAP可視化 1. XAI (Explainable AI)とは XAI はExplainable AI(説明可能なAI)の英略称です。言葉通り、予測結果や推定結果に至るプロセスが人間によって説明可能になっている機械学習のモデルに関する技術や研究分野のことを指します。 AI/機械学習(特にディープラーニングなどのニューラルネットワーク)によって作成されるモデルの中身は、仕組みの性質上、基本的に解釈が難しいです。そのため、中身はブラックボックス(=内部が不明になっている箱のことと言われます。 機械学習モデルを解釈する技術にはSHAP、LIME、DeepLIFT、AIX360 (IBM)、Activation Atlases (Googleと OpenAI)などの様々なツールが考案されています。 今回紹介するSHAPは、機械学習モデルがあるサンプルの予測についてどのような根拠でその予測を行ったかを解釈するツールです。 2. SHAPとは SHAP「シャプ」はSHapley Additive exPlanationsの略称で、モデルの予測結果に対する各変数(特徴量)の寄与を求めるための手法です。SHAPは日本語だと「シャプ」のような発音のようです。ある特徴変数の値の増減が与える影響を可視化することができます。 Shapley Value Estimation 3. 実験・コード 1:回帰モデル(Diabetes dataset) データセット:糖尿病患者の診療データ(Diabetes dataset) モデル:XGBoost …

機械学習モデルを解釈するSHAP Read More »

ホールドアウト検証と交差検証

機械学習における「validation」は、一般的に「モデルの汎化性能の検証」を意味します。汎化性能とは「未知のデータに対する性能」のことです。今回はホールドアウト検証 (Hold-out Validation)と交差検証(Cross Validation)を解説します。 目次 1. ホールドアウト検証 (Hold-out Validation) 2. 交差検証 (Cross Validation) 3, train_test_split クラスAPI 4. cross_val_scoreクラスAPI 5. 実験・コード __5.1 ホールドアウト検証 __5.2 交差検証   1. ホールドアウト検証 (Hold-out Validation) ホールドアウト法は、モデルを作る学習データ (Train Data)と、モデルを評価するテストデータ(Test Data)に分割して評価します。モデルは未知のデータを予測しなければならないからです。学習データでテストしても、モデルの汎化能力は評価できません。下記のようなデータセットでスコアを計算します。   2. 交差検証 (Cross Validation) 交差検定では、用意したデータをK個に分割して、1回目はそのうちの一つをテストデータ、それ以外を学習データとして、学習・評価します。2回目は1回目と異なる別のデータをテストデータとして使い、3回目は1,2回目と異なるデータで評価をします。そして、各回で測定した精度の平均を取ります。下記のようなデータセットで平均スコアを計算します。 ホールドアウト検証の例よりも、更に汎用的に性能を確認できます。しかし、訓練とテストを K 回行うため、計算時間がかかります。 3, train_test_split クラスAPI sklearn.model_selection.train_test_split(*arrays, **options) 引数 – X_train: 学習用の特徴行列 – X_test: テスト用の特徴行列 – …

ホールドアウト検証と交差検証 Read More »

モデルの評価モジュールのsklearn.metrics

scikit-learnには、作成したモデルの評価を行うモジュールとしてsklearn.metricsが搭載されています。 今回はsklearn.metricsをまとめた話をしていきます。 https://scikit-learn.org/stable/modules/classes.html 目次 1. sklearn.metricsモジュール 2. モデル選択インターフェース 3. 分類のメトリック 4. 回帰のメトリック 5. マルチラベルランキングのメトリック 6. クラスタリングのメトリック 7. バイクラスタリングのメトリック 8. ペアワイズのメトリック   1. sklearn.metricsモジュール sklearn.metricsモジュールには、スコア関数、パフォーマンスメトリック、ペアワイズメトリック、および距離計算が含まれます。 2. モデル選択インターフェース metrics.check_scoring(estimator [、scoring、…])ユーザーオプションからスコアラーを決定します。 metrics.get_scorer(スコアリング)文字列からスコアラーを取得します。 metrics.make_scorer(score_func [、…])パフォーマンスメトリックまたは損失関数からスコアラーを作成します。 3. 分類のメトリック クラス分類 (Classification) を行った際の識別結果 (予測結果) の精度を評価するモジュールを実装します。 metrics.accuracy_score(y_true、y_pred [、…])精度分類スコアです。 metrics.auc(x、y [、reorder])trapezoidal ruleを使用したArea Under the Curve(AUC)。 metrics.average_precision_score(y_true、y_score)予測スコアから平均精度(AP) metrics.balanced_accuracy_score(y_true、y_pred)バランスの精度 metrics.brier_score_loss(y_true、y_prob [、…])ブライアースコア metrics.classification_report(y_true、y_pred)主な分類指標を示すテキストレポートを作成します。 metrics.cohen_kappa_score(y1、y2 [、labels、…])Cohen’s kappa:アノテーター間の合意を測定する統計指標です。 metrics.confusion_matrix(y_true、y_pred …

モデルの評価モジュールのsklearn.metrics Read More »

クラスタリングのアルゴリズム評価するFMI( Fowlkes-Mallows Index)

前回の記事はアルゴリズム評価を解説しました。 今回はクラスタリングのアルゴリズム評価するFMIを解説します。 FMI (Fowlkes-Mallows index)とは The Fowlkes-Mallows 指標 または、Fowlkes-Mallows スコアはクラスタリングのアルゴリズム評価する方法です。2つのクラスタリングアルゴリズムの結果間の類似性を判断するために使用されるこの方法。さらに、クラスタリングアルゴリズムの結果と実際のラベルも使われます。FMIの形式は下記になります。 TPは真陽性の数です。つまり、真のラベルと予測ラベルの両方で同じクラスターに属するポイントの数です。 FPはFalse Positiveの数です。予測ラベルではなく、真のラベルの同じクラスターに属するポイントの数です。 FNはFalse Negativeの数です。真のラベルではなく、予測ラベルの同じクラスター内です。 スコアの範囲は0〜1です。高い値は、2つのクラスター間の類似性が高いと示します。 今回は、ラベルがあるクラスタリング方法の評価をしていきます。 FMIのサンプル データセット:digitデータ 8×8の画像が1797枚(0〜9のラベル) クラスターアルゴリズム: K-Means, MeanShift モデル評価:FMI (Fowlkes-Mallows index) ライブラリの読み込む import numpy as np import pandas as pd import os import seaborn as sns import matplotlib.pyplot as plt from tqdm import tqdm_notebook from sklearn import datasets from sklearn.cluster import KMeans …

クラスタリングのアルゴリズム評価するFMI( Fowlkes-Mallows Index) Read More »

RMSLE を用いた評価指標

前回の記事は【ROC曲線とAUC】機械学習の評価指標を説明しました。今回は連続値回帰モデルの評価指標のRMSLEを紹介したいと思います。 先ず、RMSEを説明します。 RMSE (Root Mean Squared Error) 定義式   (n = 件数 、y = 実測の値、ŷ =予測の値) RMSEとか平均平方二乗誤差といいます。すべての誤差の平方根の平均です。 連続値の値でどれぐらい離れているかを平均を取り、平方根で評価します。   コード: from sklearn.metrics import mean_squared_error import numpy as np y_true = [100, 110, 120, 130] y_pred = [110, 120, 130, 140] RMSE=np.sqrt(mean_squared_error(y_true, y_pred)) print(RMSE) 10   RMSLE (Root Mean Squared Logarithmic Error) 定義式   (n = …

RMSLE を用いた評価指標 Read More »

Azure ML Studioでの Permutation Feature Importance 特徴の重要度

前回の記事は「Azure ML Studioで顧客データ分析」を説明しました。今回はPermutation Feature Importance を使ってモデルの変数の重要度を判断する機能を説明します。 機械学習モデルを作成するとき、機械学習の開発者、意思決定者、およびモデルによって影響を受ける担当者は、機械学習モデルがどのように決定を行うか、またそのパフォーマンスにどの特徴が関係するかを理解する必要があります。Permutation Feature Importance (PFI) はモデルについて説明するツールであり、機械学習開発者がモデルの変数の重要性をよく理解できるようにします。   Permutation Feature Importanceとは Breiman 著「Random Forests」論文から機械学習モデルのグローバルな特徴の重要性を判断する技術です。特徴量がランダムな値に設定されたら、どのような影響がモデルに及ぼされるかを判明する方法になります。   メリット モデルに依存しない点です。評価することができるすべてのモデルに使用できます。 特徴の重要性を計算するために、トレーニング セットだけでなく任意のデータセットを使用できます。    Permutation Feature Importanceの使い方 Feature Selection > Permutation Feature Importanceを選択します。trained model と左のインプットと接続し、右のインプットはテストデータと接続します。   Permutation Feature Importanceの設定   Random seed このシードを同じ数値にすることで、毎回同じ擬似乱数が生成されます。   Metric for measuring performance このドロップボックスから、一つのメトリックを選択することができます。 Classification Accuracy, Precision, Recall, Average Log Loss Regression Precision, …

Azure ML Studioでの Permutation Feature Importance 特徴の重要度 Read More »

過学習の対策

今回は前回の記事の続きの過学習Overfittingの対策」を紹介します。過学習と未学習の説明はこちらです。 訓練誤差とテスト誤差の理論 学習が進むほど訓練誤差が低下していきます。つまりテストデータに対する予測精度は向上するが、テストのデータセットに入っていないデータに対する予測精度が下がり、テスト誤差が上がってしまうものです。いわゆる過学習(Over Fitting)という状態になっていきます。   過学習は訓練データとテストデータの影響があります。訓練データが少ないほど、訓練誤差は小さく、汎化誤差は大きくなります。訓練データが十分に多いと、訓練誤差も汎化誤差も、ノイズの強さで頭打ちになります。   過学習の対策Overfitting prevention 1)データセットを増やす トレーニングデータが多ければ多いほど、それが過剰適合する可能性がより低いになります。 最初の過学習対策、過学習に対して最も効果がある対処法は訓練データを増やすことです   2)Data augmentation & Noiseの加工   データセットを増やすことは面倒と手間のことです。またデータセットを増やすことができない場合もあります。その場合は Data augmentation と Noiseのデータ加工の方法が役に立ちます。学習用のデータに対し人工的なノイズなどを付加した画像を生成し,生成した画像を元の学習用データに追加することで性能の向上が期待される技術になります。   前回の記事の「Data Augmentationの解説」はこちらです。   3)単純なモデルへ変化する 複雑すぎるモデルは過学習の原因の事があります。モデルはあまりにも強力であるかもしれません。 そのモデルの複雑さを軽減することができます。推定量の数を減らしたり、モデルのパラメーターを変更したりするには、モデルを単純にしても当てはまりませんが、データから学習するには複雑にすることができます。 これには、モデルをより軽量にし、より速く訓練し、そしてより速く走らせるという利点もあります。   4)早期停止 早期停はニューラル ネットワークの過学習対策です。早期停止とは、基本的に、テストデータの損失が増加し始めたら(つまり検証精度が低下し始めたら)、トレーニングを停止することです。監視する値、監視する値について改善として判定される最小変化値、訓練が停止し,値が改善しなくなってからのエポック数のパラメーターを設定することができます。   5)L1 と L2 正則化 機械学習では、過学習を防ぐ方法として正則化が行われることが多いです。過学習を避けるためには、学習モデルの選択、特徴量・次元の選定およびそれらに対応した学習データの数を注意深く考慮して設定していく必要があります。正則化とは、複雑さが増すことに対するペナルティを設け、このペナルティを訓練誤差に加えた量が最も小さくなる学習モデルを求めるようにすることにより汎化性能を高めようとするものです。一般的に使用されるのは、L1正則化とL2正則化です。 L1正則化 特定のデータの重みを0にする事で、不要なデータを削除します。 L2正則化 データの大きさに応じて0に近づけて、滑らかなモデルです。   正則化の例はこちらです。   6)DropoutとDropConnect ニューラルネットワークにおける過学習対策になりますが、DropoutとDropConnectです。 Dropoutは、設定した割合に応じて、ランダムにユニットを選択し、そのユニットの重みを「ゼロ」にします。 DropConnectは、上記の「ゼロ」を任意の重みに設定できます。さらに言うと、中間層の線形結合の「結合」に注目し、設定した割合に応じて、ランダムに「結合」を取り上げます。そして、結合に重みをかけて、活性化関数にかけます。   まとめ 今回は過学習対策を説明しました。過学習はデータサイエンティストの一般的な問題です。この記事で紹介したテクニックを使えば、過学習問題を克服して、良いモデルを作成することができるでしょう。

グリッドサーチ(ハイパーパラメータ最適化)のまとめと例

(2019年7月27日の更新) 前回の記事は「モデル評価」を話しました。 今回の記事はグリッドサーチでのハイパーパラメータ最適化を解説します。 1)グリッドサーチ とは グリッドサーチとは、モデルの精度を向上させるために用いられる手法です。全てのパラメータの組み合わせを試してみる方法のことです。機械学習モデルのハイパーパラメータを自動的に最適化してくれるというありがたい機能。例えば、SVMならCや、kernelやgammaとか 2)GridSearchCV関数の説明 Pythonの機械学習ライブラリscikit-learnにはモデルのハイパーパラメータを調整する方法としてGridSearchCVが用意されています。 class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, n_jobs=None, iid=’warn’, refit=True, cv=’warn’, verbose=0, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’, return_train_score=False) パラメータ名 説明 estimator : estimator object チューニングを行うモデル param_grid : dict or list of dictionaries パラメタ候補値を「パラメタ名, 候補値リスト」の辞書で与える scoring : string, callable, list/tuple, dict or None, default: None 複数のメトリックを評価するには、文字例のリストか、の辞書で与える n_jobs : int or None, optional (default=None) 同時実行数(-1にするとコア数で同時実行) pre_dispatch …

グリッドサーチ(ハイパーパラメータ最適化)のまとめと例 Read More »

クラスター数の決め方の1つシルエット分析

シルエット分析(Silhouette analysis)とは シルエットは、クラスターの解釈と一貫性な評価の手法です。各クラスターにどれくらいうまくグループしているかを簡潔にグラフィカルに表現します。 シルエット分析は、クラスタリングの結果を評価する事ができます。 シルエットプロットは、1つのクラスター内の各点が隣接するクラスター内のどの点にどれくらい近いかを示すもので、クラスター数などのパラメーターを視覚的に評価する方法です。 この評価の範囲は[-1、1]です。 +1に近いシルエット係数は、標本が隣接するクラスターから遠く離れていることを示します。クラスタリングの分離性能が良いと判断できます。0の値は、隣接する2つのクラスター間の決定境界にあるか、またはそれに非常に近いことを示しており、分離性能が悪い事を示しています。マイナス値だとクラスター化されたサンプルは間違ったクラスターに所属している可能性があります。できる限り1に近い事が目標になります。 実験: 今回の分析は、クラスター数の決め方法を説明します。 シルエットプロットは、3,5,6のクラスター数が、平均シルエットスコア以下になります。シルエット分析は、2と4のクラスター数は高いシルエットスコアになっています。シルエットスコアを使う時に、注意しないといけない事として分離の具合を評価している指標のため、クラスター数が少ないときは高くスコアが出ます。そのため、シルエットプロットも確認し、各クラスターの厚さが似ている事とシルエットスコアの先端部分が超えている事を確認し、クラスター4とします。 Out: For n_clusters = 2 The average silhouette_score is : 0.7049787496083262 For n_clusters = 3 The average silhouette_score is : 0.5882004012129721 For n_clusters = 4 The average silhouette_score is : 0.6505186632729437 For n_clusters = 5 The average silhouette_score is : 0.56376469026194 For n_clusters = 6 …

クラスター数の決め方の1つシルエット分析 Read More »