迴歸

在使用 PHP-ML 進行分類時,我們為新觀察指定了標籤。迴歸幾乎相同,不同之處在於輸出值不是類標籤而是連續值。它廣泛用於預測和預測。PHP-ML 支援以下回歸演算法

  • 支援向量迴歸
  • LeastSquares 線性迴歸

迴歸與分類中使用的 trainpredict 方法相同。

支援向量迴歸

這是 SVM(支援向量機)的迴歸版本。分類的第一步是訓練我們的模型。

// Import library
use Phpml\Regression\SVR;
use Phpml\SupportVectorMachine\Kernel;

// Training data
$samples = [[60], [61], [62], [63], [65]];
$targets = [3.1, 3.6, 3.8, 4, 4.1];

// Initialize regression engine
$regression = new SVR(Kernel::LINEAR);
// Train regression engine
$regression->train($samples, $targets);

在迴歸中,$targets 不是類別標籤而是分類。這是兩者的差異化因素之一。在使用資料訓練我們的模型後,我們可以從實際預測開始

$regression->predict([64])  // return 4.03

請注意,預測會返回目標之外的值。

LeastSquares 線性迴歸

該演算法使用 least squares method 來近似解。以下演示了一個簡單的訓練和預測程式碼

// Training data
$samples = [[60], [61], [62], [63], [65]];
$targets = [3.1, 3.6, 3.8, 4, 4.1];

// Initialize regression engine
$regression = new LeastSquares();
// Train engine
$regression->train($samples, $targets);
// Predict using trained engine
$regression->predict([64]); // return 4.06

PHP-ML 還提供了 Multiple Linear Regression 的選項。其示例程式碼如下

$samples = [[73676, 1996], [77006, 1998], [10565, 2000], [146088, 1995], [15000, 2001], [65940, 2000], [9300, 2000], [93739, 1996], [153260, 1994], [17764, 2002], [57000, 1998], [15000, 2000]];
$targets = [2000, 2750, 15500, 960, 4400, 8800, 7100, 2550, 1025, 5900, 4600, 4400];

$regression = new LeastSquares();
$regression->train($samples, $targets);
$regression->predict([60000, 1996]) // return 4094.82

當多種因素或性狀確定結果時,Multiple Linear Regression 特別有用。

實際案例

現在讓我們在現實生活場景中應用迴歸。

假設你執行一個非常受歡迎的網站,但流量不斷變化。你需要一種能夠預測在任何給定時刻部署所需伺服器數量的解決方案。讓我們假設你的託管服務提供商為你提供 api 來生成伺服器,每個伺服器需要 15 分鐘才能啟動。根據先前的流量資料和迴歸資料,你可以預測在任何時間點都會遇到應用程式的流量。使用該知識,你可以在激增前 15 分鐘啟動伺服器,從而防止你的應用程式離線。