- สร้าง Azure ML Studio Account
- ทดลองใช้ Azure ML Studio
- Deploy เว็บเซอร์วิส
- ทดสอบเว็บเซอร์วิส
- ดู headers และตัวอย่างการเรียกเว็บเซอร์วิส
- Microsoft Azure Machine Learning Studio
- Machine Learning Studio Documentation
- Azure Machine Learning Studio Capabilities Diagram (PDF)
1.สร้าง Azure ML Studio Account
การเข้าใช้งาน Microsoft Azure Machine Learning Studio มี account อยู่ 3 ปรเภท คือ Guest workspace
, Free workspace
และ Standard workspace
ถ้าลงชื่อเข้าใช้ด้วย Microsoft account จะได้เป็น Free workspace
Guest workspace
- 8-hour trial
- No sign-in required
- Can build machine-learning models in minutes
- Full range of available machine-learning algorithms
Free workspace
- Sign in with a Microsoft account
- Free access with no expiration
- 10 GB of free storage
- Support for both Python and R scripts
- Predictive web services
Standard workspace
- Azure subscription required
- $9.99 per month
- Full SLA (service-level agreement) support
- Bring your own Azure storage
- Parallel graph execution
- Elastic web service endpoints
- Ideal for enterprise-grade usage
แต่ถ้าจะใช้แบบ Standard workspace
ให้เข้าไปที่ Portal แล้วเลือกเมนู Create a resource
แล้วพิมพ์ Machine Learning Studio Workspace
ก็จะมีให้เลือกหลายราคา
2.ทดลองใช้ Azure ML Studio
ดาว์นโหลดไฟล์ข้อมูลตัวอย่าง
ไฟล์ Building Data.csv
ข้อมูลมี 768 แถว และ 5 คอลัมน์ WallArea
, RoofArea
, OverallHeight
, GlazingArea
และ HeatingLoad
Upload dataset
ที่เมนูทางซ้ายเลือก DATASETS และที่ด้านล่างเลือก New
ทำการ upload ไฟล์ Building Data.csv โดยเลือก DataSet > From Local File
ทำการทดลอง
ที่เมนูทางซ้ายเลือก EXPERIMENTALS และที่ด้านล่างเลือก New > Blank Experiment.
จะได้หน้าตาประมาณนี้
โดยมีเมนูย่อยของ EXPERIMENTALS เพิ่มมาประมาณนี้
ต่อไปจะเลือก operation มา 6 อันดังนี้
- Saved Datasets > My Datasets > Building Data.csv
- Data Transformation > Sample and Split.> Split Data
- Train > Train Model
- Machine Learning > Initialize Model > Regression > Decision Forest Regression
- Machine Learning > Score > Score Model
- Machine Learning > Evaluate > Evaluate Model
1.เลือกดาต้าเซ็ต Saved Datasets > My Datasets > Building Data.csv
Drag ดาต้าเซ็ตไปงางที่ designer surface
2.เลือก Data Transformation > Sample and Split.> Split Data
ลากเส้นเชื่อม เสร็จแล้วเลือกที่ Split Data แล้วดูที่ทางขวา กำหนดให้ fraction of rows in the first output dataset
เท่ากับ 0.7 ซึ่งก็คือการแบ่งข้อมูลเป็น 70/30
3.เลือก Train > Train Model
ลากเส้นต่อ output 1 ของ Split Data ไปที่ Train Model
เลือก Train Model แล้วทางขวาเลือก Launch Column Selector
เลือก With Rules เลือก dropdown empty column และเลือก Wall Area
เสร็จแล้วคลิกที่เครื่องหมายถูก
4.เลือก Machine Learning > Initialize Model > Regression > Decision Forest Regression เสร็จแล้วลากเส้นเชื่อมต่อ
5.เลือก Machine Learning > Score > Score Model เสร็จแล้วลากเส้นเชื่อม
6.เลือก Machine Learning > Evaluate > Evaluate Model เสร็จแล้วลากเส้นเชื่อมต่อ
ที่ด้านล่างกดปุ่ม Run
เมื่อรันเสร็จจะเห็นไอคอนเขียวที่แต่ละ operation
และทางขวาจะขึ้น STATUS CODE เป็น Finished
กด SAVE AS ที่ด้านล่าง แล้วตั้งชื่อโปรเจ็กส์
3.Deploy เว็บเซอร์วิส
เปิดโปรเจ็กส์มา แล้วดูว่าทางขวาขึ้น STATUS CODE เป็น Finished มั๊ย
ถ้าใช่ก็ดูที่ด้านล่างแล้วกดปุ่ม Set Up Web Service > Predictive Web Service [Recommended].
โมเดลจะแปลงร่างเป็นประมาณนี้
กดปุ่ม RUN
เมื่อรันเสร็จ Score Model จะขึ้นเครื่องหมายถูกสีเขียว และทางขวาจะขึ้น STATUS CODE เป็น Finished
4.ทดสอบเว็บเซอร์วิส
ที่ด้านล่างเลือกปุ่ม Deploy Web Service จะได้หน้าตาประมาณนี้
ที่ด้านล่าง ถัดจาก Request/Response ให้กดปุ่ม Test
ลองใส่ค่า แล้วคลิกที่เครื่องหมายถูก
- Wall area: 296
- Roof area: 110.25
- Overall height: 7
- Glazing area: 0
- Heating load: 15.55
ที่ด้านล่างเหนือปุ่ม NEW จะเห็นแบบนี้
กด Details จะเห็น response ที่ส่งกลับมา
Result: {"Results":{"output1":{"type":"table","value":{"ColumnNames":["WallArea","RoofArea","OverallHeight","GlazingArea","HeatingLoad","Scored Label Mean","Scored Label Standard Deviation"],"ColumnTypes":["Double","Double","Double","Double","Double","Double","Double"],"Values":[["296","110.25","7","0","15.55","0.482142857142857","0.0691609440506184"]]}}}}
{ "Results": { "output1": { "type": "table", "value": { "ColumnNames": [ "WallArea", "RoofArea", "OverallHeight", "GlazingArea", "HeatingLoad", "Scored Label Mean", "Scored Label Standard Deviation" ], "ColumnTypes": [ "Double", "Double", "Double", "Double", "Double", "Double", "Double" ], "Values": [ [ "296", "110.25", "7", "0", "15.55", "0.482142857142857", "0.0691609440506184" ] ] } } } }
5.ดู headers และตัวอย่างการเรียกเว็บเซอร์วิส
ที่ด้านล่าง คลิกที่ REQUEST/RESPONSE จะเปิดหน้าแสดง Request และ Response พร้อมตัวอย่างการเรียกเว็บเซอร์วิสในภาษา C#, Python และ R
C#
// This code requires the Nuget package Microsoft.AspNet.WebApi.Client to be installed. // Instructions for doing this in Visual Studio: // Tools -> Nuget Package Manager -> Package Manager Console // Install-Package Microsoft.AspNet.WebApi.Client using System; using System.Collections.Generic; using System.IO; using System.Net.Http; using System.Net.Http.Formatting; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; namespace CallRequestResponseService { public class StringTable { public string[] ColumnNames { get; set; } public string[,] Values { get; set; } } class Program { static void Main(string[] args) { InvokeRequestResponseService().Wait(); } static async Task InvokeRequestResponseService() { using (var client = new HttpClient()) { var scoreRequest = new { Inputs = new Dictionary<string, StringTable>() { { "input1", new StringTable() { ColumnNames = new string[] {"WallArea", "RoofArea", "OverallHeight", "GlazingArea", "HeatingLoad"}, Values = new string[,] { { "0", "0", "0", "0", "0" }, { "0", "0", "0", "0", "0" }, } } }, }, GlobalParameters = new Dictionary<string, string>() { } }; const string apiKey = "abc123"; // Replace this with the API key for the web service client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey); client.BaseAddress = new Uri("https://ussouthcentral.services.azureml.net/workspaces/400f621e44994f38a4db6d9e84661453/services/425b916abbd04404b04b7f531b8f6139/execute?api-version=2.0&details=true"); // WARNING: The 'await' statement below can result in a deadlock if you are calling this code from the UI thread of an ASP.Net application. // One way to address this would be to call ConfigureAwait(false) so that the execution does not attempt to resume on the original context. // For instance, replace code such as: // result = await DoSomeTask() // with the following: // result = await DoSomeTask().ConfigureAwait(false) HttpResponseMessage response = await client.PostAsJsonAsync("", scoreRequest); if (response.IsSuccessStatusCode) { string result = await response.Content.ReadAsStringAsync(); Console.WriteLine("Result: {0}", result); } else { Console.WriteLine(string.Format("The request failed with status code: {0}", response.StatusCode)); // Print the headers - they include the requert ID and the timestamp, which are useful for debugging the failure Console.WriteLine(response.Headers.ToString()); string responseContent = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseContent); } } } } }
ถ้าไม่ใส่ apikey
ก็จะ error Unauthorized
แบบนี้
The request failed with status code: Unauthorized x-ms-request-id: dce81895-0dca-460f-93f9-ef14c61e06a9 Date: Wed, 19 Jun 2019 07:41:54 GMT Server: Microsoft-HTTPAPI/2.0 {"error":{"code":"Unauthorized","message":"Request is unauthorized to access resource.","details":[{"code":"ScoreRequestUnauthorized","message":"Invalid credentials provided."}]}}
พอใส่ apikey
ก็ใช้ได้ทันที
Result: {"Results":{"output1":{"type":"table","value":{"ColumnNames":["WallArea","RoofArea","OverallHeight","GlazingArea","HeatingLoad","Scored Label Mean","Scored Label Standard Deviation"],"ColumnTypes":["Double","Double","Double","Double","Double","Double","Double"],"Values":[["0","0","0","0","0","0.0178571428571429","0.0570318019799027"],["0","0","0","0","0","0.0178571428571429","0.0570318019799027"]]}}}}