php-ml/tests/Classification/Ensemble/RandomForestTest.php

71 lines
2.2 KiB
PHP
Raw Normal View History

2017-02-07 11:37:56 +00:00
<?php
declare(strict_types=1);
namespace Phpml\Tests\Classification\Ensemble;
2017-02-07 11:37:56 +00:00
2018-10-28 06:44:52 +00:00
use Phpml\Classification\Classifier;
2017-02-07 11:37:56 +00:00
use Phpml\Classification\DecisionTree;
use Phpml\Classification\Ensemble\RandomForest;
2017-02-07 11:37:56 +00:00
use Phpml\Classification\NaiveBayes;
use Phpml\Exception\InvalidArgumentException;
2017-02-07 11:37:56 +00:00
class RandomForestTest extends BaggingTest
{
public function testThrowExceptionWithInvalidClassifier(): void
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('RandomForest can only use DecisionTree as base classifier');
$classifier = new RandomForest();
$classifier->setClassifer(NaiveBayes::class);
}
public function testThrowExceptionWithInvalidFeatureSubsetRatioType(): void
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Feature subset ratio must be a string or a float');
$classifier = new RandomForest();
$classifier->setFeatureSubsetRatio(1);
}
public function testThrowExceptionWithInvalidFeatureSubsetRatioFloat(): void
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('When a float is given, feature subset ratio should be between 0.1 and 1.0');
$classifier = new RandomForest();
$classifier->setFeatureSubsetRatio(1.1);
}
public function testThrowExceptionWithInvalidFeatureSubsetRatioString(): void
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage("When a string is given, feature subset ratio can only be 'sqrt' or 'log'");
$classifier = new RandomForest();
$classifier->setFeatureSubsetRatio('pow');
}
2018-10-28 06:44:52 +00:00
/**
* @return RandomForest
*/
protected function getClassifier(int $numBaseClassifiers = 50): Classifier
2017-02-07 11:37:56 +00:00
{
$classifier = new RandomForest($numBaseClassifiers);
$classifier->setFeatureSubsetRatio('log');
2017-02-07 11:37:56 +00:00
return $classifier;
}
2018-10-28 06:44:52 +00:00
protected function getAvailableBaseClassifiers(): array
2017-02-07 11:37:56 +00:00
{
return [
DecisionTree::class => [
'depth' => 5,
],
];
2017-02-07 11:37:56 +00:00
}
}