エンドツーエンドの機械学習プロジェクトのベストアプローチ[2022]
公開: 2021-01-01機械学習はペースを上げており、非常に長い間論争の骨となってきました。 この分野のいくつかの非常に優れたアルゴリズムとアーキテクチャにより、機械学習の概念を実際の世界に適用することが可能になりました。
それはもはや単なる研究の概念ではなく、有用な応用分野に深く広がっています。 そして今日、これまで以上に、機械学習プロジェクトのエンドツーエンドパイプラインの技術を習得する必要があります。
多くの人々にとって機械学習への関心が高まっており、MLとAIの基礎を理解するのに役立つ膨大な量のリソースが利用可能です。 多くのコースでは、いくつかの基本的な概念を学ぶことから、最終的にいくつかの最先端のモデルを構築することまでを学びます。
しかし、それはそれですか? データにアクセスする方法を実際に学び、MLモデルがデータから有用な機能を抽出できるようにデータをクリーンアップする方法を実際に理解していますか? そして、展開部分はどうですか? 私たちがそのようなコースやカリキュラムを完了した後、私たちの心の中で答えられないままである同様の行に関する非常に多くの質問があります。
この問題は、プロジェクトの完全なエンドツーエンドの機械学習パイプラインを十分に理解していないために発生します。 この記事では、そのようなパイプラインの1つを調べて、MLプロジェクトの実際のシナリオでより良い結果を得るために何を行う必要があるかを正確に理解します。
これを最もよく示している本の1つは、Aurelien GeronによるScikit-Learn、Keras、およびTensorFlowを使用した実践的な機械学習です。

このエンドツーエンドのパイプラインは、理解を深めるためにいくつかのステップに分割できます。それらは次のとおりです。
- 問題の説明を理解する
- 必要なデータを取得する
- データを理解する
- データのクリーニング
- トレーニングに最適なモデルの選択
- ハイパーパラメータの微調整
- 結果の提示
- システムの導入と保守
実際の機械学習プロジェクトのパイプラインをよりよく理解するために、カリフォルニアの住宅価格予測問題の一般的な例を使用します。 この問題の説明に関連して、上記のすべての点について説明します。 プロジェクトごとに若干の変更があるかもしれませんが、全体的な目的は同じです。
目次
問題の説明を理解する
優れたソリューションを構築するには、問題の説明を非常に明確に理解する必要があります。 おそらく機械学習モデルを構築してトレーニングすることになりますが、実際のアプリケーション領域にはモデルだけではありません。 モデルの出力は、エンドユーザーが正確に必要としているものと一致している必要があります。
この特定の例では、人口、収入、住宅価格など、カリフォルニアのすべての指標のデータセットが提供されています。 モデルに必要な出力は、場所、人口、収入などの他の属性を考慮して、家の価格を予測できる必要があるということです。
このステップの重要な理由は、何を行う必要があり、どのようなソリューションが必要かを正確に理解することです。 ここで、問題の説明にどのようにアプローチする必要があるかについて、ブレインストーミングの主要な部分が行われます。
読む:初心者のための機械学習プロジェクトのアイデア
必要なデータを取得する
問題の説明を明確に理解し、問題を解決するために機械学習アプローチを進めることを決定したら、関連データの検索を開始する必要があります。 データは機械学習プロジェクトの最も重要な要素であるため、品質データのみを慎重に見つけて選択する必要があります。 MLモデルの最終的なパフォーマンスは、トレーニング中に使用されたデータによって異なります。
実際の例でもデータ分布を理解するのに役立つデータを見つけるためのさまざまなソースがあります。 この例では、KaggleからCalifornia HousePricePredictionデータセットを取得できます。 このデータはCSV形式であるため、Pandasライブラリを使用してデータセットを読み込みます。
データを理解する
使用しているデータを理解できることは、MLソリューションの非常に重要な側面です。 これにより、プロジェクトにより適したアルゴリズムまたはモデルアーキテクチャを選択できます。 データの詳細を確認する前に、まずデータセットをトレインセットとテストセットに分割することをお勧めします。 これにより、テストセットはそのままになり、テストセットに過剰適合する可能性が低くなります。 これにより、モデルからデータスヌーピングバイアスを排除できます。
データセットをこれらのトレインセットとテストセットに分割するには、さまざまな方法があります。 これらの1つは、ハードコードされたパーセンテージ値で分割することです。 ほとんどの場合、90%のトレーニングと10%のテストが一般的な値です。
分割後、データを理解するために列車セットを詳細に視覚化する必要があります。 現在のデータセットには緯度と経度のポイントが含まれているため、散布図を使用して場所に応じた密度を確認すると非常に便利です。
データセット内の2つの属性間の相関関係を見つけることは、どの属性が必要な属性により関連しているかを理解するのに役立ちます。 この場合、データセット内の住宅価格により関連している属性を見つける必要があります。 これは、corr()メソッドを使用してScikit-Learnで簡単に実行できます。 別の属性に対する各属性の値を返します。 したがって、住宅価格に関する関係を確認する必要がある場合は、次のように行うことができます。
corr_matrix [“ median_house_value”]。sort_values(ascending = False)
median_house_value 1.000000median_income 0.687170total_rooms 0.135231Housing_median_age 0.114220世帯0.064702total_bedrooms 0.047865人口-0.026699経度-0.047279緯度-0.142826
ここでは、 median_incomeが家の値に直接関連しているのに対し、緯度の値は間接的に関連していることがわかります。
最後に、いくつかの属性を組み合わせて、いくつかの特徴エンジニアリングを試みることもできます。 たとえば、 totalrooms_per_householdは、 total_roomsまたは世帯の値を個別に設定するよりもはるかに有益な場合があります。
データのクリーニング
このステップでは、機械学習プロジェクトのデータを準備します。 これは、パイプライン全体の中で最も時間のかかる重要なステップです。 モデルのパフォーマンスは、主にデータをどれだけうまく準備するかに依存します。 通常、この目的のために関数を作成することをお勧めします。これにより、必要なときにいつでもそれらの関数を使用でき、同じ関数を生産ラインで使用して、予測用の新しいデータを準備できます。
実際のデータで最も遭遇する問題の1つは、データセット内のいくつかのエントリの値が欠落していることです。 それを処理するいくつかの方法があります。 属性全体を直接削除することはできますが、これはモデルにはあまり適していません。 欠落している値が1つある行を取り除くことができます。 主に使用される別の方法は、欠落している値をゼロや、数値の場合は列全体の算術平均などの他の値に設定することです。
カテゴリ値の場合は、数値で表し、ワンホットエンコーディングにエンコードして、モデルでの作業が容易になるようにすることをお勧めします。 Scikit-LearnはOneHotEncoderクラスも提供しているため、カテゴリ値をワンホットベクトルに簡単に変換できます。

あなたが世話をしなければならないもう一つのことは、機能のスケーリングです。 値の範囲が非常に厳しい属性がいくつかある可能性があります。 したがって、モデルがこれらの値を簡単に処理してパフォーマンスを向上できるように、それらを標準スケールにスケーリングすることをお勧めします。
また読む:インドの機械学習エンジニアの給与
トレーニングに最適なモデルの選択
すべてのデータクリーニングと特徴エンジニアリングを完了すると、次のステップは非常に簡単になります。 今、あなたがしなければならないのは、データでいくつかの有望なモデルを訓練し、最良の予測を与えるモデルを見つけることです。 最適なモデルを選択するのに役立つ方法がいくつかあります。
カリフォルニアの住宅価格予測の例は、回帰問題です。 これは、数値の範囲(この場合は住宅価格)から値を予測する必要があることを意味します。
ここでの最初のステップは、いくつかのモデルをトレーニングし、検証セットでそれらをテストすることです。 ここでテストセットを使用しないでください。テストセットの過剰適合につながり、最終的にモデルの正則化が非常に低くなります。 これらのモデルから、ほとんどの場合、トレーニング精度と検証精度が良好なモデルを選択する必要があります。 一部のタスクは他のタスクとは異なる構成を必要とするため、ユースケースによっても異なる場合があります。
すでにデータをクリーンアップし、前処理機能の準備ができているため、Scikit-LearnやKerasなどのフレームワークを使用して、3〜4行のコードでさまざまなモデルをトレーニングするのは非常に簡単です。 Scikit-Learnには、決定木のようなモデルに適したハイパーパラメーターを見つけるのに役立つ相互検証のオプションもあります。
ハイパーパラメータの微調整
いくつかのモデルを最終候補に挙げた後、ハイパーパラメータを微調整して、それらの真の可能性を解き放つ必要があります。 これを達成する方法もたくさんあります。 その1つは、ハイパーパラメータを手動で変更し、満足のいく結果が得られるまでモデルを何度もトレーニングできることです。 ここでは、自動化されたタスクほど多くの組み合わせをチェックアウトできない可能性があるという問題を明確に確認できます。 だからここにこのようなものを自動化するためのいくつかの良い方法があります。
グリッド検索は、Scikit-LearnがクラスGridSearchCVの形式で提供するすばらしい機能であり、独自に相互検証を行い、より良い結果を得るために完全なハイパーパラメーター値を見つけます。 私たちがしなければならないのは、どのハイパーパラメータを実験する必要があるかを言及することだけです。 シンプルですが非常に強力な機能です。
ランダム検索は、同様の目的に使用できるもう1つのアプローチです。 グリッド検索は、実験するハイパーパラメータのスペースが少ない場合にうまく機能しますが、ハイパーパラメータの数が多い場合は、RandomizedSearchCVを使用することをお勧めします。 ランダムなハイパーパラメータを試し、全体を通して見た中で最高の値を考え出します。
最後になりましたが、アンサンブル学習のアプローチです。 ここでは、複数のモデルを使用してそれぞれの予測を行うことができ、最後に、すべての平均に関する最終的な予測を選択できます。 これは非常に有望な方法であり、Kaggleで多くのコンテストに勝ちます。
最終モデルのすべてのハイパーパラメーターを微調整した後、モデルを使用してテストセットの予測を行うことができます。 ここで、モデルがテストセットでどの程度良好に機能しているかを評価できます。 この後、テストセットのサンプルの過剰適合につながるため、テストセットの精度を上げるためにモデルを微調整しないでください。
結果の提示
最適なモデルを選択して評価を行ったら、結果を適切に表示する必要があります。 視覚化は、データとその背後にあるパターンを理解することがすべてであるため、より良い機械学習プロジェクトを作成するための鍵です。 生の数値結果は、このドメインに既に精通している人には良いように聞こえますが、プロジェクトを魅力的にし、ソリューションで実際に何が起こっているのかを誰もが明確に把握できるため、グラフやチャートで視覚化することが非常に重要です。
システムの導入と保守
ほとんどの学習者は、パイプラインのこの段階に到達し、実際のシナリオで適用するためにプロジェクトを展開しようとしているときに、大きな問題に直面します。 Jupyter Notebookでモデルを作成してトレーニングするのは非常に簡単ですが、重要なのは、モデルを正常に保存してから、ライブ環境で使用することです。
MLエンジニアが直面する最も一般的な問題の1つは、ライブで受信されるデータとモデルをトレーニングしたデータに違いがあることです。 ここでは、モデルをトレーニングするためのパイプラインを作成するときに作成した前処理関数を使用できます。
デプロイできる機械学習モデルには、オンラインモデルとオフラインモデルの2種類があります。 オンラインモデルは、リアルタイムで受信しているデータから学習し続けるモデルです。 オフラインモデルは新しいサンプルから学習しないため、受信するデータの種類に変更があった場合は、適切に更新および維持する必要があります。 したがって、両方のタイプのモデルに対して適切なメンテナンスが必要です。
機械学習モデルをデプロイするときは、ユーザーが簡単に操作できるように、プラットフォームにラップする必要があります。 オプションは幅広く、Webアプリ、Androidアプリ、RestfulAPIなどでラップできます。 このようなアプリやAPIの構築に関する基本的な知識は大きなプラスポイントです。 NodeJSまたはPythonアプリを、Google Cloud Platforms、Amazon Web Services、MicrosoftAzureなどのクラウドサービスにデプロイできる必要があります。

DjangoやFlaskなどのフレームワークに慣れていない場合は、Streamlitを試してみてください。これにより、数行の追加コードでPythonコードをWebアプリの形式でデプロイできます。 探索できるさまざまなそのようなライブラリとフレームワークがあります。
結論
この記事全体を締めくくるには、機械学習プロジェクトはパイプラインの点で他の従来のプロジェクトとはかなり異なり、このパイプラインをマスターできれば、他のすべてがはるかに簡単になります。
初心者の多くが無視しがちな、このエンドツーエンドのパイプラインの最も重要なステップのいくつかは、データのクリーニングとモデルのデプロイです。 これらの手順が実行されれば、残りの部分は他のプロジェクトと同じようになります。
これらの手順に従い、プロジェクトのパイプラインを設定すると、タスクに関する明確なビジョンが得られ、問題のデバッグがより管理しやすくなります。 したがって、これらの手順を実行し、このチェックリストを使用して、独自のエンドツーエンドの機械学習プロジェクトを実装してみることをお勧めします。 問題の説明を取り上げ、データセットを見つけて、プロジェクトを楽しんでください。
機械学習について詳しく知りたい場合は、IIIT-BとupGradの機械学習とAIのPGディプロマをご覧ください。これは、働く専門家向けに設計されており、450時間以上の厳格なトレーニング、30以上のケーススタディと課題、IIIT-を提供します。 B卒業生のステータス、5つ以上の実践的なキャップストーンプロジェクト、トップ企業との仕事の支援。
機械学習またはMLとは何ですか?
提供されたデータから明示的にプログラムされることなくタスクを学習するシステムの能力は、機械学習と呼ばれます。 この分野は、データにアクセスして自分で学習できるコンピュータプログラムの開発に焦点を当てています。 これは、広大な人工知能(AI)の主題のサブフィールドです。 機械学習は、生産性、マーケティング、販売、顧客の幸福、および企業の利益を向上させるために、ほぼすべてのセクターで実装されています。 多くのIT専門家がこれに興味を持っており、キャリアの変更を検討しています。
エンドツーエンドのMLプロジェクトとは何ですか?
エンドツーエンドの機械学習プロジェクトには、データの準備、データに関するモデルのトレーニング、そのモデルのデプロイなどのステップが含まれます。 これは、コードを記述して作業プロセスを自動化する方法であるパイプラインで構成されています。 これらのパイプラインは、適切にコンパイルされると、機械学習プロジェクトの成功につながります。 問題の説明を理解し、適切なデータを取得し、データを理解し、データをクリーンアップし、トレーニングに最適なモデルを選択し、ハイパーパラメータを微調整し、結果を提示することは、関連する段階のほんの一部にすぎません。
機械学習のハイパーパラメータとは何ですか?
ハイパーパラメータは、機械学習のパラメータであり、その値は学習プロセスに影響を与えるために使用されます。 これらは、モデルハイパーパラメータとアルゴリズムハイパーパラメータの2つの部分に分類できます。 モデルハイパーパラメータは、モデル選択タスクに直接つながるため、トレーニングセットにマシンを提供している間は想定できません。 対照的に、アルゴリズムのハイパーパラメータはモデルのパフォーマンスには影響しませんが、学習プロセスの速度と品質には影響します。 さまざまなモデルトレーニング手法ではさまざまなハイパーパラメータが必要ですが、ハイパーパラメータを必要としない基本的なアルゴリズムがいくつかあります。