pascalabcnet/InstallerSamples/MachineLearning/08_Datasets/TitanicRu/12_PrecisionRecallF1.pas

39 lines
1.5 KiB
ObjectPascal

uses MLABC;
begin
var ds := Datasets.TitanicRu;
var features := ['Класс', 'Пол', 'Возраст', 'БратьяИСупруги', 'РодителиИДети', 'ЦенаБилета', 'ПортПосадки'];
var df := ds.Data.Drop(['Id', 'Имя']);
var (trainDf, testDf) :=
df.StratifiedTrainTestSplit(ds.Target, testRatio := 0.2, seed := 42);
var pipe :=
DataPipeline.BuildClassification(
ds.Target,
features,
new Imputer(['Возраст']),
new Imputer('Саутгемптон', ['ПортПосадки']),
new OneHotEncoder('Пол'),
new OneHotEncoder('ПортПосадки'),
new StandardScaler,
new RandomForestClassifier(nTrees := 100, maxDepth := 6, minSamplesLeaf := 3, minSamplesSplit := 6)
);
pipe.Fit(trainDf);
var pred := pipe.Predict(testDf);
var y := pipe.GetEncodedLabels(testDf);
Println('TitanicRu: Precision, Recall и F1');
Println;
Println('Precision — какая доля пассажиров, предсказанных как "выжил", действительно выжила.');
Println('Recall — какую долю реально выживших пассажиров модель нашла.');
Println('F1 — общий баланс между Precision и Recall.');
Println;
Println($'Accuracy = {Metrics.Accuracy(y, pred):F3}');
Println($'Precision = {Metrics.Precision(y, pred):F3}');
Println($'Recall = {Metrics.Recall(y, pred):F3}');
Println($'F1 = {Metrics.F1(y, pred):F3}');
end.