上一篇將訓練後的線性迴歸模型儲存在SQL 資料表內,這一篇筆記在SQL Server 2016使用模型作出預測。
為了讓各種AP用最簡單的方式使用機器學習訓練後的模型,這邊把模型使用的步驟寫成預存程序,讓AP直接Call,範例:
EXEC [PredictIcedRedTeaSales] 35
35是輸入的氣溫,執行結果就是今天冰紅茶銷售量的預測!
使用模型的步驟:
- 先把上一篇的訓練模型從資料表中取出,Data Type是varbinary(max)。
- 呼叫sp_execute_external_script輸入多組模型及測試值兩組參數
- 在R Script內則把模型反序列化,將預存程序輸入的測試數據作預測,並將結果回傳。
--(1)建立使用模型的預存程序
CREATE PROCEDURE [dbo].[PredictIcedRedTeaSales] @temperature int = 0
AS
BEGIN
DECLARE @lmModel varbinary(max) = (SELECT TOP 1 model FROM ML_Models);
EXEC sp_execute_external_script @language = N'R', @script = N'
mod <- unserialize(as.raw(model));
print(summary(mod))
testData <- data.frame(temperature = temp)
result <- predict(mod, newdata = testData)
OutputDataSet <- data.frame(icedTeaSales = result)
str(OutputDataSet)
print(OutputDataSet)',
@input_data_1 = N'',
@params = N'@model varbinary(max),
@temp int',
@model = @lmModel,
@temp = @temperature
WITH RESULT SETS (([icedTeaSales] int NOT NULL));
END
來測試看看!輸入氣溫35度作預測:
--(2)使用模型預測冰紅茶銷售量!
EXEC [PredictIcedRedTeaSales] 35
結果: 銷售量94杯冰紅茶
輸入氣溫26度則是預測60杯冰紅茶。
小結:
- 下放ML到地面的SQL Server 2016很厲害!
- In-DataBase R 人如其名,文如其人(收集資料、整理資料、訓練模型、使用模型全部在SQL Server 2016完成。)
另外,執行R的過程也可以檢視結果,像是觀察 R-Squared: 0.8028
相關係數R的平方,也稱為R2、解釋變異量(coefficient of determination)及迴歸模型的決定係數。
越接近1,表示氣溫(X)去預測冰紅茶銷售量(Y)的解釋能力很高;越接近0,解釋能力很低。
預測結果和原本訓練資料的分佈:
plot(icedTeaSales ~ temperature, main = "依據氣溫預測冰紅茶銷量", xlab = "當日最高氣溫(度)", ylab = "冰紅茶銷量(杯)", family = "STHeiti")
points(x = toBePredicted$temperature, y = predicted, col="blue", cex = 2, pch = 18)
abline(reg = lmIcedTea$coefficients, col = "orange", lwd = 2)
參考
[SQL Server][R Language]In-Database R(七)儲存學習模型
在 Transact-SQL 中使用 R 程式碼 (SQL Server R Services)
Lesson 5: Deploy and Use the Model (Data Science End-to-End Walkthrough)
如何選擇 Microsoft Azure Machine Learning 的演算法