Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Managed Instance
I del fyra i den här självstudieserien i fem delar får du lära dig hur du tränar en maskininlärningsmodell med hjälp av R. Du tränar modellen med hjälp av de datafunktioner som du skapade i föregående del och sparar sedan den tränade modellen i en SQL Server-tabell. I det här fallet är R-paketen redan installerade med R Services (In-Database), så allt kan göras från SQL.
I den här artikeln ska du:
- Skapa och träna en modell med hjälp av en SQL-lagrad procedur
- Spara den tränade modellen i en SQL-tabell
I del ett installerade du förhandskraven och återställde exempeldatabasen.
I del två granskade du exempeldata och genererade några diagram.
I del tre lärde du dig att skapa funktioner från rådata med hjälp av en Transact-SQL funktion. Sedan anropade du funktionen från en lagrad procedur för att skapa en tabell som innehåller funktionsvärdena.
I del fem får du lära dig hur du operationaliserar de modeller som du har tränat och sparat i del fyra.
Skapa den lagrade proceduren
När du anropar R från T-SQL använder du den system lagrade proceduren sp_execute_external_script. Men för processer som du upprepar ofta, till exempel omträning av en modell, är det lättare att kapsla in anropet till sp_execute_external_script i en annan lagrad procedur.
Öppna ett nytt frågefönster i Management Studio.
Kör följande instruktion för att skapa den lagrade proceduren RTrainLogitModel. Den här lagrade proceduren definierar indata och använder glm för att skapa en logistisk regressionsmodell.
CREATE PROCEDURE [dbo].[RTrainLogitModel] (@trained_model varbinary(max) OUTPUT) AS BEGIN DECLARE @inquery nvarchar(max) = N' select tipped, fare_amount, passenger_count,trip_time_in_secs,trip_distance, pickup_datetime, dropoff_datetime, dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance from nyctaxi_sample tablesample (70 percent) repeatable (98052) ' EXEC sp_execute_external_script @language = N'R', @script = N' ## Create model logitObj <- glm(tipped ~ passenger_count + trip_distance + trip_time_in_secs + direct_distance, data = InputDataSet, family = binomial) summary(logitObj) ## Serialize model trained_model <- as.raw(serialize(logitObj, NULL)); ', @input_data_1 = @inquery, @params = N'@trained_model varbinary(max) OUTPUT', @trained_model = @trained_model OUTPUT; END GOFör att säkerställa att vissa data lämnas över för att testa modellen väljs 70% av data slumpmässigt från taxidatatabellen i träningssyfte.
SELECT-frågan använder den anpassade skalärfunktionen fnCalculateDistance för att beräkna det direkta avståndet mellan upphämtnings- och avlämningsplatserna. Resultatet av frågan lagras i standardvariabeln R-indata,
InputDataset.R-skriptet anropar R-funktionen glm för att skapa den logistiska regressionsmodellen.
Den binära variabeln tipped används som etikett eller utfallskolumn, och modellen anpassas med hjälp av dessa egenskapskolumner: passenger_count, trip_distance, trip_time_in_secs och direct_distance.
Den tränade modellen, som sparas i R-variabeln
logitObj, serialiseras och returneras som en utdataparameter.
Träna och distribuera R-modellen med hjälp av den lagrade proceduren
Eftersom den lagrade proceduren redan innehåller en definition av indata behöver du inte ange någon indatafråga.
Om du vill träna och distribuera R-modellen anropar du den lagrade proceduren och infogar den i databastabellen nyc_taxi_models så att du kan använda den för framtida förutsägelser:
DECLARE @model VARBINARY(MAX); EXEC RTrainLogitModel @model OUTPUT; INSERT INTO nyc_taxi_models (name, model) VALUES('RTrainLogit_model', @model);Titta på Meddelanden-fönstret i Management Studio för meddelanden som skulle skickas till R:s stdout-ström, som det här meddelandet:
"STDOUT-meddelanden från externt skript: Rader Läs: 1193025, Totalt antal bearbetade rader: 1193025, Total segmenttid: 0,093 sekunder"
När instruktionen har slutförts öppnar du tabellen nyc_taxi_models. Det kan ta en stund att bearbeta data och anpassa modellen.
Du kan se att en ny rad har lagts till, som innehåller den serialiserade modellen i kolumnmodellen och modellnamnet RTrainLogit_model i kolumnnamnet.
model name ---------------------------- ------------------ 0x580A00000002000302020.... RTrainLogit_model
I nästa del av den här självstudien använder du den tränade modellen för att generera förutsägelser.
Nästa steg
I den här artikeln kommer du att:
- Skapat och tränat en modell med hjälp av en SQL-lagrad procedur
- Sparade den tränade modellen i en SQL-tabell