STEP 2. 機械学習の基礎
2.6 SQL Server のデータを利用してモデルを作成
力変数に代入することで、結果をスクリプトの外に出力できるようになり、それを INSERT ステ ートメントでテーブルに格納しています。SQL Server の INSERT ステートメントでは、値を指 定する VALUES の部分にストアド プロシージャ(EXEC で記述)を指定することができ、スト アド プロシージャの出力結果(OutputDataSet)をもとに、テーブルにデータを INSERT する ことができます。
なお、ここで作成した iris テーブルは、列名に「Sepal.Length」や「Sepal.Width」など、R の iris データセットの列名と同じものを利用しましたが、任意の列名でもかまいません。同じ名前に することで、ここまで説明してきた R のスクリプトを、以降のスクリプトでもそのまま利用でき るようになるので、ここでは同じ名前の列名にしています。
SQL Server のデータを利用してモデルを作成
次に、SQL Server 上の iris テーブルを利用して、モデルを作成してみましょう。SQL Server の データを利用するには、@input_data_1 パラメーターに SELECT ステートメントを指定して、
次のように実行します(R スクリプトは、前の項で利用したものと 1 ヶ所違うだけです)。
-- @input_data_1 に SELECT ステートメントを指定して、data = InputDataSet に変更 EXEC sp_execute_external_script
@language = N'R' ,@script = N'
model1 <- rxDForest(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width ,data = InputDataSet, nTree = 10, reportProgress = 0)
df1 <- data.frame(Sepal.Length = 6.0 ,Sepal.Width = 2.2 ,Petal.Length = 5.0 ,Petal.Width = 1.5 ,Species = "dummy") print(rxPredict(model1, df1))
'
,@input_data_1 = N'SELECT * FROM iris'
予測結果
data = InputDataSet に変更
SELECTステートメント でirisテーブルを指定
1 2
前の項との違いは、rxDForest 関数の引数で「data=iris」を指定していた部分を「data=
InputDataSet」に変更しているだけです。@input_data_1 パラメーターで取得した結果は、
データ フレーム(data.frame)形式になっていて、既定では InputDataSet という変数名で利 用することができるので、このように利用できます。
rxPredict 関数での予測の結果は、前の項と同様、virginica または versicolor になります。
InputDataSet の名前を変更したい場合(@input_data_1_name)
InputDataSet という変数名は、変更することもできます。これを行うには、次のように
@input_data_1_name パラメーターに任意の名前を設定します。
-- @input_data_1_name に名前を指定 EXEC sp_execute_external_script @language = N'R'
,@script = N'
model1 <- rxDForest(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width ,data = iris_table, nTree = 10, reportProgress = 0)
df1 <- data.frame(Sepal.Length = 6.0 ,Sepal.Width = 2.2 ,Petal.Length = 5.0 ,Petal.Width = 1.5 ,Species = "dummy") print(rxPredict(model1, df1))
'
,@input_data_1 = N'SELECT * FROM iris' ,@input_data_1_name = N'iris_table'
ここでは、「@input_data_1_name = N'iris_table'」のように「iris_table」という名前を設 定しているので、R スクリプト内では「data=iris_table」と指定することができます。
以上のように、SQL Server 2017 の Machine Learning Services では、SQL Server のデータ を簡単に R スクリプトあるいは後述の Python スクリプトで利用することができるのが大きな 特徴であり、大きなメリットです(1 章で説明したように、データの取り込みスピードについても 抜群です)。