Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri
Azure SQL Yönetimli Örnek
Bu beş bölümden oluşan öğretici serisinin dördüncü bölümünde scikit-learn ve revoscalepy Python paketlerini kullanarak makine öğrenmesi modelini eğitmeyi öğreneceksiniz. Bu Python kitaplıkları SQL Server makine öğrenmesi ile zaten yüklüdür.
Sql Server saklı yordamını kullanarak modeli oluşturmak ve eğitmek için modülleri yükleyip gerekli işlevleri çağıracaksınız. Model, bu öğretici serisinin önceki bölümlerinde oluşturduğunuz veri özelliklerini gerektirir. Son olarak, eğitilen modeli bir SQL Server tablosuna kaydedeceksiniz.
Bu makalede şunları yapacaksınız:
- SQL saklı yordamı kullanarak model oluşturmak ve eğitmek
- Eğitilen modeli SQL tablosuna kaydetme
Birinci bölümde önkoşulları yüklemiş ve örnek veritabanını geri yüklemişsinizdir.
İkinci bölümde örnek verileri incelediniz ve bazı çizimler oluşturacaksınız.
Üçüncü bölümde, bir Transact-SQL işlevi kullanarak ham verilerden özellik oluşturmayı öğrendinsiniz. Ardından bu işlevi saklı yordamdan çağırarak özellik değerlerini içeren bir tablo oluşturacaksınız.
Beşinci bölümde, dördüncü bölümde eğitip kaydettiğiniz modelleri nasıl kullanıma hazır hale getirmeniz gerektiğini öğreneceksiniz.
Örnek verileri eğitim ve test kümelerine bölme
nyctaxi_sample tablosundaki verileri iki bölüme bölmek için PyTrainTestSplit adlı bir saklı yordam oluşturun: nyctaxi_sample_training ve nyctaxi_sample_testing.
Oluşturmak için aşağıdaki kodu çalıştırın:
DROP PROCEDURE IF EXISTS PyTrainTestSplit; GO CREATE PROCEDURE [dbo].[PyTrainTestSplit] (@pct int) AS DROP TABLE IF EXISTS dbo.nyctaxi_sample_training SELECT * into nyctaxi_sample_training FROM nyctaxi_sample WHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license) as int)) % 100) < @pct DROP TABLE IF EXISTS dbo.nyctaxi_sample_testing SELECT * into nyctaxi_sample_testing FROM nyctaxi_sample WHERE (ABS(CAST(BINARY_CHECKSUM(medallion,hack_license) as int)) % 100) > @pct GOÖzel bölme kullanarak verilerinizi bölmek için saklı yordamı çalıştırın ve eğitim kümesine ayrılacak veri yüzdesini temsil eden bir tamsayı parametresi sağlayın. Örneğin, aşağıdaki ifade verilerin %60'ını eğitim kümesine ayırır.
EXEC PyTrainTestSplit 60 GO
Lojistik regresyon modeli oluşturma
Veriler hazırlandıktan sonra modeli eğitmek için kullanabilirsiniz. Python kodu çalıştıran saklı yordamı, eğitim verileri tablosunu girdi olarak alıp çağırarak bunu yaparsınız. Bu öğreticide, her ikisi de ikili sınıflandırma modeli olan iki model oluşturursunuz:
- PyTrainScikit saklanmış yordamı, scikit-learn paketini kullanarak bir ipucu tahmin modeli oluşturur.
- TrainTipPredictionModelRxPy saklı yordamı, revoscalepy paketini kullanarak bir ipucu tahmin modeli oluşturur.
Her saklı yordam, lojistik regresyon modeli oluşturmak ve eğitmek için sağladığınız giriş verilerini kullanır. Tüm Python kodu, sistem saklı yordamına sp_execute_external_script ile sarmalanır.
Modeli yeni verilerde yeniden eğitmenizi kolaylaştırmak için çağrıyı sp_execute_external_script başka bir saklı yordama sarmalar ve yeni eğitim verilerini parametre olarak geçirirsiniz. Bu bölümde bu işlemde size yol gösterilir.
PyTrainScikit
Management Studio'da yeni bir Sorgu penceresi açın ve PyTrainScikit saklı yordamını oluşturmak için aşağıdaki deyimi çalıştırın. Saklı yordam giriş verilerinin tanımını içerdiğinden giriş sorgusu sağlamanız gerekmez.
DROP PROCEDURE IF EXISTS PyTrainScikit; GO CREATE PROCEDURE [dbo].[PyTrainScikit] (@trained_model varbinary(max) OUTPUT) AS BEGIN EXEC sp_execute_external_script @language = N'Python', @script = N' import numpy import pickle from sklearn.linear_model import LogisticRegression ##Create SciKit-Learn logistic regression model X = InputDataSet[["passenger_count", "trip_distance", "trip_time_in_secs", "direct_distance"]] y = numpy.ravel(InputDataSet[["tipped"]]) SKLalgo = LogisticRegression() logitObj = SKLalgo.fit(X, y) ##Serialize model trained_model = pickle.dumps(logitObj) ', @input_data_1 = N' select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance, dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance from nyctaxi_sample_training ', @input_data_1_name = N'InputDataSet', @params = N'@trained_model varbinary(max) OUTPUT', @trained_model = @trained_model OUTPUT; ; END; GOEğitilen modeli nyc_taxi_models tablosuna eklemek için aşağıdaki SQL deyimlerini yürütün.
DECLARE @model VARBINARY(MAX); EXEC PyTrainScikit @model OUTPUT; INSERT INTO nyc_taxi_models (name, model) VALUES('SciKit_model', @model);Verilerin işlenmesi ve modelin uygun şekilde tamamlanması birkaç dakika sürebilir. Python'ın stdout akışına aktarılacak iletiler, Management Studio'nun İletiler penceresinde görüntülenir. Örneğin:
STDOUT message(s) from external script: C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepyTablo nyc_taxi_models açın. Sütun modelinde seri hale getirilmiş modeli içeren yeni bir satırın eklendiğini görebilirsiniz.
SciKit_model 0x800363736B6C6561726E2E6C696E6561....
TrainTipPredictionModelRxPy
Bu saklı yordam revoscalepy Python paketini kullanır. R dilinin RevoScaleR paketi için sağlananlara benzer nesneler, dönüştürme ve algoritmalar içerir.
Revoscalepy kullanarak uzak işlem bağlamları oluşturabilir, işlem bağlamları arasında veri taşıyabilir, verileri dönüştürebilir ve lojistik ve doğrusal regresyon, karar ağaçları gibi popüler algoritmaları kullanarak tahmine dayalı modelleri eğitebilirsiniz. Daha fazla bilgi için bkz. SQL Server'da revoscalepy modülü ve revoscalepy işlev başvurusu.
Management Studio'da yeni bir Sorgu penceresi açın ve Aşağıdaki deyimi çalıştırarak TrainTipPredictionModelRxPy saklı yordamını oluşturun. Saklı yordam giriş verilerinin tanımını zaten içerdiğinden, giriş sorgusu sağlamanız gerekmez.
DROP PROCEDURE IF EXISTS TrainTipPredictionModelRxPy; GO CREATE PROCEDURE [dbo].[TrainTipPredictionModelRxPy] (@trained_model varbinary(max) OUTPUT) AS BEGIN EXEC sp_execute_external_script @language = N'Python', @script = N' import numpy import pickle from revoscalepy.functions.RxLogit import rx_logit ## Create a logistic regression model using rx_logit function from revoscalepy package logitObj = rx_logit("tipped ~ passenger_count + trip_distance + trip_time_in_secs + direct_distance", data = InputDataSet); ## Serialize model trained_model = pickle.dumps(logitObj) ', @input_data_1 = N' select tipped, fare_amount, passenger_count, trip_time_in_secs, trip_distance, dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) as direct_distance from nyctaxi_sample_training ', @input_data_1_name = N'InputDataSet', @params = N'@trained_model varbinary(max) OUTPUT', @trained_model = @trained_model OUTPUT; ; END; GOBu saklı yordam, model eğitiminin bir parçası olarak aşağıdaki adımları gerçekleştirir:
- SELECT sorgusu, teslim alma ve bırakma konumları arasındaki doğrudan mesafeyi hesaplamak için özel skaler işlev fnCalculateDistance'ı uygular. Sorgunun sonuçları varsayılan Python giriş değişkeninde
InputDatasetdepolanır. - İkili değişken tippedetiketi veya sonuç sütunu olarak kullanılır ve model şu özellik sütunları kullanılarak uygundur: passenger_count, trip_distance, trip_time_in_secs ve direct_distance.
- Eğitilen model serileştirilir ve Python değişkeninde
logitObjdepolanır. T-SQL anahtar sözcüğü OUTPUT'i ekleyerek, değişkenini saklı yordamın çıkışı olarak ekleyebilirsiniz. Sonraki adımda, bu değişken modelin ikili kodunu nyc_taxi_models bir veritabanı tablosuna eklemek için kullanılır. Bu mekanizma, modelleri depolamayı ve yeniden kullanmayı kolaylaştırır.
- SELECT sorgusu, teslim alma ve bırakma konumları arasındaki doğrudan mesafeyi hesaplamak için özel skaler işlev fnCalculateDistance'ı uygular. Sorgunun sonuçları varsayılan Python giriş değişkeninde
Eğitilmiş revoscalepy modelini tablo nyc_taxi_models eklemek için saklanan yordamı aşağıda gösterildiği şekilde çalıştırın.
DECLARE @model VARBINARY(MAX); EXEC TrainTipPredictionModelRxPy @model OUTPUT; INSERT INTO nyc_taxi_models (name, model) VALUES('revoscalepy_model', @model);Verilerin işlenmesi ve modelin uygun şekilde işlenmesi biraz zaman alabilir. Python'ın stdout akışına aktarılacak iletiler, Management Studio'nun İletiler penceresinde görüntülenir. Örneğin:
STDOUT message(s) from external script: C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepyTablo nyc_taxi_models açın. Sütun modelinde seri hale getirilmiş modeli içeren yeni bir satırın eklendiğini görebilirsiniz.
revoscalepy_model 0x8003637265766F7363616c....
Bu eğitimin sonraki bölümünde, tahminler yapmak için eğitilen modelleri kullanacaksınız.
Sonraki Adımlar
Bu makalede şunları yapacaksınız:
- SQL saklı yordamı kullanarak model oluşturma ve eğitme
- Eğitilen modeli sql tablosuna kaydetme