モデル ビルダーを使用して多クラス分類モデルを構築し、健康検査中に検出されたレストラン違反のリスク レベルを分類する方法について説明します。
このチュートリアルでは、以下の内容を学習します。
- データを準備して理解する
- モデル ビルダー構成ファイルを作成する
- シナリオを選択する
- データベースからデータを読み込む
- モデルをトレーニングする
- モデルを評価する
- 予測にモデルを使用する
[前提条件]
前提条件とインストール手順の一覧については、 Model Builder インストール ガイドを参照してください。
モデル ビルダーの多クラス分類の概要
このサンプルでは、Model Builder で構築された機械学習モデルを使用して、正常性違反のリスクを分類する C# コンソール アプリケーションを作成します。 このチュートリアルのソース コードは 、dotnet/machinelearning-samples GitHub リポジトリにあります。
コンソール アプリケーションの作成
"RestaurantViolations" という 名前の C# コンソール アプリケーション を作成します。
データを準備して理解する
機械学習モデルのトレーニングと評価に使用されるデータ セットは、サンフランシスコ公共健康レストランの安全性スコアの元のデータ セットです。 便宜上、データセットは、モデルのトレーニングと予測に関連する列のみを含むように凝縮されています。 データセットの詳細については、次の Web サイトを参照してください。
Restaurant Safety Scores データセットをダウンロード し、解凍します。
データセットの各行には、保健省からの検査中に観察された違反に関する情報と、それらの違反が公衆衛生と安全に与える脅威のリスク評価が含まれています。
検査タイプ | 違反の説明 | RiskCategory |
---|---|---|
ルーチン - スケジュールなし | 食品接触面の清掃やサニタイズが不十分 | 中程度のリスク |
新しい所有権 | 危険度の高い vermin の侵入 | 高リスク |
ルーチン - スケジュールなし | 清潔で、適切に保管されていない布やサニタイザーが不十分な布を拭く | 低リスク |
- InspectionType: 検査の種類。 これは、新しい施設、定期的な検査、苦情検査、およびその他の多くの種類の初めての検査のいずれかになります。
- ViolationDescription: 検査中に検出された違反の説明。
- RiskCategory: 違反が公衆衛生と安全に与えるリスクの重大度。
label
は、予測する列です。 分類タスクを実行する場合、目標はカテゴリ (テキストまたは数値) を割り当てることです。 この分類シナリオでは、違反の重大度に低リスク、中リスク、または高リスクの値が割り当てられます。 したがって、 RiskCategory はラベルです。 features
は、label
を予測するためにモデルに与える入力です。 この場合、 InspectionType と ViolationDescription は 、RiskCategory を予測するための特徴または入力として使用されます。
モデル ビルダー構成ファイルの作成
モデル ビルダーをソリューションに初めて追加すると、 mbconfig
ファイルを作成するように求められます。 mbconfig
ファイルは、セッションを再度開くために Model Builder で行うすべての操作を追跡します。
- ソリューション エクスプローラーでRestaurantViolations プロジェクトを右クリックし、Add>Machine Learning Model を選択します。
mbconfig
プロジェクトに RestaurantViolationsPrediction という名前を付け、[追加] ボタンをクリックします。
シナリオを選択する
モデルをトレーニングするには、モデル ビルダーによって提供される利用可能な機械学習シナリオの一覧から選択します。 この場合、シナリオは データ分類です。
- このサンプルでは、タスクは多クラス分類です。 モデル ビルダーの シナリオ ステップで、 データ分類 シナリオを選択します。
データを読み込む
モデル ビルダーは、SQL Server データベースまたはローカル ファイルのデータを csv
、 tsv
、または txt
形式で受け入れます。
- モデル ビルダー ツールのデータ ステップで、データ ソースの種類の選択から SQL Server を 選択します。
- [ データ ソースの選択 ] ボタンを選択します。
- [ データ ソースの選択 ] ダイアログで、[ Microsoft SQL Server データベース ファイル] を選択します。
- [ 常にこの選択を使用 する] チェック ボックスをオフにし、[ 続行] をクリックします。
- [ 接続のプロパティ ] ダイアログで、[ 参照 ] を選択し、ダウンロードした RestaurantScores.mdfファイルを 選択します。
- [OK] を選択.
- [違反] を [テーブル] ドロップダウンから選択します。
- 「予測する列 (ラベル)」ドロップダウンで RiskCategory を選択します。
- [詳細データ] オプションでは、既定の選択のままにします。
- [ 次のステップ ] ボタンをクリックして、モデル ビルダーのトレーニング ステップに移動します。
モデルをトレーニングする
このチュートリアルで問題分類モデルをトレーニングするために使用される機械学習タスクは、多クラス分類です。 モデル トレーニング プロセス中、モデル ビルダーは、さまざまな多クラス分類アルゴリズムと設定を使用して個別のモデルをトレーニングし、データセットに最適なパフォーマンスモデルを見つけます。
モデルのトレーニングに必要な時間は、データの量に比例します。 モデル ビルダーでは、データ ソースのサイズに基づいて、 トレーニングする時間 (秒) の既定値が自動的に選択されます。
- モデル ビルダーは、 トレーニングする時間 (秒) の値を 60 秒に設定します。 トレーニング期間が長いほど、モデル ビルダーは、最適なモデルを検索する際に、より多くのアルゴリズムとパラメーターの組み合わせを調べることができます。
- [ トレーニングの開始] をクリックします。
トレーニング プロセス全体を通して、トレーニング ステップの Training results
セクションに進行状況データが表示されます。
- 状態には、トレーニング プロセスの完了状態が表示されます。
- [最適な精度] には、これまでにモデル ビルダーによって検出されたパフォーマンスの高いモデルの精度が表示されます。 精度が高いということは、モデルがテスト データでより正しく予測されたことを意味します。
- ベスト アルゴリズムには、これまでにモデル ビルダーによって検出されたパフォーマンスが最も高いアルゴリズムの名前が表示されます。
- 最後のアルゴリズムには、モデル ビルダーがモデルをトレーニングするために最後に使用したアルゴリズムの名前が表示されます。
トレーニングが完了すると、 mbconfig
ファイルには、トレーニング後に RestaurantViolationsPrediction.zip
と呼ばれる生成されたモデルと、それに 2 つの C# ファイルが含まれます。
- RestaurantViolationsPrediction.consumption.cs: このファイルには、モデルを読み込み、それを使用して予測エンジンを作成し、予測を返すパブリック メソッドがあります。
- RestaurantViolationsPrediction.training.cs: このファイルは、モデル ビルダーが使用したハイパーパラメーターを含む最適なモデルを構築するために作成されたトレーニング パイプラインで構成されます。
[ 次のステップ ] ボタンをクリックして、評価ステップに移動します。
モデルを評価する
トレーニング 手順の結果は、最高のパフォーマンスを持つ 1 つのモデルになります。 モデル ビルダー ツールの評価手順の [Best model]\(最適なモデル \) セクションには、[モデル ] エントリ で最もパフォーマンスの高いモデルによって使用されるアルゴリズムと、[ 精度] のそのモデルのメトリックが含まれます。
さらに、Visual Studio の [出力] ウィンドウには、上位のモデルとそのメトリックを含む概要テーブルがあります。
このセクションでは、1 つの予測を実行してモデルをテストすることもできます。 値を入力するテキスト ボックスが表示され、[ 予測 ] ボタンをクリックして最適なモデルから予測を取得できます。 既定では、これはデータセット内のランダムな行によって入力されます。
(省略可能) モデルを使用する
この手順には、モデルの使用に使用できるプロジェクト テンプレートがあります。 この手順は省略可能であり、モデルの提供方法に関するニーズに最も適した方法を選択できます。
- コンソール アプリ
- Web API
コンソール アプリ
コンソール アプリをソリューションに追加すると、プロジェクトに名前を付けるメッセージが表示されます。
コンソール プロジェクトにRestaurantViolationsPrediction_Consoleという名前を 付けます。
[ ソリューションに追加 ] をクリックして、プロジェクトを現在のソリューションに追加します。
アプリケーションを実行します。
プログラムによって生成される出力は、次のスニペットのようになります。
InspectionType: Routine - Unscheduled ViolationDescription: Moderate risk food holding temperature Predicted RiskCategory: Moderate Risk
Web API
Web API をソリューションに追加すると、プロジェクトに名前を付けるメッセージが表示されます。
Web API プロジェクトにRestaurantViolationsPrediction_API名前を 付けます。
[ ソリューションに追加] * をクリックして、プロジェクトを現在のソリューションに追加します。
アプリケーションを実行します。
PowerShell を開き、次のコードを入力します。PORT は、アプリケーションがリッスンしているポートです。
$body = @{ InspectionType="Reinspection/Followup" ViolationDescription="Inadequately cleaned or sanitized food contact surfaces" } Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
成功した場合、出力は次のテキストのようになります。 この出力には、予測された RiskCategory が 中程度のリスク であり、低 リスク、 高リスク、中リスクの各入力ラベルのスコアが含 まれています。
prediction score ---------- ----- Moderate Risk {0.055566575, 0.058012854, 0.88642055}
おめでとうございます! モデル ビルダーを使用して、健康違反のリスクを分類する機械学習モデルを正常に構築しました。 このチュートリアルのソース コードは 、dotnet/machinelearning-samples GitHub リポジトリにあります。
その他のリソース
このチュートリアルで説明されているトピックの詳細については、次のリソースを参照してください。
.NET