SQLServerでの機械学習





SQL Serverの内部MLツールキット



この記事はmtcarsを使用するプロシージャを作成する手順を説明し、手動変速機を搭載している車両の可能性を予測できるモデル(GLM)線形一般簡単に作成するために、Rに含まれるデータセット。2番目の手順は推定用です。最初の手順で作成されたモデルを呼び出して、新しいデータに基づいて一連の予測を出力します。



用語の説明



SQLは、データベースに送信される構造化クエリの言語です。



SQL Serverは、Microsoftのリレーショナルデータベースです。



Machine Learning Servicesは、データに対してPythonおよびRスクリプトを実行できるようにするSQLServerのコンポーネントです。



SQLのトリガーは、データベースの状態の変化に対応するためのメカニズムです。



スクリプトは、狭い範囲の、ほとんどの場合定期的なタスク用に設計された小さなプログラムです。



Rは、データ処理専用に作成されたプログラミング言語です。



SQLServerが機械学習に有益である理由SQLServerで



MLを使用することで利用できる利点のリストについて説明しましょう。



最も重要な理由の1つは、SQLコマンドとMLコードを共通の可視領域に保存できることです。これにより、2つのテクノロジーを最大限に活用できます。



もう1つの重要な理由はセキュリティです。条件付きデータベースサーバーが1つの場所にあり、その要求が別の場所から送信された場合、データが傍受される可能性があるためです。 DBMSカーネルがデータを格納し、コードを呼び出す場合、この問題を回避できます。



特に、SQL Serverは、提供されているライブラリとパフォーマンスの両方の観点から、Rプログラミング言語を適切にサポートしています。最新のベンチマークによると、データベースエンジンは、1秒あたり約100万のR予測を計算できます(リンク)。



SQLServerの状態を確認する



まず、Rの機械学習サービスと拡張機能が期待どおりに機能していることを確認しましょう。これを行うには、次のコードを実行します。



EXEC sp_execute_external_script @language = N'R'
, @script = N'
OutputDataSet <- data.frame(installed.packages()[,c("Package", ...;'
WITH result sets((Package NVARCHAR(255)
, Version NVARCHAR(100)...));


結果:







SQLコマンドを簡単に分析してみましょう。



1.  EXEC sp_execute_external_script @language = N'R'
ここでは、カーネルがR言語を処理する必要があることを定義します



2.  @script = N'OutputDataSet <- data.frame(installed...'
脚本 これは、Rコマンドの結果と同じ、後続の要求で処理できる特別な変数です。



3.  WITH result sets((Package NVARCHAR(255)..
再帰的なコンテンツ表示操作が使用されます 脚本テーブルの形で。



SQL ServerでMLを使用する例(リンク



モデルのトレーニングに使用するデータを格納するテーブルを作成します。



CREATE TABLE dbo.MTCars(
hp int NOT NULL,
...
wt decimal(10, 3) NOT NULL,
am int NOT NULL);


データを入力します。



INSERT INTO dbo.MTCars
EXEC sp_execute_external_script @language = N'R'
    , @script = N'MTCars <- mtcars;'
    , @input_data_1 = N''
    , @output_data_1_name = N'MTCars';


結果:







モデルを作成してトレーニングします。



CREATE PROCEDURE generate_GLM
... , @script = N'carsModel <- carsModel <- glm(... data = MTCarsData, ...;
        trained_model <- ...'
    , @input_data_1 = N'SELECT hp, wt, am FROM MTCars'
    , @input_data_1_name = N'MTCarsData'
    ...;


この段階で、RがSQL Serverエンジンでデータを受信する方法に焦点を当てたいと思います。@ input_data_1はテーブルの列であり、コードでは変数@ input_data_1_nameとして表され



ます。モデルのテーブルを作成します。



CREATE TABLE GLM_models (
    model_name varchar(30) not null default('default model') primary key,
    model varbinary(max) not null
);


モデルを保存します。



INSERT INTO GLM_models(model)
EXEC generate_GLM;


結果:







SQL Serverは、トレーニング済みモデルをテーブルにロードして、後ですばやく再利用できるようにします。



分析用のデータが保存されるテーブルを作成します。



CREATE TABLE dbo.NewMTCars(
    hp INT NOT NULL
    , wt DECIMAL (10,3) NOT NULL
    , am INT NULL)


必要な範囲内のランダムデータを入力します。




INSERT INTO dbo.NewMTCars(hp, wt) VALUES (110, 2.634)
INSERT INTO dbo.NewMTCars(hp, wt) VALUES (72, 3.435)
INSERT INTO dbo.NewMTCars(hp, wt) VALUES (220, 5.220)
INSERT INTO dbo.NewMTCars(hp, wt) VALUES (120, 2.800)


結果:







新しいデータの結果予測します。



DECLARE @glmmodel varbinary(max) = ...
    ...    , @script = N'
            --     
            '
   --    ;


結果:







predicated_amの値が1に近いほど、車が手動で送信される可能性が高くなります。



結論



この例に加えて、データ処理の機械学習を使用して、有用な情報をノイズから分離したり、列間の依存関係を見つけたりすることができます。



上記の機能に加えて、より高度な予測方法を適用し、次のように新しい情報が着信するたびに起動するトリガーを設定できます。



CREATE TRIGGER `add_car` AFTER INSERT ON `NewMTCars `


…予測手順を適用します。



All Articles