順列特徴量の重要度を使用してモデル予測を解釈する
ML.NET の機械学習モデルの予測を評価する方法を、順列特徴量の重要度 (PFI) を使用して学びます。 PFI は、各特徴が予測に対して行う相対的な貢献度を示します。
機械学習モデルは、多くの場合、入力を受け取って出力を生成する不透明なボックスと考えられています。 出力に影響を与える特徴間の中間ステップまたは相互作用はほとんど理解されていません。 機械学習は、医療などの日常生活のより多くの側面に導入されるため、機械学習モデルが意思決定を行う理由を理解することが最も重要です。 たとえば、機械学習モデルによって診断が行われる場合、医療専門家には、その診断を行う要因を調べる方法が必要です。 適切な診断を提供することは、患者が迅速な回復を持っているかどうかに大きな違いを生み出す可能性があります。 したがって、モデルの説明容易性のレベルが高いほど、医療専門家はモデルによって行われた決定を受け入れるか拒否しなければならないという信頼度が高くなります。
さまざまな手法を使用してモデルを説明します。そのうちの 1 つは PFI です。 PFI は、Breiman のランダム フォレストの ペーパー に着想を得た分類モデルと回帰モデルを説明するために使用される手法です (セクション 10 を参照)。 大まかに言えば、データセット全体のデータを一度に 1 つの特徴をランダムにシャッフルし、対象のパフォーマンス メトリックがどれだけ減少するかを計算します。 変更が大きいほど、その機能が重要になります。
さらに、モデル ビルダーは、最も重要な特徴を強調表示することで、より意味のある特徴のサブセットの使用に集中できます。これにより、ノイズとトレーニング時間が短縮される可能性があります。
データを読み込む
このサンプルで使用されるデータセットの特徴は、列 1 から 12 にあります。 目標は、Price
を予測することです。
コラム | 特徴 | 説明 |
---|---|---|
1 | CrimeRate | 一人当たりの犯罪率 |
2 | ResidentialZones | 町の住宅地 |
3 | CommercialZones | 町の非居住区 |
4 | NearWater | 水の本体への近接性 |
5 | 有害廃棄物レベル | 毒性レベル (PPM) |
6 | 平均部屋数 | 家の中の部屋の平均数 |
7 | HomeAge | 住宅の年数 |
8 | ビジネスセンター距離 | 最寄りのビジネス地区までの距離 |
9 | HighwayAccess | 高速道路への近接性 |
10 | 税率 | 固定資産税率 |
11 | 教師生徒比 | 教師に対する学生の比率 |
12 | 貧困以下の人口割合 | 貧困以下に住む人口の割合 |
13 | 価格 | 家の価格 |
データセットのサンプルを次に示します。
1,24,13,1,0.59,3,96,11,23,608,14,13,32
4,80,18,1,0.37,5,14,7,4,346,19,13,41
2,98,16,1,0.25,10,5,1,8,689,13,36,12
このサンプルのデータは、HousingPriceData
などのクラスによってモデル化され、IDataView
に読み込まれます。
class HousingPriceData
{
[LoadColumn(0)]
public float CrimeRate { get; set; }
[LoadColumn(1)]
public float ResidentialZones { get; set; }
[LoadColumn(2)]
public float CommercialZones { get; set; }
[LoadColumn(3)]
public float NearWater { get; set; }
[LoadColumn(4)]
public float ToxicWasteLevels { get; set; }
[LoadColumn(5)]
public float AverageRoomNumber { get; set; }
[LoadColumn(6)]
public float HomeAge { get; set; }
[LoadColumn(7)]
public float BusinessCenterDistance { get; set; }
[LoadColumn(8)]
public float HighwayAccess { get; set; }
[LoadColumn(9)]
public float TaxRate { get; set; }
[LoadColumn(10)]
public float StudentTeacherRatio { get; set; }
[LoadColumn(11)]
public float PercentPopulationBelowPoverty { get; set; }
[LoadColumn(12)]
[ColumnName("Label")]
public float Price { get; set; }
}
モデルをトレーニングする
次のコード サンプルは、住宅価格を予測するために線形回帰モデルをトレーニングするプロセスを示しています。
// 1. Get the column name of input features.
string[] featureColumnNames =
data.Schema
.Select(column => column.Name)
.Where(columnName => columnName != "Label").ToArray();
// 2. Define training pipeline.
IEstimator<ITransformer> sdcaEstimator =
mlContext.Transforms.Concatenate("Features", featureColumnNames)
.Append(mlContext.Transforms.NormalizeMinMax("Features"))
.Append(mlContext.Regression.Trainers.Sdca());
// 3. Train machine learning model.
var sdcaModel = sdcaEstimator.Fit(data);
順列特徴量の重要度 (PFI) を使用してモデルを説明する
ML.NET で、それぞれのタスクに対して PermutationFeatureImportance
メソッドを使用します。
// Use the model to make predictions
var transformedData = sdcaModel.Transform(data);
// Calculate feature importance
ImmutableArray<RegressionMetricsStatistics> permutationFeatureImportance =
mlContext
.Regression
.PermutationFeatureImportance(sdcaModel, transformedData, permutationCount:3);
トレーニング データセットで PermutationFeatureImportance
を使用した結果、RegressionMetricsStatistics
オブジェクトの ImmutableArray
になります。 RegressionMetricsStatistics
では、permutationCount
パラメーターで指定された順列の数と等しい RegressionMetrics
の複数の観測値の平均や標準偏差などの概要統計情報が提供されます。
特徴の重要度を測定するために使用されるメトリックは、問題の解決に使用される機械学習タスクによって異なります。 たとえば、回帰タスクでは、R 2 乗などの一般的な評価メトリックを使用して重要度を測定できます。 モデル評価メトリックの詳細については、「メトリックを使用して ML.NET モデルを評価する」を参照してください。
重要度 (この場合は、PermutationFeatureImportance
で計算される R 2 乗メトリックの絶対平均減少) は、最も重要なものから最も重要なものまで順に並べ替えることができます。
// Order features by importance.
var featureImportanceMetrics =
permutationFeatureImportance
.Select((metric, index) => new { index, metric.RSquared })
.OrderByDescending(myFeatures => Math.Abs(myFeatures.RSquared.Mean));
Console.WriteLine("Feature\tPFI");
foreach (var feature in featureImportanceMetrics)
{
Console.WriteLine($"{featureColumnNames[feature.index],-20}|\t{feature.RSquared.Mean:F6}");
}
featureImportanceMetrics
の各機能の値を印刷すると、次のような出力が生成されます。 これらの値は、指定されたデータによって異なるため、異なる結果が表示されます。
特徴 | R-Squared に変更する |
---|---|
HighwayAccess | -0.042731 |
生徒と教師の比率 | -0.012730 |
ビジネスセンター距離 | -0.010491 |
税率 | -0.008545 |
平均部屋数 | -0.003949 |
CrimeRate | -0.003665 |
CommercialZones | 0.002749 |
HomeAge | -0.002426 |
ResidentialZones | -0.002319 |
NearWater | 0.000203 |
貧困線以下で生活する人口の割合 | 0.000031 |
有害廃棄物レベル | -0.000019 |
このデータセットの 5 つの最も重要な特徴を見ると、このモデルによって予測される家の価格は、高速道路への近接性、地域の学校の学生教師比率、主要な雇用センターへの近接性、固定資産税率、家庭内の平均部屋数の影響を受けます。
次の手順
- AutoML で PFI (Permutation Feature Importance) を使用する
- トレーニング済みのモデル を使用して予測を行う
- モデルを再トレーニングする
- ASP.NET Core Web API にモデルをデプロイする
.NET