ML.NETの 回帰タスク のチュートリアル
チュートリアルをやったメモ です
---
お題:
タクシー運賃を予測する回帰モデルを構築して価格を予測しましょう
ML.NET を使用して、料金 (具体的にはニューヨーク市のタクシー運賃) を予測する回帰モデルを構築する方法を示します。
>チュートリアル: 回帰を使用して価格を予測する - ML.NET | Microsoft Learn
作るもの:
C# コンソールアプリ(.NET6)
材料:
taxi-fare-train.csv データ セット と、
taxi-fare-test.csv テストデータ セット
ここからダウンロードしてプロジェクトに追加する。
データセットの内容:
(データセットのCSVファイルの ヘッダ列名 と、そのデータの意味)
taxi-fare-train.csv
提供されているデータ セットには、次の列が含まれます。
table:データセットの内容
1. vendor_id タクシー会社の名前
2. rate_code タクシー旅行のレートの種類
3. passenger_count 旅行の乗客数
4. trip_time_in_secs 旅行の所要時間
5. trip_distance 旅行の距離
6. payment_type 支払い方法 …現金またはクレジット カード
7. fare_amount 支払った合計タクシー運賃
---
(用語)
機械学習の「モデル」とは?
→ データの特徴 をトレーニングして「ラベル」の値を予測する事ができるようになったもの です
(イメージ)機械学習で
特徴として与えたデータ項目の値の組み合わせを引数として受け取って
ラベル の値を求めて戻り値として返す「関数(メソッド)」 を作ってくれる? みたいな感じです
それで、
そのトレーニングした[モデル]を使えば、
引数にするデータが「未知の組み合わせ」の ときの「ラベルの値」を求められる。
(→ 値を予測できる、ということ)
機械学習において「予測する(したい)データ」の事を ラベル と呼ぶ (らしい)
https://www.softbank.jp/biz/solutions/generative-ai/ai-glossary/supervised-learning/#:~:text=教師あり学習と,学習させる手法です%E3%80%82
---
(本題)
(..チュートリアルの お題 でやりたい事を一旦 再確認する)
→ タクシー運賃を予測したい。
つまりやる事としては 、
回帰モデルの機械学習を使って「`タクシー運賃を予測する モデル 」を作る。ということ
チュートリアルでやる事の流れのイメージとしては (↓)こんな感じ
①:過去の「1回あたりのタクシー乗車時の記録」のデータを@学習したモデルを生成]する。
②:トレーニングしたモデルを使って、引数(タクシー乗車条件)の組み合わせが「異なるパターン」の「支払い額」の[値を予測]`する。
→ ③:(モデルの生成後、)生成したモデルを評価する
--
モデルとは?
→?
「学習」の成果物
データセットのデータでモデルをトレーニングして 生成 する 。
今回のお題でいうと、やることは
機械学習によって
データセットの1~6列目のデータから7列目の値を求めて出力する 関数(メソッド)を作る(生成する)
みたいな感じです
データセットのデータを使って「モデル」をトレーニング(学習させる)する。
トレーニングしたモデル
→ トレーニングしたモデル とは、予測したい値を返す「関数」みたいなものです
トレーニングによってモデルは「関数」をつくる
インプット(引数)として「予測したい条件」のときの各データ項目の値を入力すると、
アウトプット(戻り値)として
「予測したい[ラベル]の値」(→ タクシー運賃)を予測して値を返してくれる
→ モデルを生成することで、その関数を使って
プログラム上でメソッドとして呼び出せるようになる、みたいな感じになります
つまり、 トレーニングするとは一体何をトレーニングするのかというと、
学習に使う各データ項目の値(の組み合わせ)を手掛かりに、その条件の時の「ラベルの値」を予測する関数をトレーニングする みたいな感じか
--
(疑問)
なにかの値(ラベル)を「予測」って、
「予測する」って具体的にはどうやるのか?(コード的にはどんな実装 的な疑問)
→ 予測したい「とき」のシチュエーション? 条件?を、モデル に渡す引数の組み合わせでうまく表現してね、ということ
予測の精度 ってどうなのか
(何も分からない)
きっとそのあたり(精度とかの調整)こそが、機械学習とかの超難しいところなんだと思う
たぶんみんな、「モデルに渡す引数の組み合わせをいかにうまく調整していくか」がとにかく課題なのでは(知らない)
うまく学習する(予測の精度を上げる?)には どうしたらいいのか?
例えば、データセットの項目を見直す とか?
..
あと例えば、生成したモデルを「評価」したスコアを参考にする? とか
?
--
↓
(チュートリアルの 続き)
モデルを評価する
https://learn.microsoft.com/ja-jp/dotnet/machine-learning/tutorials/predict-prices#evaluate-the-model
LoadFromTextFile() メソッドを使って、テスト データセットを読み込みます。
テストデータセット とは、
データセットの一部を品質チェックとして使って、モデルを評価します。←この分のデータのことです
評価メトリックを生成します。
RSquared スコア
回帰モデルの 評価メトリックの1 つ
RSquared は 0 から 1 までの値を取ります。
RSquared 値が 1 に近づくほど、優れたモデルになります。
RMS (Root Mean Squared) スコア
回帰モデルの評価メトリックの 1 つです。 RMS が低いほど、優れたモデルになります。
,,(↓)チュートリアルをやってみた結果
(キャプチャ)チュートリアルで作ったPGの実行結果
画面の内容:チュートリアルで作った モデル を評価した「スコア」を表示しています
RSquared値 → 0.89
RMS値 → 3.3
https://scrapbox.io/files/6779d8a90aa16240d2801a78.png
これは、できたモデルはスコア的にはあんまりよくない感じ ってこと なのか..?(結局よくわかってない)
作ったもの
チュートリアルの成果物のプログラム のソース
TaxiFarePrediction.zip
(チュートリアルは以上)
---
データセットのデータ項目の「特徴」の選び方、ポイント
4. trip_time_in_secs 旅行の所要時間 ←これは「特徴」にしません
旅行が終わる前に、旅行の運賃を予測したいと考えます。 その時点では、旅行の所要時間はわかりません。 したがって、旅行の所要時間は特徴ではなく、この列はモデルから除外します。
..
--From ML.NET