PHP code example of rubix / churn

1. Go to this page and download the library: Download rubix/churn library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

rubix / churn example snippets


use Rubix\ML\Extractors\CSV;
use Rubix\ML\Extractors\ColumnPicker;

$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',
]);

use Rubix\ML\Datasets\Labeled;

$dataset = Labeled::fromIterator($extractor);

use Rubix\ML\Transformers\FloatTypeConverter;

$dataset->apply(new FloatTypeConverter());

[$training, $testing] = $dataset->stratifiedSplit(0.9);

use Rubix\ML\Extractors\CSV;

$training->exportTo(new CSV('training.csv'), overwrite: true);
$testing->exportTo(new CSV('testing.csv'), overwrite: true);

use Rubix\ML\BayesianSearch;
use Rubix\ML\Classifiers\LogitBoost;
use Rubix\ML\Regressors\RegressionTree;

$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
);

use Rubix\ML\Loggers\Screen;

$logger = new Screen();

$estimator->setLogger($logger);

$estimator->setup(function (LogitBoost $estimator) use ($testing) {
    $estimator->setValidationDataset($testing);
});

$estimator->train($training);

var_dump($estimator->base()->params());

echo $estimator->results();

use Rubix\ML\Persisters\Filesystem;

$estimator->results()->toJSON()->saveTo(new Filesystem('results.json'));

use Rubix\ML\PersistentModel;
use Rubix\ML\Persisters\Filesystem;

$estimator = new PersistentModel($estimator->base(), new Filesystem('model.rbx'));

$estimator->save();

use Rubix\ML\Extractors\CSV;
use Rubix\ML\Datasets\Labeled;

$extractor = new CSV('testing.csv');

$dataset = Labeled::fromIterator($extractor);

use Rubix\ML\PersistentModel;
use Rubix\ML\Persisters\Filesystem;

$estimator = PersistentModel::load(new Filesystem('model.rbx'));

use Rubix\ML\Transformers\FloatTypeConverter;

$dataset->apply(new FloatTypeConverter());

$predictions = $estimator->predict($dataset);

use Rubix\ML\CrossValidation\Reports\AggregateReport;
use Rubix\ML\CrossValidation\Reports\ConfusionMatrix;
use Rubix\ML\CrossValidation\Reports\MulticlassBreakdown;

$reportGenerator = new AggregateReport([
    new MulticlassBreakdown(),
    new ConfusionMatrix(),
]);

$report = $reportGenerator->generate($predictions, $dataset->labels());

echo $report;

use Rubix\ML\Persisters\Filesystem;

$report->toJSON()->saveTo(new Filesystem('report.json'));

use Rubix\ML\Extractors\SQLTable;
use PDO;

$connection = new PDO('sqlite:database.sqlite');

$extractor = new SQLTable($connection, 'customers');

$extractor = new LimitIterator($extractor->getIterator(), 0, 100);

$extractor = new ColumnPicker($extractor, [
    'Id', 'Gender', 'SeniorCitizen', 'Partner', 'Dependents', 'MonthsInService', 'Phone',
    'MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection',
    'TechSupport', 'TV', 'Movies', 'Contract', 'PaperlessBilling', 'PaymentMethod',
    'MonthlyCharges', 'TotalCharges', 'Region',
]);

$dataset = Unlabeled::fromIterator($extractor);

$ids = $dataset->feature(0);

$dataset->dropFeature(0);

use Rubix\ML\PersistentModel;
use Rubix\ML\Persisters\Filesystem;

$estimator = PersistentModel::load(new Filesystem('model.rbx'));

use Rubix\ML\Transformers\FloatTypeConverter;

$dataset->apply(new FloatTypeConverter());

$predictions = $estimator->predict($dataset);

$statement = $connection->prepare("UPDATE customers SET churn=? WHERE id=?");

foreach ($predictions as $i => $prediction) {
    $statement->execute([$prediction, $ids[$i]]);
}
sh
array(8) {
  ["booster"]=>
  object(Rubix\ML\Regressors\RegressionTree)#
  ["rate"]=>
  float(0.3)
  ["ratio"]=>
  float(0.7)
  ["epochs"]=>
  int(1000)
  ["min change"]=>
  float(1.0E-5)
  ["eval interval"]=>
  int(3)
  ["window"]=>
  int(5)
  ["metric"]=>
  NULL
}