39 lines
1.5 KiB
ObjectPascal
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.
|