Как справиться с отрицательным значением предсказания в реализации линейной регрессии в переполнении стека

Я реализовал код в PHP для линейной регрессии, идея состояла в том, чтобы взять дату доставки для каждого клиента (сколько бы дат доставки не было в БД), а затем использовать эти даты доставки (преобразованные в дни) в качестве уравнения линейной регрессии как параметр y, чтобы в конечном итоге предсказать будущую дату доставки / дату заказа, и на основе этого прогноза и сравнения с текущей датой система предпримет некоторые действия, такие как отправка push-уведомлений. Мой код для реализации выглядит следующим образом:

$conn = mysql_connect($dbhost,$dbuser,$dbpass) or die (mysql_error());
mysql_select_db($db, $conn) or die(mysql_error());//Outer Loop to save all eligable customer ID's

$idarray=array();

$firstloop=mysql_query("Select id FROM ordering GROUP BY id",$conn);
$number_of_rows_initial=mysql_num_rows($firstloop);
while (($row = mysql_fetch_array($firstloop, MYSQL_ASSOC)) !== false){
$idarray[] = $row; // add the row in to the results (data) array
// print_r($idarray);
}for($counter=0; $counter<$number_of_rows_initial; $counter++)
{
$id=$idarray[$counter]['id'];//First confirm if user is already registered via website

$result = mysql_query("SELECT TO_DAYS(date) FROM ordering WHERE id=$id",$conn);
$num_rows = mysql_num_rows($result);
// mysql_query($result,$conn) or die(mysql_error();

//echo $num_rows;$data = array();
$days=array();
$xAxis=array();

$ldate=array();

while (($row = mysql_fetch_array($result, MYSQL_ASSOC)) !== false){
$data[] = $row; // add the row in to the results (data) array
}

// print_r($data); // print result//This part is working now!!!!

for ($x = $num_rows-1 ; $x > 0; $x--) {
$days[$x] = $data[$x]['TO_DAYS(date)'] -$data[$x-1]['TO_DAYS(date)'];

$xAxis[$x]=$x;
}

$days[0]=30;
print_r("<br />",$days);
//print_r($xAxis);//my implementation of regression calculation

// calculate sums
$x_sum = (array_sum($xAxis));
$y_sum = array_sum($days);
echo "<br />","Customer ID is: ",$id,"<br />";
echo "Sum of X Axis: ",$x_sum, "<br />";
echo "Sum of Y Axis: ",$y_sum,"<br />" ;

$xx_sum = 0;
$xy_sum = 0;

for($i = 0; $i < $num_rows; $i++) {

$xy_sum+=($xAxis[$i]*$days[$i]);
$xx_sum+=($xAxis[$i]*$xAxis[$i]);

}

// calculate slope
$m = (($num_rows * $xy_sum) - ($x_sum * $y_sum)) / (($num_rows * $xx_sum) - ($x_sum * $x_sum));

// calculate intercept
$b = ($y_sum - ($m * $x_sum)) / $num_rows;

$predict=($m*($num_rows+1))+$b;

echo "The Slope of the Representative line is: ",$m,"<br />";
echo "The Y intercept is ",$b,"<br />";
echo "Predicted next date of delivery in days (from last delivery date) is: ", $predict,"<br />";//Final Date Calculation

$lastdate=mysql_query("SELECT TO_DAYS(date) FROM ordering WHERE id=$id",$conn);
$num_rows_date = mysql_num_rows($lastdate);
while (($row_date = mysql_fetch_array($lastdate, MYSQL_ASSOC)) !== false){
$ldate[] = $row_date; // add the row in to the results (data) array
}
echo "Total number of records for the given id are: ",$num_rows_date, "<br />";
$ldatefinal=$ldate[$num_rows_date-1]['TO_DAYS(date)'];

echo "Last date in the records for the given ID is ",$ldatefinal,"<br />";
echo "Last date + Prediction days = ",$ldatefinal+$predict,"<br />";$currentdate=mysql_query("SELECT TO_DAYS(CURDATE())",$conn);

$dcrow = mysql_fetch_assoc($currentdate);

//$dhold=$dcrow['TO_DAYS(CURDATE())'];
//echo "Current Date is: ",$dcrow['TO_DAYS(CURDATE())'],"<br /" ;

//UPON EXECUTION NOTHING BELOW GETS ExEcuted ??

//echo "Last date + Predicted days = ";if (( (($ldatefinal+$predict) - $dcrow['TO_DAYS(CURDATE())']) <3 )&& $predict>0){

echo "Time to Order<br />","</br />";
}else if((( (($ldatefinal+$predict) - $dcrow['TO_DAYS(CURDATE())']) >3 && $predict>0) )){
echo "You Got Gas!!<br />","</br />";
}else{
echo "Linear Regression not Suitable for this Record ID","<br />";
}

}
mysql_close($conn);

Кажется, что все работает идеально, за исключением случаев, когда предсказание приходит с отрицательными числами, на данный момент я решил игнорировать их, используя линейную регрессию «echo», не подходящую для этого идентификатора записи «,»
«;» но я уверен, что должен быть лучший способ приспособиться к этому типу сценариев, я просто не уверен, как в моем случае, особенно с использованием формата даты. Любая помощь будет принята с благодарностью. Я должен сказать, что этот форум и, конечно, его пользователи были чрезвычайно добры и щедры со своим прошлым временем и знаниями для меня, и надеюсь, что вы, ребята, сможете указать мне правильное направление и в этот раз. Hamood

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]