次の方法で共有


Machine Learning Studio (クラシック) で Python Machine Learning スクリプトを実行する

適用対象:適用対象。Machine Learning Studio (クラシック) は適用されません。Azure Machine Learning

重要

Machine Learning Studio (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日付までに Azure Machine Learning に移行することをお勧めします。

2021 年 12 月 1 日以降、新しい Machine Learning Studio (クラシック) リソースは作成できません。 2024 年 8 月 31 日まで、既存の Machine Learning Studio (クラシック) リソースを引き続き使用できます。

ML Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。

Python は、多くのデータ サイエンティストにとって貴重なツールです。 これは、データの探索、特徴の抽出、モデルのトレーニングと検証、デプロイなど、一般的な機械学習ワークフローのすべての段階で使用されます。

この記事では、Python スクリプトの実行モジュールを使用して、Machine Learning Studio (クラシック) の実験や Web サービスで Python コードを使用する方法について説明します。

Python スクリプトの実行モジュールの使用

Studio (クラシック) の Python への主なインターフェイスは、 Python スクリプトの実行 モジュールを使用することです。 R スクリプトの実行 モジュールと同様に、最大 3 つの入力を受け入れ、最大 2 つの出力を生成します。 Python コードは、azureml_main という特別に指定されたエントリポイント関数によってパラメーター ボックスに入力されます。

Python スクリプト モジュールの実行

モジュール パラメーター ボックスのサンプル Python コード

入力パラメーター

Python モジュールへの入力は、Pandas DataFrames として公開されます。 azureml_main 関数は、最大 2 つの省略可能な Pandas DataFrames をパラメーターとして受け取ります。

入力ポートと関数パラメーター間のマッピングは位置指定されます。

  • 最初に接続された入力ポートは、関数の最初のパラメーターにマッピングされます。
  • 2 番目の入力は (接続されている場合)、関数の 2 番目のパラメーターにマッピングされます。
  • 3 番目の入力は、 追加の Python モジュールをインポートするために使用されます。

入力ポートが azureml_main 関数のパラメーターにマッピングされる方法の詳細なセマンティクスを、以下に示します。

入力ポートの構成と結果の Python 署名の表

出力の戻り値

azureml_main関数は、タプル、リスト、NumPy 配列などの Python シーケンスにパッケージ化された単一の Pandas DataFrame を返す必要があります。 このシーケンスの最初の要素は、モジュールの最初の出力ポートに返されます。 モジュールの 2 番目の出力ポートは 視覚化 に使用され、戻り値は必要ありません。 このスキームを次に示します。

入力ポートをパラメーターにマッピングし、戻り値を出力ポートにマッピングする

入力と出力のデータ型の変換

Studio データセットは Panda DataFrames と同じではありません。 そのため、Studio (クラシック) の入力データセットは Pandas DataFrame に変換され、出力の DataFrame は元の Studio (クラシック) データセットに変換されます。 この変換プロセス中には、次の変換も実行されます。

Python データ型 Studio の翻訳手順
文字列と数値 翻訳そのまま
Pandas 'NA' 『欠損値』と翻訳される
インデックス ベクター サポートされていません*
文字列以外の列名 列名で str を呼び出す
重複する列名 数値サフィックス (1)、(2)、(3) などを追加します。

* Python 関数のすべての入力データ フレームには、常に 0 から行数から 1 を引いた 64 ビットの数値インデックスがあります

既存の Python スクリプト モジュールをインポートする

Python の実行に使用されるバックエンドは、広く使用されている科学的 Python ディストリビューションである Anaconda に基づいています。 データ中心のワークロードで最もよく使用される Python パッケージが 200 個近く付属しています。 Studio (クラシック) は、外部ライブラリのインストールと管理のための Pip や Conda などのパッケージ管理システムの使用を、現時点ではサポートしていません。 追加のライブラリを組み込む必要がある場合は、ガイドとして次のシナリオを使用してください。

一般的な使用例は、既存の Python スクリプトを Studio (クラシック) の実験に組み込むことです。 Python スクリプトの実行モジュールは、3 番目の入力ポートで Python モジュールを含む zip ファイルを受け入れます。 このファイルは実行時に実行フレームワークによって解凍され、その内容が Python インタープリターのライブラリ パスに追加されます。 azureml_main エントリ ポイント関数がこれらのモジュールを直接インポートできます。

たとえば、単純な "Hello, World" 関数を含む Hello.py ファイルについて考えてみます。

Hello.py ファイル内のユーザー定義関数

次に、Hello.py を含む Hello.zip ファイルを作成します。

ユーザー定義の Python コードを含む Zip ファイル

この zip ファイルをデータセットとして Studio (クラシック) にアップロードします。 次の図に示すように、Python スクリプトの実行モジュールの 3 番目の入力ポートにアタッチして、Hello.zip ファイル内の Python コードを使用する実験を作成して 実行 します。

Python スクリプトの実行モジュールへの入力として Hello.zip を使用したサンプル実験

zip ファイルとしてアップロードされたユーザー定義の Python コード

モジュール出力は、zip ファイルがパッケージ解除されたこと、および関数 print_hello が実行されたことを示しています。

ユーザー定義関数を示すモジュール出力

Azure Storage BLOB へのアクセス

Azure BLOB Storage アカウントに保存されているデータには、次の手順を使用してアクセスできます。

  1. Python 用 Azure Blob Storage パッケージをローカルにダウンロードします。
  2. この zip ファイルを Studio (クラシック) ワークスペースにデータセットとしてアップロードします。
  3. protocol='http' を使用して BlobService オブジェクトを作成する
from azure.storage.blob import BlockBlobService

# Create the BlockBlockService that is used to call the Blob service for the storage account
block_blob_service = BlockBlobService(account_name='account_name', account_key='account_key', protocol='http')
  1. [ストレージ構成] 設定タブで [安全な転送が必要] を無効にする

Azure portal でセキュリティで保護された転送を無効にする

Python スクリプトの操作

スコア付け実験で使用される Python スクリプトの実行 モジュールは、Web サービスとして発行されるときに呼び出されます。 たとえば、次の図は、1 つの Python 式を評価するコードを含む、スコア付け実験を示しています。

Web サービスの Studio ワークスペース

Python Pandas 式

この実験から作成される Web サービスは、以下の操作を実行します。

  1. Python 式を入力として (文字列として) 受け取る
  2. Python 式を Python インタープリターに送信する
  3. 式と評価結果の両方を含むテーブルを返す。

視覚化を扱うこと

MatplotLib を使用して作成されたプロットは、 Python スクリプトの実行によって返されます。 R の場合のようにプロットが自動的に画像にリダイレクトされることはありません。そのため、ユーザーはプロットを PNG ファイルに明示的に保存する必要があります。

MatplotLib からイメージを生成するには、次の手順を実行する必要があります。

  1. 既定の Qt ベース レンダラーから "AGG" にバックエンドを切り替える。
  2. 新しい figure オブジェクトを作成する。
  3. 軸を取得し、そこにすべてのプロットを生成する。
  4. PNG ファイルに図を保存する。

次の図に、Pandas の scatter_matrix 関数を使用して散布図マトリックスを作成するプロセスを示します。

MatplotLib の図形を画像に保存するコード

Python スクリプトの実行モジュールの視覚化をクリックして、図を表示します

Python コードを使用したサンプル実験のプロットの視覚化

さまざまなイメージに保存することで複数の図を返すことができます。 Studio (クラシック) ランタイムは、すべてのイメージを取得して、視覚化のために連結します。

高度な例

Studio (クラシック) にインストールされた Anaconda 環境には、NumPy、SciPy、Scikits-Learn などの共通のパッケージが含まれています。 これらのパッケージは、機械学習パイプラインでのデータ処理のために効果的に使用できます。

たとえば、次の実験とスクリプトは、データセットの特徴の重要度スコアを計算する、Scikits-Learn のアンサンブル学習者の使い方を示しています。 このスコアは、別のモデルに供給する前に、監視対象の特徴の選択を実行するために使用できます。

以下に、重要度スコアを計算し、そのスコアに基づいて特徴を順位付けるために使用される Python 関数を示します。

スコア別に特徴をランク付けする関数

次の実験では、Machine Learning Studio (クラシック) の "ピマ インディアン糖尿病" データセットにおける特徴の重要度スコアを計算して返します。

Python を使用して Pima Indian Diabetes データセットの特徴をランク付けする実験

Python スクリプトの実行モジュールの出力の視覚化

制限事項

Python スクリプトの実行モジュールには、現在、次の制限があります。

サンドボックス化された実行

Python ランタイムは、現在セキュリティで保護されているため、永続的な方法でのネットワークやローカル ファイル システムへのアクセスを許可しません。 ローカルに保存されているすべてのファイルは分離され、モジュールが終了すると削除されます。 Python コードは、現在のディレクトリとそのサブディレクトリを除く、実行中のコンピューターのほとんどのディレクトリにアクセスできません。

高度な開発とデバッグ サポートの欠如

Python モジュールは、現在、Intellisense やデバッグなどの IDE 機能をサポートしていません。 また、実行時にモジュールが失敗する場合は、Python の完全なスタック トレースを使用できます。 ただし、モジュールの出力ログで参照する必要があります。 現在のところ、IPython などの環境で Python スクリプトの開発とデバッグを行い、そのコードをモジュールにインポートすることをお勧めしています。

1 つのデータ フレームの出力

Python のエントリ ポイントは、1 つのデータ フレームのみを出力として返すことができます。 トレーニング済みのモデルなどの任意の Python オブジェクトを元の Studio (クラシック) ランタイムに直接返すことは現在できません。 同じ制限がある R スクリプトの実行と同様に、多くの場合、オブジェクトをバイト配列に取り込み、データ フレーム内でそれを返す可能性があります。

Python のインストールをカスタマイズできない

現時点では、カスタムの Python モジュールを追加する唯一の方法は、前に説明した zip ファイルのメカニズムを使用することです。 これは、小さなモジュールに適していますが、大きなモジュール (特にネイティブ DLL を使用するモジュール) や大量のモジュールでは、使用が面倒です。

次のステップ

詳細については、 Python デベロッパー センターを参照してください。