pascalabcnet/InstallerSamples/MachineLearning/08_Datasets/TitanicRu/06_ModelComparison.pas
Mikhalkovich Stanislav 3938120846 ML тесты поправлены
Небольшие правки ML-модулей
2026-05-28 23:56:46 +03:00

42 lines
1.6 KiB
ObjectPascal

uses MLABC;
begin
var ds := Datasets.TitanicRu;
var df := ds.Data.Drop(['Id', 'Имя']);
var features := ['Класс', 'Пол', 'Возраст', 'БратьяИСупруги', 'РодителиИДети', 'ЦенаБилета', 'ПортПосадки'];
var target := 'Выжил';
var (trainDf, testDf) :=
df.StratifiedTrainTestSplit(ds.Target, testRatio := 0.2, seed := 42);
var prep :=
DataPipeline.BuildClassificationPreprocessing(
target,
features,
new Imputer(['Возраст']),
new Imputer('Саутгемптон', ['ПортПосадки']),
new OneHotEncoder('Пол'),
new OneHotEncoder('ПортПосадки'),
new StandardScaler
);
var pipeLR := prep.WithModel(new LogisticRegression(learningRate := 0.01, epochs := 2000));
pipeLR.Fit(trainDf);
var predLR := pipeLR.Predict(testDf);
var y := pipeLR.GetEncodedLabels(testDf);
var pipeTree := prep.WithModel(new DecisionTreeClassifier(maxDepth := 5, minSamplesLeaf := 3, minSamplesSplit := 6));
pipeTree.Fit(trainDf);
var predTree := pipeTree.Predict(testDf);
var pipeForest := prep.WithModel(new RandomForestClassifier(nTrees := 100, maxDepth := 6, minSamplesLeaf := 3, minSamplesSplit := 6));
pipeForest.Fit(trainDf);
var predForest := pipeForest.Predict(testDf);
Println('Сравнение моделей на TitanicRu');
Println($'LogisticRegression: Accuracy = {Metrics.Accuracy(y, predLR):F3}');
Println($'DecisionTreeClassifier: Accuracy = {Metrics.Accuracy(y, predTree):F3}');
Println($'RandomForestClassifier: Accuracy = {Metrics.Accuracy(y, predForest):F3}');
end.