适用于: SQL Server 2016 (13.x) 及更高版本
这是介绍如何在 SQL Server 中使用 RevoScaleR 函数的 RevoScaleR 教程系列的第 8 个教程。
在本教程中,你将使用在上一教程中创建的逻辑回归模型,对使用相同的独立变量作为输入的其他数据集进行评分。
- 对新数据进行评分
- 创建分数直方图
注意
其中一些步骤需要具有 DDL 管理员权限。
生成并保存分数
将在教程 2 中创建的 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。rxPredict 的 type 参数定义计算预测的方式。 指定关键字“响应”以根据响应变量的比例生成分数 。 或者,使用关键字“链接”根据底层的链接函数生评分,在这种情况下,使用逻辑量表创建预测 。
不久,可以在 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)结果
