この記事の目的
この記事では、
Windows MLのチュートリアルの実施メモを残すこと
を目的としています。
元ネタは、Microsoft Docsに投稿されている「New York taxi fares」です。
docs.microsoft.com
本題
★問題の概要
問題は、「ニューヨークで走っているタクシーの利用料金の予測」です。
ニューヨークでは、基本的に、走行距離に比例して値段が変動します。
しかし、タクシー会社によっては、乗客の数や、クレジットカード払いなど様々な要因によって、請求額が変更されるらしいです。
★機械学習タスクの選択
タクシーの利用料金を予測するためにまずやらなければならないことは、適切なmachine learning task(機械学習タスク)を選択することです!
教師データに含まれる様々な要因に基づき、実際の根大を予想しようとしているため、今回は、Regression task(回帰タスク)を選択します。
----
Regression Taskとは・・・
関連する項目のセットから、特定の項目の値を予測するタスク。
例)株価予測
----
詳しくはここ
https://docs.microsoft.com/en-us/dotnet/machine-learning/resources/tasks#regression
★アプリケーションの作成
利用する機械学習タスクが決まったので、操作対象のアプリケーションを作成します。アプリケーションは、,NET Coreをターゲットとしたコンソールアプリを作成します。
こんな感じで作りました。
いきなり名前を無視してしまった…まぁいいか。
次に、Dataフォルダをプロジェクトに作成します。教師データを格納する場所ですね。
最後に、Microsoft.MLをNugetからインストールします。
これをインストールして、
こうなりました。確かに、依存関係にMicrosoft MLが追加されました。
★教師データの準備
githubのリポジトリから、教師データをダウンロードします。
github.com
【Download】ボタンで右クリックしないと、対象ファイルを取得できない仕様に若干手こずりました(/・ω・)/
ダウンロードした2つのファイルを前のステップで作成したDataフォルダに格納します。
プロジェクトに追加されていることも確認できました!
出力ディレクトリーにコピーする設定も忘れずに行う!
今追加したデータの中で、今後のステップで利用する項目は以下の通りです。
+ vendor_id:タクシー会社のID
+ rate_code:乗車比率?←ちょっとよくわからない
+ passenger_count:乗客の数
+ trip_time_in_secs:乗車時間
+ trip_distance:移動距離
+ payment_type:支払い方法
+ fare_amount:料金
★dataクラスの作成
予測に使うデータ用のクラスを作成します。
チュートリアルに従い、「TaxiTrip」クラスを作成していきます。
コードは以下の通りです。(長いので一部だけ抜粋)
>|cs|
[Column("0")]
public string VendorId;
[Column("1")]
public string RateCode;
[Column("2")]
public float PassengerCount;
|
次に、予測結果を出力する先のクラスも作成します。
(TaxiTripクラスファイルの中に定義していますが、別のファイルに定義しても問題ないと思います。)
>|cs|
public class TaxiTripFarePrediction
{
[ColumnName("Score")]
public float FareAmount;
}
|
ColumnNameをScoreとしています。
Score列は特別な列名で、ML.NETでは、予測結果を格納するために利用されます。
★モデルの定義
いよいよ、先ほど作成したモデルクラスに、データを流し込む処理を実装します。
チュートリアルの手順に従い、Program.csに読み込み専用変数を定義します。
これらは、Dataフォルダに格納したCSVファイルのパスを格納するために利用します。
★学習処理の作成
いっぱいUSINGに追加します!
>|cs|
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Models;
using Microsoft.ML.Trainers;
using Microsoft.ML.Transforms;
|
そして、いよいよモデルの作成処理を実装していきます!
ここからは、あらかじめ用意しておいたコードベースにメモを残しておきます。
※なお、コンソールアプリのエントリポイント(Mainメソッド)を非同期にする都合で、言語バージョンをC#7.1以上に設定する必要があります。
コードも長くなるので、チュートリアルの以下の項目を実施した後のコードを下に示します
★データのロードと整形
★学習アルゴリズムの選択
★学習実行
★モデルの評価
★学習済みモデルを使った予測の実施