如何通过 PHP 机器学习库准备从 php 到 运行 中的 sql 输出的数据

How to prepare data outputted from sql in php to run through the PHP machine learning Library

我正在使用 PHP ML 库中的 LeastSquares 回归算法。我可以成功 运行 使用给出的示例的代码,但是当我尝试 运行 来自我的数据库的数据时,我得到一个空白屏幕返回并且服务器上没有错误日志。

这是来自 ML 库的工作示例 php 文件:

$samples = [[50000, 2017], [40000, 2015], [75000, 2014], [30000, 2016]];   
$targets = [15000,13000,14500,14000];

regression = new LeastSquares();
$regression->train($samples, $targets);

echo $regression->predict([60000, 2015]);
// returns 4094.82

这是我的脚本

$sql = "SELECT price, mileage, year From table";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {

        // The output I am looking for is [[mileage, year],[mileage, year]..] & [price, price,..]

        $mileage = $row['mileage'];

        $year = $row['year'];
   
        $price = $row['price'];

    }
}


regression = new LeastSquares();
$regression->train($samples, $targets);

echo $regression->predict([60000, 2015]);

我正在尝试使用我的数据库 table 中的值重新创建 $samples 和 $targets 变量,但我没有准备 correctly.I 尝试 preg_replace 创建一个逗号分隔的字符串但这没有用,我怀疑这是因为它是一个字符串而不是整数值,但我不确定。我写了所示的示例,所以可能是语法错误,但我只是想找出正确的方法来准备数组值,就像 ML 库提供的那样。

当我做的时候

var_dump($samples);

var_dump($targets);

我明白了

array(4) { [0]=> array(2) { [0]=> int(50000) [1]=> int(2017) } [1]=> array(2) { [0]=> int(40000) [1]=> int(2015) } [2]=> array(2) { [0]=> int(75000) [1]=> int(2014) } [3]=> array(2) { [0]=> int(30000) [1]=> int(2016) } }


array(4) { [0]=> int(15000) [1]=> int(13000) [2]=> int(14500) [3]=> int(14000) }

这就是我试图通过我的 SQL 输出

实现的目标

您只需将从数据库中读取的值推送到循环中的 $samples$targets 数组中。可能还需要将它们转换为整数,我也包含了该代码。

$sql = "SELECT price, mileage, year From table";
$result = $conn->query($sql);
$samples = array();
$targets = array();
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $mileage = (int)$row['mileage'];
        $year = (int)$row['year'];
        $samples[] = array($mileage, $year);
        $price = (int)$row['price'];
        $targets[] = array($price);
    }
}

请注意,如果没有 else 子句,if ($result->num_rows > 0) { 子句在此代码中没有任何用处,因为如果 $result->num_rows == 0(即结果集中没有行)。