Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server 2016 (13.x) и более поздних версий
Эта часть 8 входит в состав серии учебников по RevoScaleR, посвященной использованию функций RevoScaleR в SQL Server.
В этом учебнике вы будете использовать модель логистической регрессии, созданную в предыдущем учебнике, для оценки еще одного набора данных с теми же независимыми переменными в качестве входных данных.
- Оценка новых данных
- Создание гистограммы оценок
Примечание.
Для выполнения некоторых действий требуются права администратора DDL.
Создание и сохранение оценок
Обновите источник данных sqlScoreDS (созданный при работе со вторым учебником), чтобы использовать сведения о столбцах, созданных ранее.
sqlScoreDS <- RxSqlServerData( connectionString = sqlConnString, table = sqlScoreTable, colInfo = ccColInfo, rowsPerRead = sqlRowsPerRead)Чтобы убедиться, что результаты не потеряны, создайте новый объект источника данных. Затем используйте новый объект источника данных для заполнения новой таблицы в базе данных RevoDeepDive.
sqlServerOutDS <- RxSqlServerData(table = "ccScoreOutput", connectionString = sqlConnString, rowsPerRead = sqlRowsPerRead )К этому моменту таблица не была создана. Эта инструкция просто определяет контейнер для данных.
Проверьте текущий контекст вычисления с помощью rxGetComputeContext и при необходимости задайте серверный контекст.
rxSetComputeContext(sqlCompute)В качестве меры предосторожности проверьте наличие выходной таблицы. Если она уже существует с тем же именем, при попытке записи новой таблицы возникнет ошибка.
Для этого вызовите функции rxSqlServerTableExists и rxSqlServerDropTable, передав имя таблицы в качестве входных данных.
if (rxSqlServerTableExists("ccScoreOutput")) rxSqlServerDropTable("ccScoreOutput")- Функция rxSqlServerTableExists запрашивает драйвер ODBC и возвращает значение TRUE, если таблица существует, или значение FALSE в противном случае.
- Функция rxSqlServerDropTable выполняет DDL и возвращает значение TRUE, если таблица успешно удалена, или FALSE в противном случае.
Выполните функцию rxPredict для создания оценок и их сохранения в новой таблице, определенной в источнике данных sqlScoreDS.
rxPredict(modelObject = logitObj, data = sqlScoreDS, outData = sqlServerOutDS, predVarNames = "ccFraudLogitScore", type = "link", writeModelVars = TRUE, overwrite = TRUE)Функция RxPredict является еще одной функцией, поддерживающей выполнение в удаленных контекстах вычисления. Функцию rxPredict можно использовать для создания оценок из моделей на основе rxLinMod, rxLogit или rxGlm.
В этом случае параметру writeModelVars присвоено значение TRUE . Это означает, что переменные, которые использовались для оценки, будут включены в новую таблицу.
Параметр predVarNames определяет переменную, в которой будут храниться результаты. В этом случае передается новая переменная с именем
ccFraudLogitScore.Параметр type функции rxPredict определяет способ вычисления прогнозов. Укажите ключевое слово response для создания оценок на основе масштаба переменной ответа. Также можно использовать ключевое слово link для создания оценок на основе базовой функции link. В этом случае прогнозы создаются с помощью логистического масштаба.
Через некоторое время вы можете обновить список таблиц в среде Management Studio, чтобы увидеть новую таблицу и ее данные.
Чтобы добавить дополнительные переменные в результирующие прогнозы, используйте аргумент extraVarsToWrite. Например, в следующем коде переменная custID добавляется из таблицы данных для оценки в выходную таблицу прогнозов.
rxPredict(modelObject = logitObj, data = sqlScoreDS, outData = sqlServerOutDS, predVarNames = "ccFraudLogitScore", type = "link", writeModelVars = TRUE, extraVarsToWrite = "custID", overwrite = TRUE)
Отображение оценок на гистограмме
После создания новой таблицы производится вычисление и отображение гистограммы с 10 000 прогнозируемых оценок. Вычисления будут производиться быстрее, если указать нижнее и верхнее значения, поэтому получите их из базы данных и добавьте в рабочие данные.
Создайте источник данных sqlMinMax, который выполняет запрос к базе данных для получения нижнего и верхнего значений.
sqlMinMax <- RxSqlServerData( sqlQuery = paste("SELECT MIN(ccFraudLogitScore) AS minVal,", "MAX(ccFraudLogitScore) AS maxVal FROM ccScoreOutput"), connectionString = sqlConnString)В этом примере можно увидеть, насколько просто использовать объекты источника данных RxSqlServerData для определения произвольных наборов данных на основе запросов SQL, функций или хранимых процедур, а затем использовать их в коде R. Переменная не хранит фактические значения, а только определение источника данных. Запрос выполняется для создания значений только при его использовании в функции наподобие rxImport.
Вызовите функцию rxImport, чтобы поместить значения в кадр данных, который можно использовать совместно в разных контекстах вычисления.
minMaxVals <- rxImport(sqlMinMax) minMaxVals <- as.vector(unlist(minMaxVals))Результаты
> minMaxVals [1] -23.970256 9.786345Теперь, когда максимальное и минимальное значения доступны, используйте их для создания еще одного источника данных для сформированных оценок.
sqlOutScoreDS <- RxSqlServerData(sqlQuery = "SELECT ccFraudLogitScore FROM ccScoreOutput", connectionString = sqlConnString, rowsPerRead = sqlRowsPerRead, colInfo = list(ccFraudLogitScore = list( low = floor(minMaxVals[1]), high = ceiling(minMaxVals[2]) ) ) )Используйте объект источника данных sqlOutScoreDS для получения оценки, а также вычисления и отображения гистограммы. При необходимости добавьте код для задания контекста вычисления.
# rxSetComputeContext(sqlCompute) rxHistogram(~ccFraudLogitScore, data = sqlOutScoreDS)Результаты
