ML.NETドキュメントリーディング#1 

#1.概要
AIをプロダクトに組み込もうとした時に、障壁になるのがプラットフォームの違いがあります。
.NetベースのツールやWebに組み込むのにLinuxで開発したモジュールを組み込むのが簡単にできないという現状があります。
MicroSoftから機械学習フレームワークのML.NETが公開されていますので、ドキュメントを読んでその仕組みを理解していこうと思います。

[ML.NET のドキュメント](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/)

2020/4/17追記：
ML.NETは統計データから予測を行う機械学習のアルゴリズムを提供していますが、
ディープラーニングで行われている画像や音声を学習するアルゴリズムや仕組みは現在ありません。
画像や音声などの学習済みモデルを利用することが可能となっています。

#2.学習モデルについて
詳しく読んでいく前に、事前に調べたことや、試して分かったことを以下に挙げます。

+ モデル作成はVisualStudio上でモデルビルダーから作成するか、AutoMLによるコマンドラインから作成することになる。また、これらのツールは、ツールにより読み込まれたデータからモデルアルゴリズムを自動で選定し、モデルを作成するためのソースコードが自動で生成される。

+ ツールにより自動生成されたソースコードをコンソールやWindowsFormに組み込んでトレーニング済みモデルを再生成することや、トレーニング済みモデルを使用することができる。
+ トレーニング済みモデルをAzureやWeb上にデプロイして、作成したトレーニング済みモデルを使用することも可能。

+ ~~chainerやtensorflowなど、ディープラーニングのフレームワークはほとんどがGPUを使用できるが、ML.NETは現状CPUのみとなっている。将来GPU対応予定らしい。~~
→ ディープラーニングと機械学習が混同しているため取り消しました。(2020/4/17)

#3.ドキュメントについて
MicroSoftのドキュメントは昔は読みにくかったですが、最近は他のサイトで調べるよりも本家を見た方が知りたいものが出てくることがよくあります。
ただ、本ではないためどこから見たらよいか初見ではわかりませんでした。

全体をみた結果、以下の順で読み進めることにしました。

* ML.NET の基礎
    * [ML.NETとは](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-does-mldotnet-work)
    * [機械学習タスクとアルゴリズム](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/resources/tasks)
* 10 分で開始する
    * [Visual Studio でモデル ビルダーを設定する](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/install-model-builder)
    * [Mac OS、Windows、または Linux に CLI をインストールする](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/install-ml-net-cli)
* モデルビルダー＆CLI
    * [トレーニングデータ](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/load-data-model-builder)
    * [モデル ビルダーでコード生成](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/automate-training-with-model-builder)
    * [CLI でコード生成](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/automate-training-with-cli)
    * [生成コードの説明](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/how-to-use-the-automl-api)
* 概念
    * [アルゴリズムの選択方法](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-choose-an-ml-net-algorithm)
    * [データ変換](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/resources/transforms)
    * [評価](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/resources/metrics)
    * [改善](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/resources/improve-machine-learning-model-ml-net)
* 応用
    * [データの読み込み方法](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/load-data-ml-net)
    * [データの整備](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/prepare-data-ml-net)
    * [モデルの評価](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/train-machine-learning-model-ml-net)
    * [クロス検証によるモデル評価](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/train-machine-learning-model-cross-validation-ml-net)
    * [中間データの確認方法](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/inspect-intermediate-data-ml-net)
    * [予測の解釈(内訳)を明らかにする](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/explain-machine-learning-model-permutation-feature-importance-ml-net)
    * [モデルの保存と読み込み](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/save-load-machine-learning-models-ml-net)
    * [予測する](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/machine-learning-model-predictions-ml-net)
    * [再トレーニング](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/retrain-model-ml-net)
    * [Azureにデプロイ](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/serve-model-serverless-azure-functions-ml-net)
    * [Webにデプロイ](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/how-to-guides/serve-model-web-api-ml-net)
* 実践
    * ツールを使う(モデルビルダー&CLI)
        * [価格を予測する(回帰)](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/tutorials/predict-prices-with-model-builder)
        * [Web サイトのコメントのセンチメントを分析する(二項分類)](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/tutorials/sentiment-analysis-model-builder)
        * [CLIでセンチメントを分析する(二項分類)](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/tutorials/sentiment-analysis-cli?tabs=windows)
        * [レストランの保健衛生の重大度を分類する(他クラス分類)](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/tutorials/health-violation-classification-model-builder)
    * ツールを使わずに一から作る
        * [チュートリアル](https://docs.microsoft.com/ja-jp/dotnet/machine-learning/tutorials/)




※ドキュメントが定期的に追加されているようですので2020/4/16時点の内容になります。

#4.まとめ
読んで理解するにはなかなかのボリュームですが全体を流し読みした感じだと、機械学習に必要なエッセンスはすべて含まれている感じでした。

ただし、ML.NETに用意されていない独自のアルゴリズムのモデルを作りたいという方はお勧めできないと思います。

やりたいことがチュートリアルの内容と近い場合は、すぐに実践できそうです。

また、フレームワーク間でモデルを相互運用できるONNX(オニキス)をサポートしていたり、tensorflowで学習したモデルを使用できたりしますので、AIのフロントエンドとしてML.NETが使えるのではないでしょうか？

次回からは、実際に動かしつつ仕組みを理解していこうと思います。
→[ML.NETドキュメントリーディング#2](https://qiita.com/sunnyyone/items/0e527626910862351009)