使用Microsoft R Server進行機器學習和模型發布(2)


本文中用到的所有demo我都已經發布到了Github,需要的同學可以自行下載:

https://github.com/kingliantop/azurelabs/tree/master/RServerDemo

 

Microsoft R客戶端的安裝

Microsoft R客戶端是一個免費的用於數據科學分析的高性能的工具。他基於開源的R語言構建,所以你可以使用任何開源的R packages,另外R client也支持微軟的強大的ScaleR語言,包括使用mrsdeploy package遠程執行

1. 首先,下載安裝Microsoft R client for windows,介紹地址如下:

https://msdn.microsoft.com/en-us/microsoft-r/r-client-install-windows

下載安裝地址:http://aka.ms/rclient/

2. 當然,如果你使用Linux,也可以下載安裝R client for Linux

https://msdn.microsoft.com/en-us/microsoft-r/r-client-install-linux

下載地址: http://aka.ms/rclientlinux.

3. 在安裝過程中,如果你需要運行一些預先訓練的模型,記得勾選"pre-trained models":

R IDE的安裝

安裝了Microsoft R 客戶端以后,你可以選擇安裝你喜歡的R IDE安裝,例如帶有R插件的Visual Studio,或者RStudio

  • RTVS for R Client on WindowsR Tools for Visual Studio (RTVS) 是一個集成開發環境,你可以使用Visual Studio免費版本,R Tools也支持,安裝完成后后,如果你的機器上有多個R環境,可以配置Microsoft R作為默認客戶端 .
  • RStudio for R Client支持 Windows or Linux平台, RStudio 是一個非常流行的R IDE. 在安裝完RStudio后他會自己查找R客戶端,但如果你有多個R環境,可以指定Microsoft R作為 C:\Program Files\Microsoft\R Client\R_SERVER\bin\x64 作為客戶端路徑

在本例中,我們使用RStudio免費版,下載RStudio然后安裝:https://www.rstudio.com/

 

使用Microsoft R進行機器學習

 

1. 在這個測試案例中,我們用R語言來預測航班的延遲。測試數據集中有天氣數據,航班數據,我們可以用這些歷史數據來構建模型,預測是否在未來的天氣情況下,航班將會延遲。這個案例是一個機器學習中的分類問題,屬於監管學習,二分法中,結果0認為航班按時起飛,結果1代表航班延遲超過15分鍾起飛。

2. 在我的Github上下載myfight.r, 並且在RStudio中打開,我們首先導入和加載測試數據,測試數據放在Microsoft的RTVS倉庫下,選中需要執行的段,使用Ctrl+回車即可執行:

github <- "https://raw.githubusercontent.com/Microsoft/RTVS-docs/master/examples/MRS_and_Machine_Learning/Datasets/"

inputFileFlightURL <- paste0(github, "Flight_Delays_Sample.csv")

inputFileWeatherURL <- paste0(github, "Weather_Sample.csv")

#Create a temporary directory to store the intermediate XDF files.

td <- tempdir()

outFileFlight <- paste0(td, "/flight.xdf")

outFileWeather <- paste0(td, "/weather.xdf")

outFileOrigin <- paste0(td, "/originData.xdf")

outFileDest <- paste0(td, "/destData.xdf")

outFileFinal <- paste0(td, "/finalData.xdf")

#Import the flight data.

flight_mrs <- rxImport(

inData = inputFileFlightURL, outFile = outFileFlight,

missingValueString = "M", stringsAsFactors = FALSE,

# Remove columns that are possible target leakers from the flight data.

varsToDrop = c("DepDelay", "DepDel15", "ArrDelay", "Cancelled", "Year"),

# Define "Carrier" as categorical.

colInfo = list(Carrier = list(type = "factor")),

# Round down scheduled departure time to full hour.

transforms = list(CRSDepTime = floor(CRSDepTime/100)),

overwrite = TRUE

)

3. 總共有大約74萬行記錄,加載完畢后我們可以打印出來看看數據結果,包含日期,航空公司,機場,出發時間,到達時間等信息:

4. 你也可以使用rxSummary函數快速方便的生成文件匯總信息:

rxSummary(~., data = flight_mrs, blocksPerRead = 2)

5. 后面以類似的方式導入天氣數據,並進行數據預處理,在此不再贅述。然后將航班數據和天氣數據進行合並關聯,並進行數據的清晰,轉換等操作,為下一步的分析做准備。

6. 分割數據,80%用來做機器學習進行尋來你,20%用來做測試,進行訓練。

7. 然后使用邏輯回歸模型算法進行預測,最后使用新的數據集合進行驗證,計算ROC和AUC來評估算法的好壞並用可視化的方式進行展現:

ROCAUC通常用來衡量一個二元分類器的好壞。

ROC為接收者操作特征曲線(receiver operating characteristic curve

AUC曲線下面積 (Area under the Curve of ROC)

8 .在這個實例中,也提供了使用決策樹Decision Tree進行分析和預測,產生的結果可以直接進行對比:

 

在服務器端運行和調試你的R腳本

 

一般情況下,比較小的數據量我們本地的筆記本及開發環境就可以,但一旦數據量比較大,運算周期比較長,我們怎么開發測試學習模型昵?如果你有一個遠端的R服務器,運算能力比較強,那么利用微軟提供的免費的mrsdeploy擴展包,就可以快速的將你的R腳本再遠端執行。

如上圖所示,微軟為了幫助開發人員和運維人員在遠端服務器端開發,調測,測試R腳本,提供了一個叫做mrsdeploy 的擴展包,借助於這個包,你可以將你的代碼在遠端執行和部署。Mrsdeploy提供了兩種連接雲端R服務器的過程,一個是基於服務器用戶名密碼的認證的remoteLogin() ,另外一個使用Azure AD來做認證的remoteLoginAAD(). 基本語法如下:

remoteLogin( https://YourHostEndpoint, session = TRUE, diff = TRUE, commandline = TRUE username = NULL, password = NULL, )

remoteLoginAAD( endpoint, authuri = https://login.windows.net, tenantid = "<AAD_DOMAIN>", clientid = "<NATIVE_APP_CLIENT_ID>", resource = "<WEB_APP_CLIENT_ID>", session = TRUE, diff = TRUE, commandline = TRUE )

本例中我們使用remoteLogin來登陸遠端服務,用戶名密碼就是你在前文中用Admin Utility創建的用戶名和密碼。

1. 使用remoteLogin登陸,端口是12800,用戶名密碼是Admin Utility創建的本地管理員密碼,例如我的登陸函數如下,登陸成功后remoteLogin會自動對比本地和遠端R package並給出差異報告:
remoteLogin("42.159.238.196:12800",username="admin",password="XXXXXXXX")

 

2. 連接成功后,可以看到提示符就變變成"remote",即當前是在遠端的R server操作,可以做個簡單的測試,可以看到一切運行正常:

 

3. 使用pause()和resume()函數即可在本地模式和遠端模式之間切換,pause從遠端模式切換回本地模式,resume從本地切換回遠端模式:

REMOTE> pause()

> date()

[1] "Thu May 18 22:57:02 2017"

> resume()

 

REMOTE>

4. 在正式執行腳本之前,你會看到提示,本地的packages和服務器端的packages不一致,如果你的一些腳本需要這些package,可以使用install.packages進行安裝:

 

5. 比較重要的一點是,如果你連接到遠端服務器,執行一些腳本,會發現所有ScaleR相關的腳本都會執行有問題,這是因為默認情況下,mrsdeploy和RevoScaleR庫並沒有被加載,那么你可能需要手工加載一下:

library(mrsdeploy)

library(RevoScaleR)
6. 對於上例中測試過的flight例子,我們可以在遠端之前創建的Microsoft R Server上執行學習和運算:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM