## 特征选择 > `SelectKBest` - 根据k最高分选择功能。 ### 构造函数参数 `$k`(int) - 要选择的顶级特征数,休息将被删除(默认值:10) `$scoringFunction`(ScoringFunction) - 获取样本和目标并返回带分数的数组的函数(默认值:ANOVAFValue) ``` use Phpml\FeatureSelection\SelectKBest; $transformer = new SelectKBest(2); ``` ***** ## 使用示例 作为示例,我们可以在Iris数据集上执行特征选择,以仅检索两个最佳特征,如下所示: ``` use Phpml\FeatureSelection\SelectKBest; use Phpml\Dataset\Demo\IrisDataset; $dataset = new IrisDataset(); $selector = new SelectKBest(2); $selector->fit($samples = $dataset->getSamples(), $dataset->getTargets()); $selector->transform($samples); /* $samples[0] = [1.4, 0.2]; */ ``` ## 评分 您可以获得包含每个要素的计算得分的数组。值越高意味着给定的特征更适合学习。当然,评级取决于所使用的评分函数。 ``` use Phpml\FeatureSelection\SelectKBest; use Phpml\Dataset\Demo\IrisDataset; $dataset = new IrisDataset(); $selector = new SelectKBest(2); $selector->fit($samples = $dataset->getSamples(), $dataset->getTargets()); $selector->scores(); /* ..array(4) { [0]=> float(119.26450218451) [1]=> float(47.364461402997) [2]=> float(1179.0343277002) [3]=> float(959.32440572573) } */ ``` ***** ### 评分功能 可用的评分功能: 对于分类: - `ANOVAFValue`单因素方差分析检验2个或更多组具有相同总体平均值的原假设。该测试适用于来自两个或更多组的样品,可能具有不同的尺寸。 对于回归: - `UnivariateLinearRegression`用于测试单个回归量的效果的快速线性模型,顺序地用于许多回归量。这分两步完成: - 1.计算每个回归量与目标之间的互相关,即`((X[:,i] - mean(X [:,i]))*(y - mean_y))/(std(X [:,i])* std(y))`。- 2.它被转换为F分数 ## Pipeline `SelectKBest`实现了`Transformer`接口,因此它可以用作`Pipeline`的一部分: ``` use Phpml\FeatureSelection\SelectKBest; use Phpml\Classification\SVC; use Phpml\FeatureExtraction\TfIdfTransformer; use Phpml\Pipeline; $transformers = [ new TfIdfTransformer(), new SelectKBest(3) ]; $estimator = new SVC(); $pipeline = new Pipeline($transformers, $estimator); ```