Как десериализовать модель R в SQL Server для прогнозирования? - PullRequest
0 голосов
/ 11 октября 2018

Я создал модель в R, опубликовал ее в таблице SQL Server и проверил модель, вызвав ее в SQL Server.Тем не менее, я терплю неудачу в попытке использовать модель для прогнозирования новых данных.Вот мой сценарий:

DROP PROCEDURE IF EXISTS predict_risk_new_data;
GO

CREATE OR ALTER PROCEDURE predict_risk_new_data (@q nvarchar(max))

AS
BEGIN

    DECLARE @model varchar(30) = 'risk_rxLogit'
    DECLARE @rx_model varbinary(max) = (SELECT model FROM rx_models WHERE model_name = @model);

    EXEC sp_execute_external_script
    @language = N'R'
    ,@script = N'
        require("RevoScaleR");
        input_data = InputDataSet;  
        model <- unserialize(rx_model);
        prediction <- rxPredict(model, input_data, writeModelVars = TRUE);  
        OutputDataSet <- cbind(predictions[1], predictions[2]);'
    ,@input_data_1 = @q
    ,@parallel = 1
    ,@params = N'@rx_model varbinary(max), @r_rowsPerRead int'
    ,@input_data_1_name = N'InputDataSet'
    ,@rx_model = @rx_model
    ,@r_rowsPerRead = 100

    WITH result sets (("Risk_Pred" float, "ZIP" int));

END
GO;

/*

    EXEC predict_risk 'SELECT TOP 100 [ZIP], [Week], [Age], [Risk] FROM dbo.Risk'

*/

Вот вывод ошибки:

Сообщение 39004, уровень 16, состояние 20, строка 223 Ошибка сценария 'R' во время выполнения сценария sp_execute_external_script'с HRESULT 0x80004004.Сообщение 39019, уровень 16, состояние 2, строка 223 Произошла внешняя ошибка сценария: Ошибка в unserialize (rx_model): ошибка чтения Вызовы: source -> withVisible -> eval -> eval -> unserialize

Ошибка выполнения,Проверьте вывод для получения дополнительной информации.Ошибка в eval (expr, envir, enclos): Ошибка в выполнении.Проверьте вывод для получения дополнительной информации.Вызовы: source -> withVisible -> eval -> eval -> .Call Выполнение остановлено

Впервые в R / ML в SQL Server, помощь будет оценена.Заранее спасибо.

1 Ответ

0 голосов
/ 22 мая 2019

Когда я сделал что-то подобное, мне пришлось добавить as.raw к модели.Попробуйте это

    model <- unserialize(as.raw(rx_model));
...