函式名:SVM::crossvalidate()
適用版本:PHP >= 5.3.0, SVM extension >= 0.1.0
用法: SVM::crossvalidate ( array $problem , int $number_of_folds [, array $parameters ] ) : float
說明: SVM::crossvalidate()函式用於執行支援向量機(SVM)的交叉驗證。交叉驗證是一種透過將資料集分成多個子集進行訓練和測試的技術,用於評估和選擇模型的效能。該函式將問題(問題包含訓練資料和標籤)分成指定數量的摺疊,然後對每個摺疊進行訓練和測試,最後返回平均測試準確率。
引數:
- problem:一個包含訓練資料和標籤的陣列。訓練資料是一個二維陣列,每一行表示一個樣本,每一列表示一個特徵。標籤是一個一維陣列,表示每個樣本的類別。示例:$problem = [[$feature1, $feature2, ...], [$feature1, $feature2, ...], ...], $labels = [$label1, $label2, ...]
- number_of_folds:將問題分成的摺疊數量。通常使用10折交叉驗證,即將資料集分成10個子集。
- parameters(可選):一個包含SVM引數的陣列。可以使用SVM::getOptions()函式獲取所有可用引數及其預設值。示例:$parameters = ['svm_type' => SVM::C_SVC, 'kernel_type' => SVM::RBF, 'C' => 1.0, 'gamma' => 0.5]
返回值: 返回一個浮點數,表示交叉驗證的平均測試準確率。
示例: <?php $problem = [[1, 1], [2, 2], [3, 3], [4, 4], [5, 5]]; // 訓練資料 $labels = [-1, -1, 1, 1, 1]; // 標籤
$svm = new SVM(); $svm->train($problem, $labels);
$accuracy = $svm->crossvalidate($problem, 10); // 執行交叉驗證,將資料分成10個摺疊
echo "平均測試準確率:" . $accuracy; ?> 以上示例中,我們首先建立了一個SVM物件,並使用train()函式對訓練資料進行訓練。然後使用crossvalidate()函式執行交叉驗證,將資料分成10個摺疊,並返回平均測試準確率。最後將結果輸出到螢幕上。