56 lines
1.5 KiB
ObjectPascal
56 lines
1.5 KiB
ObjectPascal
|
|
// В этом примере SelectKBest оставляет
|
|||
|
|
// только два самых полезных признака
|
|||
|
|
// и показывает, как это влияет на качество модели.
|
|||
|
|
|
|||
|
|
uses MLABC;
|
|||
|
|
|
|||
|
|
begin
|
|||
|
|
var (X, y) := Datasets.MakeClassification(
|
|||
|
|
n := 200,
|
|||
|
|
nFeatures := 6,
|
|||
|
|
nInformative := 2,
|
|||
|
|
nRedundant := 0,
|
|||
|
|
noise := 0.1,
|
|||
|
|
classSep := 1.2,
|
|||
|
|
seed := 42
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
var featureNames := ['f1', 'f2', 'f3', 'f4', 'f5', 'f6'];
|
|||
|
|
|
|||
|
|
Println('Размер до SelectKBest: ', X.RowCount, 'x', X.ColCount);
|
|||
|
|
|
|||
|
|
var skb := new SelectKBest(2, FeatureScore.Correlation);
|
|||
|
|
skb.Fit(X, y);
|
|||
|
|
var X2 := skb.Transform(X);
|
|||
|
|
|
|||
|
|
Println('Размер после SelectKBest: ', X2.RowCount, 'x', X2.ColCount);
|
|||
|
|
Println;
|
|||
|
|
Println('Отобранные признаки:');
|
|||
|
|
|
|||
|
|
var selected := skb.SelectedFeatures;
|
|||
|
|
for var i := 0 to selected.Length - 1 do
|
|||
|
|
Println(' ', featureNames[selected[i]]);
|
|||
|
|
|
|||
|
|
Println;
|
|||
|
|
|
|||
|
|
var fullScore := Validation.StratifiedCrossValidate(
|
|||
|
|
new LogisticRegression(learningRate := 0.05, epochs := 1000),
|
|||
|
|
X, y,
|
|||
|
|
5,
|
|||
|
|
ClassificationMetrics.Accuracy,
|
|||
|
|
seed := 42
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
var reducedScore := Validation.StratifiedCrossValidate(
|
|||
|
|
new LogisticRegression(learningRate := 0.05, epochs := 1000),
|
|||
|
|
X2, y,
|
|||
|
|
5,
|
|||
|
|
ClassificationMetrics.Accuracy,
|
|||
|
|
seed := 42
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
Println('Сравнение качества LogisticRegression:');
|
|||
|
|
Println($' Все признаки: Accuracy = {fullScore:F3}');
|
|||
|
|
Println($' После SelectKBest: Accuracy = {reducedScore:F3}');
|
|||
|
|
end.
|