SQL Server 2017 In-Database Python を使ってみた
4月19日の Data Amp で SQL Server 2017 の Python Integration が正式に発表されました。これは SQL Server 2016 で機能追加された SQL Server 2016 R Services を SQL Server 2017 Machine Learning Services に拡張し、R に加えて Python による Advanced Analytics を利用可能にするという内容です。
そこで今回は Python を T-SQL を用いて実行する In-Database Python を試してみようと思います。
インストール
まずインストールです。
SQL Server 2017 CTP2.1 のセットアップで Machine Learning サービス(データベース内)にチェックを入れます。
そのままインストールを進めていくと、「Python のインストールに同意する」画面があらわれるので、承認ボタンをクリックすることで「次へ」ボタンを押すことができるようになります。
インストールが完了したら、サーバー構成オプションで「external script enabled オプション」を有効にしておきます。
|
CTP2.1 では RECONFIGURE WITH OVERRIDE が効かなかったのでインスタンスの再起動が必要でした。
また CTP 2.0 では既知の不具合があり、次のログインを作成する必要があります。
|
インプットとアウトプット
SELECT ステートメントの結果セットを sp_execute_external_script ストアドプロシージャの @input_data_1 で渡すと、Python スクリプト内で InputDataSet 予約変数で受けることができます。下のスクリプトから分かるように、この InputDataSet はデータフレームとして渡ってきます。
|
|
また Python スクリプト内の OutputDataSet 予約変数もデータフレームタイプを持ち、結果セットとしてT-SQLへ返すことができます。
|
簡単な機械学習の実行
これだけ分かれば大抵のことはできるでしょう。さっそく Python で機械学習を試してみましょう。
データは以前 関連記事「Azure Machine Learning Studio を使ってモデルをスクラッチから構築してみよう」で使った "Wine Data Set" を利用しました。
あらかじめこの Wine Data Set をダウンロードし、wine というテーブルにロードしておきます。インプットとして渡せるデータ型については参考リンク "Python Libraries and Data Types" を参照してください。
|
もともとこのデータセットは 3 つの分類種別を持っていて、今回使った Python の LogisticRegression モデルは多クラス分類に対応しているのですが、上述の関連記事では同じデータセットを 2 クラス分類の例として使用したので、ここでも 2 クラスのデータに絞ってモデルを構築してみました。
|
実行するとホールドアウト法によるスコアが 0.87 となりました。
|
今回は基本的な In-Database Python の操作を試してみました。Python を用いてゴリゴリデータ抽出・整形を行うところを、T-SQL の SELECT ステートメントで必要なデータだけを Python スクリプトに渡すことができるので便利だと感じました。
また今回は revoscalepy で提供されている強力な Python 関数を利用しませんでしたが、これらの関数を利用することで In-Database Python のスケーラビリティとパフォーマンスを Advanced Analytics の分野に利用できることは素晴らしいことだと思います。
N
参考リンク
Microsoft Machine Learning Services
/en-us/sql/advanced-analytics/r/r-services
Machine Learning Services with Python /en-us/sql/advanced-analytics/python/sql-server-python-services
Python Libraries and Data Types
/en-us/sql/advanced-analytics/python/python-libraries-and-data-types
Introducing revoscalepy
/en-us/sql/advanced-analytics/python/what-is-revoscalepy
関連記事
Azure Machine Learning Studio を使ってモデルをスクラッチから構築してみよう
https://blogs.msdn.microsoft.com/dataplatjp/2017/01/18/azure-machine-learning-studio/