Tutorial R: Melatih dan menyimpan model

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru Azure SQL Managed Instance

Di bagian empat dari seri tutorial lima bagian ini, Anda akan mempelajari cara melatih model pembelajaran mesin dengan menggunakan R. Anda akan melatih model menggunakan fitur data yang Anda buat di bagian sebelumnya, lalu menyimpan model terlatih dalam tabel SQL Server. Dalam hal ini, paket R sudah diinstal dengan R Services (In-Database), sehingga semuanya dapat dilakukan dari SQL.

Dalam artikel ini, Anda akan:

  • Membuat dan melatih model menggunakan prosedur tersimpan SQL
  • Menyimpan model terlatih ke tabel SQL

Di bagian satu, Anda menginstal prasyarat dan memulihkan database sampel.

Di bagian dua, Anda meninjau data sampel dan menghasilkan beberapa plot.

Di bagian tiga, Anda mempelajari cara membuat fitur dari data mentah dengan menggunakan fungsi Transact-SQL. Anda kemudian memanggil fungsi tersebut dari prosedur tersimpan untuk membuat tabel yang berisi nilai fitur.

Di bagian lima, Anda akan mempelajari cara mengoprasionalkan model yang Anda latih dan simpan di bagian empat.

Membuat prosedur tersimpan

Saat memanggil R dari T-SQL, Anda menggunakan prosedur tersimpan sistem, sp_execute_external_script. Namun, untuk proses yang sering Anda ulangi, seperti melatih kembali model, lebih mudah untuk merangkum panggilan ke sp_execute_external_script dalam prosedur tersimpan lain.

  1. Di Management Studio, buka jendela Kueri baru.

  2. Jalankan pernyataan berikut untuk membuat prosedur tersimpan RTrainLogitModel. Prosedur tersimpan ini menentukan data input dan menggunakan glm untuk membuat model regresi logistik.

    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
    GO
    
    • Untuk memastikan bahwa beberapa data ditinggalkan untuk menguji model, 70% data dipilih secara acak dari tabel data taksi untuk tujuan pelatihan.

    • Kueri SELECT menggunakan fungsi skalar kustom fnCalculateDistance untuk menghitung jarak langsung antara lokasi penjemputan dan pengantaran. Hasil kueri disimpan dalam variabel input R default, InputDataset.

    • Skrip R memanggil glm fungsi R untuk membuat model regresi logistik.

      Variabel biner yang diberi tip digunakan sebagai label atau kolom hasil, dan model cocok menggunakan kolom fitur ini: passenger_count, trip_distance, trip_time_in_secs, dan direct_distance.

    • Model terlatih, disimpan dalam variabel logitObjR , diserialisasikan dan dikembalikan sebagai parameter output.

Melatih dan menyebarkan model R menggunakan prosedur tersimpan

Karena prosedur tersimpan sudah menyertakan definisi data input, Anda tidak perlu memberikan kueri input.

  1. Untuk melatih dan menyebarkan model R, panggil prosedur tersimpan dan sisipkan ke dalam tabel database nyc_taxi_models, sehingga Anda dapat menggunakannya untuk prediksi di masa mendatang:

    DECLARE @model VARBINARY(MAX);
    EXEC RTrainLogitModel @model OUTPUT;
    INSERT INTO nyc_taxi_models (name, model) VALUES('RTrainLogit_model', @model);
    
  2. Tonton jendela Pesan Management Studio untuk pesan yang akan disalurkan ke aliran stdout R, seperti pesan ini:

    "Pesan STDOUT dari skrip eksternal: Baris Dibaca: 1193025, Total Baris yang Diproses: 1193025, Total Waktu Potongan: 0,093 detik"

  3. Setelah pernyataan selesai, buka tabel nyc_taxi_models. Pemrosesan data dan menyesuaikan model mungkin memakan waktu cukup lama.

    Anda dapat melihat bahwa satu baris baru telah ditambahkan, yang berisi model berseri dalam model kolom dan nama model RTrainLogit_model dalam nama kolom.

    model                        name
    ---------------------------- ------------------
    0x580A00000002000302020....  RTrainLogit_model
    

Di bagian berikutnya dari tutorial ini, Anda akan menggunakan model terlatih untuk menghasilkan prediksi.

Langkah berikutnya

Dalam artikel ini, Anda:

  • Membuat dan melatih model menggunakan prosedur tersimpan SQL
  • Menyimpan model terlatih ke tabel SQL