## 方差阈值 > `VarianceThreshold`是一种简单的特征选择基线方法。它会删除方差不符合某个阈值的所有要素。默认情况下,它会删除所有零方差要素,即在所有样本中具有相同值的要素。 ### 构造函数参数 `$threshold`(float) - 方差低于此阈值的要素将被删除(默认为0.0) ``` use Phpml\FeatureSelection\VarianceThreshold; $transformer = new VarianceThreshold(0.15); ``` ***** ### 使用示例 例如,假设我们有一个具有布尔特征的数据集,并且我们希望删除80%以上样本中的一个或零(打开或关闭)的所有特征。布尔特征是伯努利随机变量,这些变量的方差由下式给出 ``` Var\[X\] = p(1 - p) ``` 所以我们可以选择使用阈值.8 *(1 - .8): ``` use Phpml\FeatureSelection\VarianceThreshold; $samples = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]; $transformer = new VarianceThreshold(0.8 * (1 - 0.8)); $transformer->fit($samples); $transformer->transform($samples); /* $samples = [[0, 1], [1, 0], [0, 0], [1, 1], [1, 0], [1, 1]]; */ ``` ## Pipeline `VarianceThreshold`实现了`Transformer`接口,因此它可以用作`pipeline`的一部分: ``` use Phpml\FeatureSelection\VarianceThreshold; use Phpml\Classification\SVC; use Phpml\FeatureExtraction\TfIdfTransformer; use Phpml\Pipeline; $transformers = [ new TfIdfTransformer(), new VarianceThreshold(0.1) ]; $estimator = new SVC(); $pipeline = new Pipeline($transformers, $estimator); ```