Hi Makers,
Apa kabar ? Semoga sehat-sehat dan tetap semangat ya.
Saat membuat model kita perlu memahami seberapa besar kontribusi feature yang ada pada model terhadap hasil prediksi, untuk menjelaskan hal ini ML.NET memiliki fitur model explanability API.
Jadi API ini akan menjelaskan kontribusi masing-masing feature untuk setiap baris data yang kita uji. Untuk menggunakannya rekan-rekan hanya perlu menambahkan baris ini saat menulis kode untuk training pipeline:
//add feature contribution calc
var trainedModel = trainingPipeline.Fit(trainingDataView);
var fccModel = trainedModel.Append(mlContext.Transforms
.CalculateFeatureContribution(trainedModel.LastTransformer)
.Fit(trainingPipeline.Fit(trainingDataView).Transform(trainingDataView)));
Kemudian pada class prediksi rekan-rekan tambahkan property:
public class ModelOutputWithContribution : ModelOutput
{
public float[] FeatureContributions { get; set; }
public List<FeatureContribution> GetFeatureContributions(DataViewSchema dataview)
{
//base.PrintToConsole();
VBuffer<ReadOnlyMemory<char>> slots = default;
dataview.GetColumnOrNull("Features").Value.GetSlotNames(ref slots);
var featureNames = slots.DenseValues().ToArray();
List<FeatureContribution> featureList = new List<FeatureContribution>();
for (int i = 0; i < featureNames.Count(); i++)
{
string featureName = featureNames[i].ToString();
featureList.Add(new FeatureContribution(featureName, FeatureContributions[i]));
}
return featureList;
}
}
Pada property “FeatureContributions” akan disimpan nilai kontribusi dari masing-masing feature saat kita melakukan evaluasi / inference pada model. Lalu kita bisa visualisasikan dengan chart untuk memudahkan kita dalam menganalisa.
Source codenya dapat teman-teman pelajari dari link ini. Jangan lupa target aplikasi harus di ubah ke x64, saat ini belum support arsitektur cpu lain.
Semoga manfaat, teruslah berkarya.
Salam Makers ;D