Я разработал модель, обучив данные с помощью LR. Затем я использую эту модель для прогнозирования с новыми данными. Я скачал обученную модель в локальный файл. Сценарий, который я использовал для прогноза, выглядит следующим образом prediction.php
<?php
$area_type=0 ;$location = 0;$size= 0; $total_sqft=0;$bath=1;$balcony=1;
$area_type = $_POST['area_type'];
$location = $_POST['location'];
$size= $_POST['size'];
$total_sqft=$_POST['total_sqft'];
$bath=$_POST['bath'];
$balcony=$_POST['balcony'];
$jsonf = "'{\"data\":[$area_type,$location,$size,$total_sqft,$bath,$balcony]}'";
$shells = "/usr/bin/python3 -W ignore /predict.py $jsonf";
$result = exec($shells);
echo $result;
?>
predict.py
import sys, json
import numpy as np
from sklearn.externals import joblib
print(sys.argv)
data = json.loads(sys.argv[1])
print(data)
data = np.array(data['data'])
print(data)
sav = joblib.load('/LR_model.ml')
pred = sav.predict(data.reshape(1,-1))
print(pred)
result = int(round(pred[0],0))
result_a = format(abs[result],',')
print(result_a)
когда я пытаюсь запустить сценарий предиката pypy3 в качестве предиката
{'data': [1, 1180, 2, 5000, 1, 1]}
Я получаю сообщение об ошибке
поднять JSONDecodeError («Ожидаемое значение», s, err.value) из None
json.decoder.JSONDecodeError: Ожидаемое значение: строка 1, столбец 1 (символ 0)
Так как я могу предсказать цену для новых данных. Любое предложение по исправлению этой ошибки будет очень полезно. LR_model.ml — моя модель, различные переменные:
area_type; расположение, размер; total_sqft; ванна; балкон;
Я предлагаю вам использовать объект, а затем кодировать с json_encode()
$object = new stdClass();
$object->data = [$area_type, $location, $size, $total_sqft, $bath, $balcony];
$jsonf = json_encode($object));
Это намного проще для понимания вывода JSON таким образом
Как вы пишете в своем вопросе
{‘данные’: [1, 1180, 2, 5000, 1, 1]}
неправильно JSON из-за одинарных кавычек.
$ jsonf = «‘{\» data \ «: [$ area_type, $ location, $ size, $ total_sqft, $ bath, $ Балкон]}'»;
Но вы пишете двойные кавычки в php-коде, это немного сбивает с толку.
Других решений пока нет …