Aracılığıyla paylaş


Hızlı Başlangıç: SQL makine öğrenmesi ile Python'da tahmine dayalı model oluşturma ve puan verme

Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri Azure SQL Yönetimli Örnek

Bu hızlı başlangıçta Python kullanarak tahmine dayalı bir model oluşturacak ve eğiteceksiniz. Modeli SQL Server örneğinizdeki bir tabloya kaydedecek ve ardından SQL Server Machine Learning Services, Azure SQL Yönetilen Örneği Machine Learning Services veya SQL Server Büyük Veri Kümeleri kullanarak yeni verilerden değerleri tahmin etmek için modeli kullanacaksınız.

SQL'de çalışan iki saklı yordam oluşturup yürüteceksiniz. İlki klasik Iris çiçek veri kümesini kullanır ve çiçek özelliklerine göre bir Iris türünü tahmin etmek için bir Naïve Bayes modeli oluşturur. İkinci yordam puanlamadır; ilk yordamda oluşturulan modeli çağırarak yeni verilere dayalı bir tahmin kümesi oluşturur. Python kodunu bir SQL saklı yordamına yerleştirerek, işlemler SQL'de yer alır, yeniden kullanılabilir ve diğer saklı yordamlar ve istemci uygulamaları tarafından çağrılabilir.

Bu hızlı başlangıcı tamamlayarak şunları öğreneceksiniz:

  • Python kodunu saklı yordama ekleme
  • Saklı prosedür üzerindeki girdiler aracılığıyla kodunuza veri aktarma yöntemleri.
  • Saklı yordamlar modelleri kullanıma hazır hale getirmek için nasıl kullanılır?

Önkoşullar

Bu hızlı başlangıcı çalıştırmak için aşağıdaki önkoşullara ihtiyacınız vardır.

Saklı yordam oluşturarak model oluşturun

Bu adımda, sonuçları tahmin etmek için bir model oluşturan bir saklı yordam oluşturacaksınız.

  1. Azure Data Studio'yu açın, SQL örneğine bağlanın ve yeni bir sorgu penceresi açın.

  2. irissql veritabanına bağlanın.

    USE irissql
    GO
    
  3. Yeni bir saklı yordam oluşturmak için aşağıdaki kodu kopyalayın.

    Bu yordam yürütüldüğünde, Python oturumunu başlatmak için sp_execute_external_script çağırır.

    Python kodunuz için gereken girişler, bu saklı yordamda giriş parametreleri olarak aktarılır. Çıktı, makine öğrenmesi algoritması için Python scikit-learn kitaplığını temel alan eğitilmiş bir model olacaktır.

    Bu kod, modeli seri hale getirmek için pickle kullanır. Model, iris_data tablosundaki 0 ile 4 arasında sütunlardaki veriler kullanılarak eğitilir.

    Prosedürün ikinci bölümünde gördüğünüz parametreler, veri girişlerini ve model çıkışlarını ifade eder. Mümkün olduğunca, saklı yordam içinde çalışan Python kodunun, çalışma sırasında aktarılacak saklı yordam giriş ve çıkışlarına haritalayan açıkça tanımlanmış giriş ve çıkışlara sahip olmasını istiyorsunuz.

    CREATE PROCEDURE generate_iris_model (@trained_model VARBINARY(max) OUTPUT)
    AS
    BEGIN
        EXECUTE sp_execute_external_script @language = N'Python'
            , @script = N'
    import pickle
    from sklearn.naive_bayes import GaussianNB
    GNB = GaussianNB()
    trained_model = pickle.dumps(GNB.fit(iris_data[["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"]], iris_data[["SpeciesId"]].values.ravel()))
    '
            , @input_data_1 = N'select "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "SpeciesId" from iris_data'
            , @input_data_1_name = N'iris_data'
            , @params = N'@trained_model varbinary(max) OUTPUT'
            , @trained_model = @trained_model OUTPUT;
    END;
    GO
    
  4. Saklı yordamın mevcut olup olmadığını doğrulayın.

    Önceki adımdaki T-SQL betiği hatasız çalıştırıldıysa, generate_iris_model adlı yeni bir saklı yordam oluşturulur ve irissql veritabanına eklenir. Saklı yordamları Azure Data Studio Nesne Gezgini'ndeProgramlanabilirlik bölümünde bulabilirsiniz.

Modelleri oluşturmak ve eğitmek için prosedürü yürüt

Bu adımda, ekli kodu çalıştırma yordamını yürütür ve çıkış olarak eğitilmiş ve serileştirilmiş bir model oluşturursunuz.

Veritabanınızda yeniden kullanılmak üzere depolanan modeller bayt akışı olarak serileştirilir ve veritabanı tablosundaki VARBINARY (MAX) sütununda depolanır. Model oluşturulduktan, eğitildikten, seri hale getirildikten ve bir veritabanına kaydedildikten sonra, diğer yordamlar veya puanlama iş yüklerinde PREDICT T-SQL işlevi tarafından çağrılabilir.

  1. Prosedürü çalıştırmak için aşağıdaki betiği çalıştırın. Saklı yordamı yürütmek için belirli ifade dördüncü satırdadır EXECUTE.

    Bu özel betik, aynı prosedürü yeniden çalıştırarak oluşturulan yeni modellere yer açmak için aynı ada sahip mevcut modeli ("Naive Bayes") siler. Model silinmeden, nesnenin zaten var olduğunu belirten bir hata oluşur. Model, irissql veritabanını oluşturduğunuzda sağlanan iris_models adlı bir tabloda depolanır.

    DECLARE @model varbinary(max);
    DECLARE @new_model_name varchar(50)
    SET @new_model_name = 'Naive Bayes'
    EXECUTE generate_iris_model @model OUTPUT;
    DELETE iris_models WHERE model_name = @new_model_name;
    INSERT INTO iris_models (model_name, model) values(@new_model_name, @model);
    GO
    
  2. Modelin eklendiğini doğrulayın.

    SELECT * FROM dbo.iris_models
    

    Results

    model_name model
    Naive Bayes 0x800363736B6C6561726E2E6E616976655F62617965730A...

Tahminler oluşturmak için saklı prosedür oluşturma ve yürütme

Artık bir model oluşturduğunuza, eğitdiğinize ve kaydettiğinize göre sonraki adıma geçin: tahminler oluşturan bir saklı yordam oluşturma. Serileştirilmiş modeli yükleyen ve ona puan vermesi için yeni veri girişleri sağlayan bir Python betiğini çalıştırmak amacıyla sp_execute_external_script çağıracaksınız.

  1. Puanlama gerçekleştiren saklı yordamı oluşturmak için aşağıdaki kodu çalıştırın. Çalışma zamanında, bu yordam bir ikili model yükler, girdi olarak sütunları [1,2,3,4] kullanır ve sütunları [0,5,6] çıkış olarak belirtir.

    CREATE PROCEDURE predict_species (@model VARCHAR(100))
    AS
    BEGIN
        DECLARE @nb_model VARBINARY(max) = (
                SELECT model
                FROM iris_models
                WHERE model_name = @model
                );
    
        EXECUTE sp_execute_external_script @language = N'Python'
            , @script = N'
    import pickle
    irismodel = pickle.loads(nb_model)
    species_pred = irismodel.predict(iris_data[["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"]])
    iris_data["PredictedSpecies"] = species_pred
    OutputDataSet = iris_data[["id","SpeciesId","PredictedSpecies"]] 
    print(OutputDataSet)
    '
            , @input_data_1 = N'select id, "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "SpeciesId" from iris_data'
            , @input_data_1_name = N'iris_data'
            , @params = N'@nb_model varbinary(max)'
            , @nb_model = @nb_model
        WITH RESULT SETS((
                    "id" INT
                  , "SpeciesId" INT
                  , "SpeciesId.Predicted" INT
                    ));
    END;
    GO
    
  2. Saklı yordamı yürüterek modelin adını "Naive Bayes" olarak verin, böylece yordam hangi modelin kullanılacağını bilir.

    EXECUTE predict_species 'Naive Bayes';
    GO
    

    Saklı yordamı çalıştırdığınızda bir Python data.frame döndürür. Bu T-SQL satırı, döndürülen sonuçların şemasını belirtir: WITH RESULT SETS ( ("id" int, "SpeciesId" int, "SpeciesId.Predicted" int));. Sonuçları yeni bir tabloya ekleyebilir veya bir uygulamaya döndürebilirsiniz.

    Saklı yordamın çalıştırılmasıyla elde edilen sonuç kümesi

    Sonuçlar, giriş olarak çiçek özelliklerini kullanan türler hakkında 150 tahmindir. Gözlemlerin çoğu için tahmin edilen türler gerçek türle eşleşir.

    Bu örnek hem eğitim hem de puanlama için Python iris veri kümesi kullanılarak basitleştirildi. Daha tipik bir yaklaşım, yeni verileri almak için bir SQL sorgusu çalıştırmayı ve bunu Olarak Python'a InputDataSetgeçirmeyi içerir.

Sonuç

Bu alıştırmada, farklı görevlere adanmış saklı yordamlar oluşturmayı öğrendiniz; her bir saklı yordam, bir Python işlemini başlatmak için sistem saklı yordamı sp_execute_external_script kullandı. Python işlemine girişler sp_execute_external'a parametre olarak geçirilir. Hem Python betiğinin kendisi hem de veritabanındaki veri değişkenleri giriş olarak geçirilir.

Genel olarak, Azure Data Studio'yu yalnızca şık Python koduyla veya satır tabanlı çıkış döndüren basit Python koduyla kullanmayı planlamanız gerekir. Azure Data Studio bir araç olarak T-SQL gibi sorgu dillerini destekler ve düzleştirilmiş satır kümeleri döndürür. Kodunuz dağılım grafiği veya histogram gibi görsel çıkışlar oluşturuyorsa, görüntüyü saklı yordamın dışında işleyebilen ayrı bir araç veya son kullanıcı uygulaması gerekir.

Bir dizi işlemi işleyen her şey dahil betik yazmaya alışkın olan bazı Python geliştiricileri için görevleri ayrı yordamlar halinde düzenlemek gereksiz görünebilir. Ancak eğitim ve puanlama farklı kullanım örneklerine sahiptir. Bunları ayırarak, her görevi farklı bir zamanlamaya ve her işlem için kapsam izinlerine yerleştirebilirsiniz.

Son bir avantaj, işlemlerin parametreler kullanılarak değiştirilebiliyor olmasıdır. Bu alıştırmada, modeli oluşturan Python kodu (bu örnekte "Naive Bayes" olarak adlandırılır) bir puanlama işleminde modeli çağıran ikinci bir saklı yordama giriş olarak geçirildi. Bu alıştırmada yalnızca bir model kullanılır, ancak puanlama görevinde modelin parametreleştirilmesinin bu betiği nasıl daha kullanışlı hale getireceğini tahmin edebilirsiniz.

Sonraki Adımlar

SQL makine öğrenmesi ile Python öğreticileri hakkında daha fazla bilgi için bkz: