pascalabcnet/InstallerSamples/MachineLearning/06_Pipelines/07_MatrixPipeline_KNN_WithScaling.pas

48 lines
1.5 KiB
ObjectPascal
Raw Permalink Normal View History

// В этом примере сравнивается KNNClassifier
// без масштабирования и с MatrixPipeline.
//
// Важно: в pipeline шаг StandardScaler выполняется автоматически.
// То есть MatrixPipeline здесь эквивалентен цепочке:
// StandardScaler -> KNNClassifier.
uses MLABC;
begin
var (X, y) := Datasets.MakeClassification(
n := 400,
nFeatures := 4,
nInformative := 2,
nRedundant := 0,
noise := 0.15,
classSep := 1.0,
seed := 42
);
for var i := 0 to X.RowCount - 1 do
begin
X[i, 2] := X[i, 2] * 100;
X[i, 3] := X[i, 3] * 1000;
end;
var (XTrain, XTest, yTrain, yTest) := Validation.TrainTestSplit(X, y, 0.25, seed := 42);
var knn := new KNNClassifier(5);
knn.Fit(XTrain, yTrain);
var acc1 := ClassificationMetrics.Accuracy(yTest, knn.Predict(XTest));
// Здесь масштабирование выполняется внутри pipeline автоматически.
var pipe :=
MatrixPipeline.BuildClassification(
new StandardScaler,
new KNNClassifier(5)
);
pipe.Fit(XTrain, yTrain);
var acc2 := ClassificationMetrics.Accuracy(yTest, pipe.Predict(XTest));
Println('KNNClassifier без масштабирования и с масштабированием');
Println;
Println($'Без масштабирования : Accuracy = {acc1:F3}');
Println($'С MatrixPipeline и масштабированием: Accuracy = {acc2:F3}');
end.