[SQL Server][R Language]In-Database R(八)使用機器學習模型

上一篇將訓練後的線性迴歸模型儲存在SQL 資料表內,這一篇筆記在SQL Server 2016使用模型作出預測。

 

為了讓各種AP用最簡單的方式使用機器學習訓練後的模型,這邊把模型使用的步驟寫成預存程序,讓AP直接Call,範例:

 EXEC [PredictIcedRedTeaSales] 35

35是輸入的氣溫,執行結果就是今天冰紅茶銷售量的預測!

 

使用模型的步驟:

  1. 先把上一篇的訓練模型從資料表中取出,Data Type是varbinary(max)。
  2. 呼叫sp_execute_external_script輸入多組模型及測試值兩組參數
  3. 在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 的演算法