今天來試著利用線性資料預測,大家都知道直線的方程式可以這樣寫:
y = ax + b
那我們就設定a=1 b=1 的一條方程式,然後加入一點噪訊,來讓我們預測一下成果。
這次資料我們自己準備好帶有噪訊的資料,可直接複製貼上
Sample | target |
---|---|
0 | 0.524660291 |
0.1 | 0.338351161 |
0.2 | 0.361812209 |
0.3 | 1.259080857 |
0.4 | 0.599914314 |
0.5 | 0.778193265 |
0.6 | 1.009499674 |
0.7 | 0.957383887 |
0.8 | 0.891163502 |
0.9 | 1.005881627 |
1 | 1.730884261 |
$samples = [[60], [61], [62], [63], [65]];
$targets = [3.1, 3.6, 3.8, 4, 4.1];
$regression = new LeastSquares();
$regression->train($samples, $targets);
只要把資料改為我們的資料就可以作訓練了
$regression->predict([64]);
$regression->getIntercept();
$regression->getCoefficients();
兩個函數可以印出y = ax + b 的 a、b
最小二乘法預測線性非常好用,如果遇到非線性函數也是非常的好用的,但是複雜程度會直線上升,因此我們會請出前幾天學過的MLP來幫忙了。
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Phpml\Regression\LeastSquares;
$samples = [[60], [61], [62], [63], [65]];
$targets = [3.1, 3.6, 3.8, 4, 4.1];
$regression = new LeastSquares();
$regression->train($samples, $targets);
//Predict
echo $regression->predict([64]).”<br>";
// 斜率與截距
echo $regression->getIntercept().”<br>";
print_r($regression->getCoefficients());
?>