R チュートリアル:モデルのトレーニングと保存
適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Managed Instance
全 5 回からなるこのチュートリアル シリーズの第 4 回では、R を使用して機械学習モデルをトレーニングする方法について説明します。前回のチュートリアルで作成したデータ機能を使用してモデルをトレーニングし、トレーニング済みのモデルを SQL Server テーブルに保存します。 この場合、R パッケージは R Services (データベース内)と共に既にインストールされているため、SQL からすべてを実行できます。
この記事では、次のことを行います。
- SQL ストアド プロシージャを使用してモデルを作成し、トレーニングする
- トレーニング済みのモデルを SQL テーブルに保存する
パート 1 では、前提条件をインストールしてサンプル データベースを復元しました。
第 2 回 では、サンプル データを確認し、いくつかのプロットを生成しました。
第 3 回 では、Transact-SQL 関数を使用して生データから特徴を作成する方法を学習しました。 その後、その関数をストアド プロシージャから呼び出し、機能の値を含むテーブルを作成しました。
第 5 回 では、第 4 回でトレーニングして保存したモデルを運用化する方法について説明します。
ストアド プロシージャを作成する
T-SQL から R を呼び出すときは、システムストアドプロシージャ sp_execute_external_script を使用します。 ただし、モデルの再トレーニングなど、頻繁に繰り返すプロセスでは、別のストアド プロシージャに sp_execute_external_script
への呼び出しをカプセル化する方が簡単です。
Management Studio で、新しい [クエリ] ウィンドウを開きます。
次のステートメントを実行して、ストアド プロシージャ RTrainLogitModel を作成します。 このストアド プロシージャでは、入力データを定義し、glm を使用して、ロジスティック回帰モデルを作成します。
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
モデルをテストするために一部のデータが残っていることを確認するために、トレーニング目的で、データの70% がタクシー データ テーブルからランダムに選択されます。
SELECT クエリによって、カスタムのスカラー関数 fnCalculateDistance が使用され、乗車位置と降車位置直線距離が計算されます。 クエリの結果は R の既定の入力変数
InputDataset
に格納されます。R スクリプトは、R 関数 glm を呼び出して、ロジスティック回帰モデルを作成します。
二項変数 tipped がラベルまたは結果列として使用され、モデルは、passenger_count、trip_distance、trip_time_in_secs、direct_distance の機能列を使用して調整されます。
R 変数
logitObj
に保存されたトレーニング済みのモデルはシリアル化され、出力パラメーターとして返されます。
ストアド プロシージャを使用した R モデルのトレーニングとデプロイ
ストアド プロシージャには、既に入力データの定義が含まれているため、入力クエリを提供する必要はありません。
R モデルをトレーニングしてデプロイするには、ストアド プロシージャを呼び出してデータベース テーブル nyc_taxi_models に挿入します。これにより、将来の予測に使用できるようになります。
DECLARE @model VARBINARY(MAX); EXEC RTrainLogitModel @model OUTPUT; INSERT INTO nyc_taxi_models (name, model) VALUES('RTrainLogit_model', @model);
Management Studio の [メッセージ] ウィンドウに、次のように R の stdout ストリームにパイプ処理されるメッセージが表示されていないか注意してください。
"外部スクリプトからの STDOUT メッセージ:読み取られる行:1193025、処理された行数の合計:1193025、合計チャンク時間:0.093 秒"
ステートメントが完了したら、テーブル nyc_taxi_models を開きます。 データの処理とモデルの調整には、しばらく時間がかかる場合があります。
[モデル] 列にシリアル化されたモデル、および [名前] 列にモデル名 RTrainLogit_model を含む、1 つの新しい行が追加されていることがわかります。
model name ---------------------------- ------------------ 0x580A00000002000302020.... RTrainLogit_model
次回のチュートリアルでは、トレーニング済みのモデルを使用して予測を作成します。
次のステップ
この記事では、次の内容について説明します。
- SQL ストアド プロシージャを使用してモデルを作成し、トレーニングした
- トレーニング済みのモデルを SQL テーブルに保存した