42 lines
1.6 KiB
ObjectPascal
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.
|