簡體   English   中英

如何准備從 php 中的 sql 輸出的數據以運行 PHP 機器學習庫

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

我正在使用 PHP ML 庫中的最小二乘回歸算法。 我可以使用給出的示例成功運行代碼,但是當我嘗試從我的數據庫運行數據時,我得到一個空白屏幕,並且服務器上沒有錯誤日志。

這是來自 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]);

我正在嘗試使用我的數據庫表中的值重新創建 $samples 和 $targets 變量,但我沒有正確准備它。我嘗試 preg_replace 創建一個逗號分隔的字符串但沒有奏效,我懷疑這是因為它是一個字符串而不是 integer值,但我不完全確定。 我編寫了顯示的示例,因此可能是語法錯誤,但我只是想找出像 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 output 實現的目標

您只需要將從數據庫中讀取的值推送到循環中的$samples$targets arrays 中。 可能還需要將它們轉換為整數,我也包含了該代碼。

$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 (即沒有行), while循環將不會做任何事情在結果集中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM