pascalabcnet/InstallerSamples/MachineLearning/08_Datasets/TitanicRu/06_ModelComparison.pas
Mikhalkovich Stanislav 7eaddd9a54 ML - множество примеров
ML - устранение неточностей и багов
ML - оптимизация производительности DecisionTreeRegressor.Fit, RandomForestRegressor.Fit
ML - тесты
2026-05-07 22:53:13 +03:00

49 lines
1.9 KiB
ObjectPascal

uses MLABC;
begin
var ds := Datasets.TitanicRu;
var df := ds.Data.Drop(['Id', 'Имя']);
// Заполняем пропуски.
var ageImputer := new Imputer(['Возраст']);
df := ageImputer.FitTransform(df);
var portImputer := new Imputer('Саутгемптон', ['ПортПосадки']);
df := portImputer.FitTransform(df);
// Кодируем категориальные признаки числами.
var sexEncoder := new LabelEncoder('Пол');
df := sexEncoder.FitTransform(df);
var portEncoder := new LabelEncoder('ПортПосадки');
df := portEncoder.FitTransform(df);
var features := ['Класс', 'Пол', 'Возраст', 'БратьяИСупруги', 'РодителиИДети', 'ЦенаБилета', 'ПортПосадки'];
var X := df.ToMatrix(features);
var y := df.GetIntColumn('Выжил');
var (Xtrain, Xtest, ytrain, ytest) := Validation.TrainTestSplit(X, y, testRatio := 0.2, seed := 42);
var scaler := new StandardScaler;
scaler.Fit(Xtrain);
var XtrainScaled := scaler.Transform(Xtrain);
var XtestScaled := scaler.Transform(Xtest);
var lr := new LogisticRegression(learningRate := 0.01, epochs := 2000);
lr.Fit(XtrainScaled, ytrain);
var predLR := lr.Predict(XtestScaled);
var tree := new DecisionTreeClassifier(maxDepth := 5, minSamplesLeaf := 3, minSamplesSplit := 6);
tree.Fit(Xtrain, ytrain);
var predTree := tree.Predict(Xtest);
var forest := new RandomForestClassifier(nTrees := 100, maxDepth := 6, minSamplesLeaf := 3, minSamplesSplit := 6);
forest.Fit(Xtrain, ytrain);
var predForest := forest.Predict(Xtest);
Println('Сравнение моделей на TitanicRu');
Println($'LogisticRegression: Accuracy = {Metrics.Accuracy(ytest, predLR):F3}');
Println($'DecisionTreeClassifier: Accuracy = {Metrics.Accuracy(ytest, predTree):F3}');
Println($'RandomForestClassifier: Accuracy = {Metrics.Accuracy(ytest, predForest):F3}');
end.