機械学習について知っておくべき5つのこと

機械学習について知っておくべき5つのこと

急速に進化するあらゆるトピックと同様に、学ぶべき新しいことが常に存在し、機械学習も例外ではありません。この投稿では、機械学習について、知らないかもしれない、気づいていないかもしれない、あるいは知っていたけれど忘れてしまったかもしれない 5 つの点について説明します。

この投稿のタイトルは、機械学習に関する「最も重要な 5 つのこと」や「トップ 5 のこと」ではなく、単に「5 つのこと」であることに注意してください。これは決定的なものでも網羅的なものでもなく、役に立つかもしれない 5 つの項目を集めただけです。

1. データ準備は機械学習の 80% を占めるので…

機械学習タスクでは、データの準備に多くの時間がかかります。少なくとも、多くの時間がかかるようです。多くの人がそう思います。

データ準備の実行の詳細とその重要性についてはよく議論されますが、それだけではありません。だからこそ、データの準備に注意を払う必要があります。これは、一貫性のあるデータを取得するためだけのものではなく、むしろ、データ準備を採用する必要がある理由を理解してもらうための哲学的な長々とした説教のようなものです。データ準備をしっかり行い、データ準備のできる人になりましょう。

CRISP-DM モデルでのデータ準備。

機械学習に関して私が思いつく最良のアドバイスは、大きなプロジェクトではデータの準備に多くの時間を費やすことになるので、可能な限り最高のデータ準備のプロフェッショナルになることを決意するのはかなり良い目標であるということです。データ準備は、単に時間がかかり面倒な作業であるだけでなく、後続のステップ(不正なデータの入力、不正なデータの出力など)にとって非常に重要であり、不適切なデータ準備者として悪い評判を得ることは、この世で最悪のことではありません。

したがって、データの準備を実行して習得するには時間がかかるかもしれませんが、それは決して悪いことではありません。データ準備の必要性には、専門家として目立つため、また、優れた仕事能力の固有の価値を示すための多くの機会があります。

2. パフォーマンスベースラインの値

特定のアルゴリズムを使用してデータをシミュレートし、ハイパーパラメータの調整、特徴エンジニアリング、チェリーピッキングの実行に多くの時間を費やした場合、たとえば 75% の精度までトレーニングする方法がわかったので満足します。あなたは自分が行った仕事に非常に満足しています。

しかし、結果を何と比較したのですか?ベースライン(データを比較するための経験則よりも簡単な完全なチェック)がなければ、その懸命な努力の結果を実際には何とも比較していないことになります。では、他のデータと比較しない限り、精度はどれも価値があると想定するのは合理的でしょうか?明らかにそうではありません。

ランダムな推測はベースラインにとって最適なアプローチではありません。代わりに、ベースラインの精度を決定するための広く受け入れられている方法があります。たとえば、Scikit-learn は DummyClassifier カテゴリでさまざまなベースライン分類子を提供します。

  • stratified は、トレーニング セットのクラス分布を尊重してランダムな予測を生成します。
  • most_frequent は常にトレーニング セット内で最も頻繁に使用されるラベルを予測します。
  • prior は常に優先度を最大化するクラス ('most_frequent' など) を予測し、predict_proba はクラスの優先度を返します。
  • 均一にランダムに予測を生成します。
  • constant は常にユーザー指定の定数ラベルを予測します。

ベースラインは単なる分類器ではありません。たとえば、ベースライン回帰タスクには統計的手法もあります。探索的データ分析、データ準備、前処理の後に、ベースラインを確立することが機械学習ワークフローの論理的な次のステップです。

3. 検証: トレーニングとテスト以上のもの

機械学習モデルを構築するときは、トレーニング データを使用してモデルをトレーニングします。結果として得られたモデルをテストするときは、テスト データを使用します。では、検証はどこで行われるのでしょうか?

fast.ai の Rachel Thomas 氏は最近、適切な検証セットを作成する方法と理由について記事を書き、次の 3 種類のデータを紹介しました。

  • 特定のモデルをトレーニングするために使用されるトレーニングセット
  • モデルを選択するための検証セット

(たとえば、ランダム フォレストとニューラル ネットワークのどちらが問題に適しているでしょうか。40 本のツリーを持つランダム フォレストと 50 本のツリーを持つランダム フォレストのどちらが適しているでしょうか。)

  • どのように作業するかを示す一連のテスト。さまざまなモデルを試してみると、適切な検証セットが得られる可能性があります。ただし、パフォーマンスの低いテスト セットが必ず存在するため、これは単なる偶然です。

では、データをテスト、トレーニング、検証セットにランダムに分割するのは良い考えなのでしょうか?結局のところ、答えはノーです。 Rachel は、記事「時系列データ: Kaggle は現在、エクアドルの食料品店の売上を予測する問題に取り組んでいます」でこの質問に答えました。 Kaggle の「トレーニング データ」は 2013 年 1 月 1 日から 2017 年 8 月 15 日まで、テスト データは 2017 年 8 月 16 日から 2017 年 8 月 31 日までです。良いアプローチとしては、2017 年 8 月 1 日から 8 月 15 日までを検証セットとして使用し、それ以前のすべてのデータをトレーニング セットとして使用することが挙げられます。

この投稿の残りの部分では、データセットを Kaggle のコンペティション データに分割する方法について説明します。これは非常に実用的です。また、クロス検証についても説明します。読者は私の方法に従って自分でクロス検証を調べることができます。

データのランダム分割が役立つ場合が他にもたくさんあります。これは、データを取得したときのデータの状態(トレーニング データとテスト データに分割されているか) や、データの種類 (上記の時系列分類を参照) などの要因によって異なります。

Scikit には、ランダム分割が実行可能になる条件を判断する train_validate_test_split メソッドがない可能性がありますが、標準の Python ライブラリを活用して独自のメソッドを作成できます。

4. ツリーよりもアンサンブル法のほうが多い

機械学習の初心者にとって、アルゴリズムの選択は難しい場合があります。分類器を構築する場合、特に初心者の場合は、単一のアルゴリズムで問題の単一のインスタンスを解決するアプローチを採用するのが一般的です。ただし、特定の状況では、分類器を連結または組み合わせる方が効果的な場合があります。このアプローチでは、投票、重み付け、および組み合わせの手法を使用して、最も正確な分類器を追求します。アンサンブル学習は、この機能を複数の方法で提供する分類器です。

ランダム フォレストは、単一の予測モデルで多数の決定木を使用するアンサンブル学習者の非常に重要な例です。ランダムフォレストはさまざまな問題にうまく適用され、それに応じて素晴らしい成果を達成してきました。しかし、これらが唯一の統合方法というわけではなく、試してみる価値のある他の多くの方法があります。

バギングの背後にあるシンプルな概念は、複数のモデルを構築し、それらのモデルからの結果を観察し、結果の大部分を採用することです。最近、車の後部車軸アセンブリに問題が発生しました。問題を診断したディーラーのアドバイスに従わず、他の 2 つの修理店に車を持ち込みましたが、どちらの店も問題はディーラーが示唆したものとは異なると考えました。これは、バギングが実際の生活で使用されていることを示しています。ランダムフォレストはバギング技術に基づいて改良されています。

スピードアップはバギングに似ていますが、概念が少し異なります。モデルに等しい重みを割り当てる代わりに、分類器に重みの割り当てを追加し、加重投票に基づいて最終結果を導出します。私の車の問題を例に挙げると、私は過去に何度も同じ修理工場に行ったことがあり、他の修理工場よりもその修理工場の診断を信頼しているかもしれません。また、私はこれまでディーラーとやり取りしたり取引したりしたことがなく、ディーラーの能力に対する信頼度も低いと仮定します。私が割り当てる重みは反映されます。

スタッキングは、さまざまな同一の学習器の集合ではなく、複数の単一の分類器をトレーニングするという点で、前の 2 つの手法とは異なります。バギングとブースティングでは、同じ分類アルゴリズム (決定木など) の異なるインスタンスを使用して構築されたモデルが多数使用されますが、スタッキングでは、異なる分類アルゴリズム (決定木、ロジスティック回帰、ANN、または他の組み合わせなど) も使用するモデルが構築されます。

次に、統合されたアルゴリズムは他のアルゴリズムの予測に基づいてトレーニングされ、最終的な予測が得られます。この組み合わせは任意のアンサンブル手法で行うことができますが、この組み合わせを実行するための最も適切でシンプルなアルゴリズムはロジスティック回帰であると考えられることがよくあります。スタッキングは分類だけでなく、密度推定などの教師なし学習タスクにも使用できます。

5. Google Colab?

最後に、もう少し実用的なものを見てみましょう。 Jupyter Notebook は、事実上、データ サイエンス開発のための最も実用的なツールとなり、ほとんどの人が自分のパソコンで、または他のより複雑な構成 (Docker コンテナーや仮想マシンなど) を通じてこのソフトウェアを実行しています。最初に注目を集めたのは Google の Colaboratory です。これを使用すると、Jupyter スタイルおよび互換性のあるノートブックを、設定なしで Google ドライブ内で直接実行できます。

Colaboratory は、最近人気の高い Python ライブラリのいくつかが事前設定されており、サポートされているパッケージ管理を通じて Notebooks にインストールできます。たとえば、TensorFlow はこのカテゴリに分類されますが、Keras は分類されません。ただし、pip 経由で Keras をインストールするには数秒しかかかりません。

この問題に関する良いニュースは、ニューラル ネットワークを使用している場合、トレーニングに GPU ハードウェア アクセラレーションを 1 回最大 12 時間無料で有効にできることです。この朗報は、一見したほど完璧ではありませんが、追加の利点であり、GPU アクセラレーションをすべての人に普及させるための良いスタートでもあります。

<<:  AI スタートアップの品質を測定するにはどうすればよいでしょうか?

>>:  隠れた表現を視覚化することでニューラルネットワークをより深く理解する

ブログ    
ブログ    

推薦する

Kaggle マスターはどのような言語、フレームワーク、モデルを使用していますか?詳細な統計はこちら

統計ウェブサイト: https://mlcontests.com/ 著者はいくつかの重要な結論に達し...

機械学習により整形外科画像分析がさらに進化

医療画像解析に機械学習 (ML) を実装することは新しいことではありません。放射線科医は、自動化ツー...

HumanGaussian オープンソース: ガウススプラッティングに基づく高品質な 3D 人体生成のための新しいフレームワーク

3D 生成の分野では、テキスト プロンプトに基づいて高品質の 3D 人間の外観と形状を作成することは...

半導体市場における人工知能の可能性と重要性

人工知能プロセッサは世界の半導体産業を活性化させており、少なくとも1つの市場調査会社は、AIチップの...

AIがネットワークゴミを生み出す:古いインターネットは死につつあり、新しいインターネットは困難の中で生まれる

網易科技は6月27日、ここ数カ月、インターネットの方向性が変化したことを示すさまざまな兆候があると報...

IIHS:自動運転車は交通事故を3分の1しか減らせない

道路安全保険協会(IIHS)が実施した調査によると、自動運転車は期待したほど事故を減らさない可能性が...

生成的敵対ネットワーク (GAN) の未解決の 7 つの謎

いくつかの指標によれば、生成的敵対的ネットワーク (GAN) の研究は過去 2 年間で大きな進歩を遂...

人工知能の発展方向と機会

[[358422]] 01 現段階における人工知能のボトルネック現在、人工知能、特にその応用分野では...

人工知能の急速な発展により、多くの人が失業し、自立できなくなるのでしょうか?

近年、人工知能が話題となっており、人工知能が人類にもたらす変化について多くの人が議論しています。多く...

...

...

Cloud Pak for Data 3.0は、企業のコスト削減と効率性の向上を支援し、AI導入を加速します。

[[335519]]感染症流行後も実体経済は厳しい状況が続いている。生産停止、収益の急激な減少、資...

...

...

...