Подходящая модель с r в SQL Server - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь следовать этому:

https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/rtsql-create-a-predictive-model-r?view=sql-server-2017

Предоставленный код:

DROP PROCEDURE IF EXISTS generate_linear_model;
GO
CREATE PROCEDURE generate_linear_model
AS
BEGIN
    EXEC sp_execute_external_script
    @language = N'R'
    , @script = N'lrmodel <- rxLinMod(formula = distance ~ speed, data = CarsData);
        trained_model <- data.frame(payload = as.raw(serialize(lrmodel, connection=NULL)));'
    , @input_data_1 = N'SELECT [speed], [distance] FROM CarSpeed'
    , @input_data_1_name = N'CarsData'
    , @output_data_1_name = N'trained_model'
    WITH RESULT SETS ((model varbinary(max)));
END;
GO

просто не работает.

Разве данные не должны называться автомобилями?Данные об автомобилях также не имеют расстояния между столбцами, а, скорее, dist.Я изменил код следующим образом:

DROP PROCEDURE IF EXISTS generate_linear_model;
GO
CREATE PROCEDURE generate_linear_model
AS
BEGIN
EXEC sp_execute_external_script
@language = N'R'
, @script = N'lrmodel <- rxLinMod(formula = distance ~ speed, data = cars);
trained_model <- data.frame(payload = as.raw(serialize(lrmodel, connection=NULL)));'
, @input_data_1 = N'SELECT [speed], [dist] FROM cars'
, @input_data_1_name = N'cars'
, @output_data_1_name = N'trained_model'
WITH RESULT SETS ((model varbinary(max)));
END;
GO

, но все равно получаю ошибки.Кстати, я немного запутался в том, что делает

@input_data_1 = N'SELECT [speed], [dist] FROM cars'

.Это запрос к данным автомобилей в R?Любые указатели будут очень цениться.Спасибо.

PS:

Комментарий ниже помог мне исправить код:

--CREATE TABLE stopping_distance_models (
--    model_name varchar(30) not null default('default model') primary key,
--    model varbinary(max) not null);

DROP PROCEDURE IF EXISTS generate_linear_model;
GO
CREATE PROCEDURE generate_linear_model
AS
BEGIN
EXEC sp_execute_external_script
@language = N'R'
,@script = N'data(cars); 
lrmodel <- rxLinMod(formula = dist ~ speed, data = cars);
trained_model <- data.frame(payload = as.raw(serialize(lrmodel, connection=NULL)));'
, @input_data_1 = N''
, @input_data_1_name = N'cars'
, @output_data_1_name = N'trained_model'
WITH RESULT SETS ((model varbinary(max)));
END;
GO

INSERT INTO stopping_distance_models (model)
EXEC generate_linear_model;

1 Ответ

0 голосов
/ 03 июня 2018

То, как вы должны это сделать, это следующий, просто оставьте пустым input_data_1, потому что вы не используете какой-либо запрос для вашей модели:

EXEC sp_execute_external_script
@language = N'R'
,@script = N'data(cars); 
lrmodel <- rxLinMod(formula = dist ~ speed, data = cars);
trained_model <- data.frame(payload = as.raw(serialize(lrmodel, connection=NULL)));'
, @input_data_1 = N''
, @input_data_1_name = N'cars'
, @output_data_1_name = N'trained_model'
WITH RESULT SETS ((model varbinary(max)));
END;
GO

Очень полезное сочетание R и SQL.Дайте мне знать любые вопросы по этому поводу.

...