## 支持向量分类 > 基于`libsvm`实现支持向量机的分类器。 ### 构造函数参数 `$kernel(int)` - 算法中使用的内核类型(默认内核:: RBF) `$cost(float)` - C-SVC的参数C(默认值为1.0) `$degree(int)` - `Kernel :: POLYNOMIAL`函数的度数(默认为3) `$gamma(float)` - 'Kernel :: RBF',`Kernel :: POLYNOMIAL'和'Kernel :: SIGMOID`的内核系数。如果gamma为`null`,则将使用1 / features。 `$coef0(float)` - 内核函数中的独立项。它仅在`Kernel :: POLYNOMIAL'和'Kernel :: SIGMOID`中有效(默认为0.0) `$ tolerance(float)` - 终止标准的容差(默认值为0.001) `$cacheSize(int)` - 以MB为单位的缓存内存大小(默认为100) `$shrinking(bool)` - 是否使用收缩启发式(默认为true) `$probabilityEstimates(bool)` - 是否启用概率估计(默认为false) ``` $classifier = new SVC(Kernel::LINEAR, $cost = 1000); $classifier = new SVC(Kernel::RBF, $cost = 1000, $degree = 3, $gamma = 6); ``` ***** ## 训练 训练分类器只需提供训练样本(`$samples`)和标签(`$labels`)。例: ```php use Phpml\Classification\SVC; use Phpml\SupportVectorMachine\Kernel; $samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]]; $labels = ['a', 'a', 'a', 'b', 'b', 'b']; $classifier = new SVC(Kernel::LINEAR, $cost = 1000); $classifier->train($samples, $labels); ``` 您可以使用多个数据集训练分类器,预测将基于所有训练数据。 ***** ## 预测 预测样本标签使用`predict`方法。您可以提供一个样本或样本数组: ``` $classifier->predict([3, 2]); // return 'b' $classifier->predict([[3, 2], [1, 5]]); // return ['b', 'a'] ``` ***** ## 概率估计 要预测概率,必须构建一个`$probabilityEstimates`设置为true的分类器。例: ``` use Phpml\Classification\SVC; use Phpml\SupportVectorMachine\Kernel; $samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]]; $labels = ['a', 'a', 'a', 'b', 'b', 'b']; $classifier = new SVC( Kernel::LINEAR, // $kernel 1.0, // $cost 3, // $degree null, // $gamma 0.0, // $coef0 0.001, // $tolerance 100, // $cacheSize true, // $shrinking true // $probabilityEstimates, set to true ); $classifier->train($samples, $labels); ``` 然后使用`predictProbability`方法代替`predict`: ``` $classifier->predictProbability([3, 2]); // return ['a' => 0.349833, 'b' => 0.650167] $classifier->predictProbability([[3, 2], [1, 5]]); // return [ // ['a' => 0.349833, 'b' => 0.650167], // ['a' => 0.922664, 'b' => 0.0773364], // ] ```