Repository navigation
Expand file tree
/
Copy pathtrain.php
More file actions
83 lines (58 loc) · 2.23 KB
/
Copy pathtrain.php
File metadata and controls
83 lines (58 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
include __DIR__ . '/vendor/autoload.php';
use Rubix\ML\BayesianSearch;
use Rubix\ML\Loggers\Screen;
use Rubix\ML\Extractors\CSV;
use Rubix\ML\Extractors\ColumnPicker;
use Rubix\ML\Datasets\Labeled;
use Rubix\ML\Classifiers\LogitBoost;
use Rubix\ML\Regressors\RegressionTree;
use Rubix\ML\Transformers\FloatTypeConverter;
use Rubix\ML\PersistentModel;
use Rubix\ML\Persisters\Filesystem;
ini_set('memory_limit', '-1');
$logger = new Screen();
$extractor = new ColumnPicker(new CSV('dataset.csv', true), [
'Gender', 'SeniorCitizen', 'Partner', 'Dependents', 'MonthsInService', 'Phone',
'MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection',
'TechSupport', 'TV', 'Movies', 'Contract', 'PaperlessBilling', 'PaymentMethod',
'MonthlyCharges', 'TotalCharges', 'Region', 'Churn',
]);
$estimator = BayesianSearch::fromNamedParams(
class: LogitBoost::class,
params: [
'booster' => [
new RegressionTree(3, 1),
new RegressionTree(4, 1),
new RegressionTree(3, 5),
new RegressionTree(4, 5),
new RegressionTree(3, 10),
new RegressionTree(4, 10),
],
'rate' => [0.1, 0.3, 0.5],
'ratio' => [0.3, 0.5, 0.7],
],
initialTrials: 3,
maxTrials: 10
);
$estimator->setLogger($logger);
$logger->info('Loading data into memory');
$dataset = Labeled::fromIterator($extractor);
$logger->info('Preprocessing the dataset');
$dataset->apply(new FloatTypeConverter());
[$training, $testing] = $dataset->stratifiedSplit(0.9);
$estimator->setup(function (LogitBoost $estimator) use ($testing) {
$estimator->setValidationDataset($testing);
});
$logger->info('Exporting train/test split');
$training->exportTo(new CSV('training.csv'), overwrite: true);
$testing->exportTo(new CSV('testing.csv'), overwrite: true);
$logger->info('Training the model');
$estimator->train($training);
echo $estimator->results();
var_dump($estimator->base()->params());
$estimator->results()->toJSON()->saveTo(new Filesystem('results.json'));
$logger->info('Results saved to results.json');
$estimator = new PersistentModel($estimator->base(), new Filesystem('model.rbx'));
$estimator->save();
$logger->info('Model saved as model.rbx');