「機械学習の実践: Scikit-Learn、Keras、TensorFlow バージョン 2 に基づく」 - 学習ノート (1)

第 1 章 機械学習の概要

· Scikit-Learn、Keras、TensorFlow によるハンズオン機械学習、第 2 版、Aurélien Géron (O'Reilly) 著、著作権 2019 Aurélien Géron、978-1-492-03264-9. · 学習時間:
2022.03.28 ~2022.03.29

注: SciKit-Learn は SciKit ライブラリの一部です。SciKit は SciPy Tookit を意味し、名前は SciPy ライブラリに由来しています。SciKit は SciPy ライブラリ上に構築されています。SciKit-Learn に加えて、他の多くのモジュールも含まれています。SciKit-Learn ライブラリは、機械学習とデータ マイニングに焦点を当てたモジュールです。この章には基本的にコードは含まれておらず、構造は次のとおりです。

19の質問

すべてを始める前に、次の 19 の質問を確認してください。答えられる場合は、この章をスキップしてください: (答えは最後にあります)。

1. 機械学習をどう定義するか?

2. 機械学習が優れている問題はどれですか。4 つのタイプを挙げることができますか?

3. ラベル付きトレーニング データセットとは何ですか?

4. 最も一般的な 2 つの教師あり学習タスクは何ですか?

5. 一般的な教師なし学習タスクを 4 つ挙げていただけますか?

6. ロボットにさまざまな未知の地形を歩行させるには、どのような種類の機械学習アルゴリズムを使用しますか?

7. 顧客をグループに分けるには、どのような種類のアルゴリズムを使用しますか?

8. スパム検出の問題を監視ありまたは監視なしとして捉えますか?

9. オンライン学習システムとは何ですか?

10. コア外学習とは何ですか?

11. 類似性に基づいて予測を行う学習アルゴリズムの種類は何ですか?

12. 学習アルゴリズムのモデル パラメーターとハイパーパラメーターの違いは何ですか?

13. モデルベースの学習アルゴリズムは何を検索しますか? 彼らが最も頻繁に使用する戦略は何ですか? 彼らはどうやって予測を立てているのでしょうか?

14. 機械学習における主要な課題を 4 つ挙げていただけますか?

15. モデルがトレーニング データではうまく機能するが、新しいインスタンスに適用すると一般化が不十分な場合はどうなりますか? 考えられる解決策を 3 つ挙げていただけますか?

16. テスト セットとは何ですか?なぜ使用されますか?

17. 検証セットの目的は何ですか?

18. train-dev セットとは何ですか?いつ必要になり、どのように使用するのですか?

19. テスト セットを使用してハイパーパラメータを調整すると、何が問題になりますか?

答えは最後にあります。

1.1 機械学習とは

機械学習は、明示的にプログラムされずにコンピューターに学習能力を与える研究分野です。

より工学的な概念: コンピューター プログラムは経験 E を使用してタスク T を学習し、そのパフォーマンスは P です。タスク T のパフォーマンス P が経験 E とともに増加する場合、それは機械学習と呼ばれます。

1.2 機械学習を使用する理由

機械学習のもう 1 つの強みは、従来の方法では複雑すぎる問題、または既知のアルゴリズムが存在しない問題を処理できることです。

機械学習は以下に適用されます。

  • 解決策がある問題 (ただし、解決策には人間による多くの微調整が必​​要であるか、多くのルールに従う必要があります): 機械学習アルゴリズムは多くの場合、コードを簡素化し、従来の方法よりも優れたパフォーマンスを実現します。

  • 従来の方法では解決が難しい複雑な問題: 最高の機械学習技術が解決策を持っている可能性があります。

  • 環境は変動します。機械学習アルゴリズムは新しいデータに適応できます。

  • 複雑な問題と大量のデータについて洞察を得ることができます。

1.4 機械学習システムの種類

人間の監督下でトレーニングするかどうか (教師あり学習、教師なし学習、半教師あり学習、強化学習)。

増分学習を動的に行うことは可能ですか (オンライン学習とバッチ学習)。

新しいデータ ポイントを既知のデータ ポイントと単純に照合するか、科学者が行うようにトレーニング データに対してパターン検出を実行して予測モデルを構築するか (インスタンス ベースの学習とモデル ベースの学習)。

これらの基準は相互に排他的ではなく、好きなように組み合わせることができます。

たとえば、今日の最先端のスパム フィルターは、スパムと通常の電子メールでトレーニングされたディープ ニューラル ネットワーク モデルを使用して、動的学習を完了する場合があります。これにより、オンラインのモデルベースの教師あり学習システムになります。

教師あり学習

教師あり学習では、目的の解決策を含むアルゴリズムに提供されるトレーニング セットはラベルと呼ばれます。

分類タスクは、典型的な教師あり学習タスクです。

この良い例はスパム フィルターです。多くの電子メールの例とその電子メールが属するカテゴリ (スパムとハム) についてトレーニングし、新しい電子メールを分類する方法を学びます。

もう 1 つの典型的なタスクは、予測子と呼ばれる一連の特徴 (走行距離、年式、メーカーなど) を考慮して目標値 (車の価格など) を予測することです。このタイプのタスクは回帰と呼ばれます。このようなシステムをトレーニングするには、予測変数とラベル (つまり、価格) を含む、多数の自動車の例が必要です。

機械学習では、属性はデータ型 (例: 「走行距離」) ですが、特徴はコンテキストに応じて複数の意味を持つことができますが、通常、特徴は属性とその値を意味します (例: 「走行距離 = 15,000」)。それにもかかわらず、多くの人は属性と特性という言葉を区別せずに使用します。

以下に、最も重要な教師あり学習アルゴリズム (本書で取り上げます) をいくつか示します。

  • k最近傍アルゴリズム

  • 線形回帰

  • ロジスティック回帰

  • サポート ベクター マシン (SVM)

  • デシジョン ツリーとランダム フォレスト

  • ニューラルネットワーク

教師なし学習

教師なし学習のトレーニング データにはラベルが付けられません。システムは「教師」なしで学習します

最も重要な教師なし学習アルゴリズムのいくつかを次に示します (主に第 8 章と第 9 章で説明します)。

  • クラスタリングアルゴリズム

  • K 平均法アルゴリズム

  • DBSCAN

  • 階層的クラスター分析 (HCA)

  • 異常検出と新規性検出

  • 1クラスのSVM

  • 孤立した森

  • 視覚化と次元削減

  • 主成分分析 (PCA)

  • カーネル主成分分析

  • 局所線形埋め込み (LLE)

  • t 分布確率的近傍埋め込み (t-SNE)

  • 相関ルールの学習

  • アプリオリ ラディアンス

関連するタスクは次元削減です。これは、多くの情報を失わずにデータを単純化することを目的としています。1 つのアプローチは、複数の関連する機能を 1 つに結合することです。

たとえば、車の走行距離は使用年数と強い相関関係があるため、次元削減アルゴリズムはそれらを車の磨耗を表す 1 つの特徴に結合します。このプロセスは特徴抽出と呼ばれます

通常、別の機械学習アルゴリズム (教師あり学習アルゴリズムなど) にトレーニング データを供給する前に、次元削減アルゴリズムを使用してトレーニング データの次元を削減することをお勧めします。これにより、実行が高速になり、データに必要なディスク領域とメモリが減り、場合によってはパフォーマンスが向上します。

もう 1 つの重要な監視されていないタスクは、異常検出です

たとえば、異常なクレジット カード取引を検出して不正行為を防止したり、製造上の欠陥を発見したり、別の機械学習アルゴリズムにデータを供給する前にデータ セットから異常値を自動的に削除したりすることができます。

システムは通常の例でトレーニングされており、新しいインスタンスを見つけると、その新しいインスタンスが正常に見えるか異常に見えるかを判断できます。

非常によく似たタスクは、新規性の検出です。その目的は、トレーニング セット内のすべてのインスタンスとは異なるように見える新しいインスタンスを検出することです。

これには、アルゴリズムに検出させたいインスタンスのない、非常に「クリーンな」トレーニング セットが必要です。

たとえば、犬の写真が数千枚あり、そのうちの 1% がチワワである場合、新規性検出アルゴリズムは、チワワの新しい写真を新規性があるとみなすべきではありません。

一方、異常検出アルゴリズムは、これらの犬を他の犬とは異なり非常に珍しいとみなして、異常として分類する可能性があります (チワワを軽視するものではありません)。

最後に、もう 1 つの一般的な教師なしタスクは相関ルール学習です。これは、大量のデータをマイニングし、属性間の興味深い関係を発見することを目的としています。

たとえば、スーパーマーケットを経営しており、売上記録に相関ルールを適用した結果、BBQ ソースとポテトチップスを購入する人はステーキも購入する傾向があることが判明したとします。次に、これらのアイテムを近くに配置するとよいでしょう

半教師あり学習

データのラベル付けは通常、非常に時間と費用がかかるため、ラベルのないデータが大量に存在し、ラベルの付いたデータはほとんど存在しない傾向があります。

一部のアルゴリズムは、部分的にラベル付けされたデータを処理できます。これは半教師あり学習と呼ばれます

Google フォトなどの写真ホスティング サービスが良い例です。家族の写真をすべてサーバーにアップロードすると、写真 1、5、11 に人物 A が写っており、写真 2、5、7 に人物 B が写っていることが自動的に認識されます。これはアルゴリズムの教師なし部分 (クラスタリング) です。これで、システムに必要なのは、これらの人々が誰であるかを通知することだけです。各人物にタグを付けると、各写真内の各人物の名前を付けることができます。これは画像を検索する場合に非常に重要です。

ほとんどの半教師あり学習アルゴリズムは、教師なしアルゴリズムと教師ありアルゴリズムを組み合わせたものです。

たとえば、Deep Belief Network (DBN) は、制限付きボルツマン マシン (RBM) と呼ばれる監視されていないコンポーネントのスタックに基づいています。制限付きボルツマン マシンは教師なしの方法でトレーニングされ、その後、教師あり学習手法を使用してシステム全体が微調整されます。

強化学習

強化学習は非常に異なる巨大なものです。

その学習システム (この文脈ではエージェントと呼ばれます) は環境を観察し、選択を行い、アクションを実行し、報酬を受けます (または負の報酬の形で罰されます)。

したがって、時間の経過とともに最大の報酬を得るには何が最適なポリシーであるかを自ら学習する必要があります。ポリシーは、特定の状況でエージェントが選択する必要があるアクションを表します。

たとえば、多くのロボットは強化学習アルゴリズムを通じて歩き方を学習します。DeepMind の AlphaGo プロジェクトも強化学習の良い例です。AlphaGo は、2017 年 5 月に世界チャンピオンの柯潔氏を囲碁で破り、一躍有名になりました。何百万ものゲームを分析し、それ自体とチェスを対戦することで、勝利戦略を学習しました。世界チャンピオンと対戦するとき、AlphaGo は非公開学習状態にあり、学習した戦略を適用するだけであることに注意してください。

機械学習システムを分類するためのもう 1 つの基準は、受信データ ストリームから段階的に学習できるかどうかです。

バッチ学習

バッチ学習では、システムは段階的に学習できません。つまり、トレーニングには利用可能なすべてのデータを使用する必要があります。これには多くの時間とコンピューティング リソースが必要となるため、通常はオフラインで行われます。

オフライン学習とは、システムが最初にトレーニングされてから本番環境に投入されるときで、その時点で学習プロセスが停止し、学習した内容が適用されるだけです。

バッチ学習システムに新しいデータ (新しい種類のスパムなど) を学習させたい場合は、完全なデータセット (新旧両方) で新しいバージョンのシステムを再トレーニングしてから、古いシステムを非アクティブ化する必要があります。

新しいシステムに置き換えてください。幸いなことに、機械学習システムのトレーニング、評価、起動のプロセス全体は簡単に自動化できるため、バッチ学習システムであっても変化に適応できます。

データを常に更新し、必要に応じてシステムの新しいバージョンをトレーニングするだけで済みます。

さらに、完全なデータセットを使用したトレーニングは計算コストが高くなります (CPU、メモリ容量、ディスク容量、ディスク I/O、ネットワーク I/O など)。

データ量が非常に大きく、トレーニング システムを毎日最初から自動的に実行すると、多額の費用がかかることになります。

また、大量のデータに直面すると、バッチ学習アルゴリズムを適用することさえできない可能性があります。

オンライン学習

オンライン学習では、段階的に学習データをシステムに提供し、徐々に学習結果を蓄積していきます。

このデータ提供方法は個別に行うことも、小さなグループ データの小さなバッチをトレーニングに使用することもできます。

学習はすべてのステップで高速かつ低コストであるため、システムはオンザフライで書き込まれる最新データから学習できます。

データ ストリームの変化に迅速または自律的に対応しながら、継続的なデータ ストリーム (株価など) を受信する必要があるこのようなシステムにとって、オンライン学習の使用は非常に良い方法です。

コンピューティング リソースが限られている場合は、オンライン学習も良い選択肢です。新しいデータ インスタンスがオンライン学習システムによって学習されると、そのデータ インスタンスは不要になり、破棄できます (以前の状態にロールバックする場合を除く)。データを「再学習」することで、スペースを大幅に節約できます。

非常に大規模なデータセット (1 台のコンピューターのメイン メモリを超えるデータ) の場合は、オンライン学習アルゴリズムも適しています (これはコア外学習と呼ばれます)。このアルゴリズムは、一度にデータの一部のみをロードし、データのこの部分でトレーニングし、すべてのデータがトレーニングされるまでこのプロセスを繰り返します。

コア外学習は通常オフラインで (つまり、稼働中のシステムではなく) 行われるため、オンライン学習という名前は誤解を招きます。それを漸進的な学習と考えることができます。

オンライン学習システムの重要なパラメーターは、変化するデータにどれだけ早く適応するかであり、これは学習率として知られています。

学習率を高く設定すると、システムは新しいデータにすぐに適応しますが、古いデータもすぐに忘れてしまいます (スパム フィルターが最近表示された電子メールのみにフラグを付けることは絶対に望ましくありません)。逆に、学習率が低い場合、システムの慣性は高くなります。つまり、学習が遅くなり、新しいデータや一連の非典型的なデータ ポイント (外れ値) のノイズに対する感度も低くなります。

オンライン学習の大きな課題は、システムに悪いデータが入力されると、システムのパフォーマンスが徐々に低下することです。

リアルタイム システムの顧客の中には、この現象に気づいた人もいるかもしれません。不正なデータのソースは、マシン上のセンサーの故障や、検索結果のランキングを向上させるために誰かが悪意を持って検索エンジンにスパムを送信したことなどが考えられます。このリスクを軽減するには、システムを注意深く監視し、パフォーマンスの低下が検出され次第、適時に学習を中断し (場合によっては以前の動作状態に戻す) 必要があります。

もちろん、同時に入力データを監視し、異常なデータに対応する必要もあります (異常検出アルゴリズムを使用するなど)。

機械学習システムを分類するもう 1 つの方法は、システムがどの程度一般化されているかによって決まります。

ほとんどの機械学習タスクは予測を行うことに関するものです。これは、トレーニング例が与えられた場合、システムはこれまでに見たことのない例について予測 (一般化) を行う必要があることを意味します。

トレーニング データで良好なパフォーマンス指標を達成することは重要ですが、それだけでは十分ではありません。本当の目的は、新しいオブジェクト インスタンスで適切に実行することです。

一般化には、インスタンスベースの学習とモデルベースの学習という 2 つの主なアプローチがあります。

例に基づいた学習

私たちの最も一般的な学習方法は単純な暗記です。

この方法でスパム フィルタを作成すると、ユーザーによってすでにスパムとしてマークされているメッセージとまったく同じメッセージにのみフラグが設定される可能性があります。

それは最悪の解決策ではありませんが、最善の解決策でもないことは確かです。

同一であるだけでなく、既知のスパムとよく似た電子メールにフラグを付けるようにシステムをプログラムすることもできます。

ここでは 2 つの電子メール間の類似性の測定が必要です。類似性の (基本的な) 尺度は、それらの間で同じ単語の数を数えることです。

新しいメッセージに既知のスパム メッセージと共通する単語が多数含まれている場合、システムはそのメッセージをスパムとしてマークすることができます。

これはインスタンスベースの学習として知られています。システムはこれらの例を暗記し、類似性の尺度を使用してそれらをすでに学習したインスタンス (またはそのサブセット) と比較することによって新しいインスタンスに一般化します。

モデルベースの学習

一連の例から一般化を達成するもう 1 つの方法は、それらの例のモデルを構築し、そのモデルを使用して予測を行うことです。これはモデルベース学習と呼ばれます

たとえば、お金が人々を幸せにするかどうかを知りたい場合は、OECD Web サイトから「幸福度指数」データをダウンロードし、次に国際通貨基金 (IMF) Web サイトから 1 人当たり GDP の統計データを見つけることができます。データを表にまとめ、一人当たり GDP 順に並べ替えると、表 1-1 に示すような概要が得られます。ここにもトレンドがありそうです!データにはノイズ (つまり、部分的にランダム) が含まれていますが、それでも、国の 1 人当たり GDP が増加するにつれて、生活満足度が多かれ少なかれ直線的に増加することがわかります。したがって、生活の満足度を 1 人当たり GDP の一次関数としてモデル化できます。このプロセスはモデルの選択と呼ばれます。単一の属性である 1 人当たり GDP を使用して、生活満足度の線形モデルを選択します (式 1-1 を参照)。このモデルには、θ0 と θ1 という 2 つのモデル パラメーターがあります。これら 2 つのパラメータを調整することにより、図 1-18 に示すように、このモデルを使用して任意の線形関数を表すことができます。モデルを使用する前に、パラメータ θ0 と θ1 の値を定義する必要があります。どの値がモデルのパフォーマンスを最高にするかをどのように知ることができるでしょうか? この質問に答えるには、まずモデルのパフォーマンスを測定する方法を決定する必要があります。モデルがどの程度優れているかを測定するために効用関数 (または適合度関数) を定義するか、モデルがどの程度劣悪であるかを測定するためにコスト関数を定義します。線形回帰問題の場合、通常の選択は、コスト関数を使用して線形モデルの予測とトレーニング例の間のギャップを測定し、このギャップを最小限に抑えることを目的としています。これはまさに線形回帰アルゴリズムの目的です。提供されたトレーニング サンプルを通じて、提供されたデータの線形モデルに最もよく適合するパラメーターを見つけます。これをモデルのトレーニングと呼びます。この場合、アルゴリズムによって見つかった最適なパラメーター値は、θ0 = 4.85 および θ1 = 4.91×10-5 です。紛らわしいことに、同じ「モデル」という単語が、1 つのタイプのモデル (例: 線形回帰)、完全に特定のモデル アーキテクチャ (例: 1 つの入力と 1 つの出力を持つ線形回帰)、または最後のトレーニング済みモデルを指す場合があります。予測に使用できます (たとえば、パラメーター θ0 = 4.85 および θ1 = 4.91×10-5 を使用した、1 つの入力と 1 つの出力による線形回帰)。

モデルの選択には、モデルのタイプの選択とそのアーキテクチャの完全な指定が含まれます。モデルのトレーニングとは、トレーニング データに最も適合するモデルのパラメーターを見つけるアルゴリズムを実行することを意味します (そしてできれば新しいデータに対して適切な予測を行います)。

以下は、失敗した実験のこの部分です。出力は KeyError: 'INEQUALITY' です。後で時間があるときに変更方法を見てみましょう。

# D:\Py-project\Python Learning\Hands-On Machine Learning\handson-ml2-master\datasets\lifesat\oecd_bli_2015.csv

# import matplotlib.pyplot as plt
# import numpy as np
# import pandas as pd
# import sklearn.linear_model
#
#
# def prepare_country_stats(oecd_bli, gdp_per_capita):
#     oecd_bli = oecd_bli[oecd_bli["INEQUALITY"]=="TOT"]
#     oecd_bli = oecd_bli.pivot(index="Country", columns="Indicator", values="Value")
#     gdp_per_capita.rename(columns={"2015": "GDP per capita"}, inplace=True)
#     gdp_per_capita.set_index("Country", inplace=True)
#     full_country_stats = pd.merge(left=oecd_bli, right=gdp_per_capita,
#                                   left_index=True, right_index=True)
#     full_country_stats.sort_values(by="GDP per capita", inplace=True)
#     remove_indices = [0, 1, 6, 8, 33, 34, 35]
#     keep_indices = list(set(range(36)) - set(remove_indices))
#     return full_country_stats[["GDP per capita", 'Life satisfaction']].iloc[keep_indices]
# # Load the data
# oecd_bli = pd.read_csv("D:\Py-project\Python Learning\Hands-On Machine Learning\handson-ml2-master\datasets\lifesat\gdp_per_capita.csv",
#                        thousands=',', encoding='ISO-8859-1', on_bad_lines='skip')
# gdp_per_capita = pd.read_csv("D:\Py-project\Python Learning\Hands-On Machine Learning\handson-ml2-master\datasets\lifesat\oecd_bli_2015.csv",
#                              thousands=',', delimiter='\t', encoding='latin1', na_values="n/a")
# # Prepare the data
# country_stats = prepare_country_stats(oecd_bli, gdp_per_capita)
# x = np.c_[country_stats["GDP per capita"]]
# y = np.c_[country_stats["Life satisfaction"]]
# # Visualize the data
# country_stats.plot(kind='scatter', x="GDP per capita", y='Life satisfaction')
# plt.show()
# # Select a linear model
# model = sklearn.linear_model.LinearRegression()
# # Train the model
# model.fit(x, y)
# # Make a prediction for Cyprus
# x_new = [[22587]]  # Cyprus's GDP per capita
# print(model.predict(x_new))  # outputs [[ 5.96242338]]

# KeyError: 'INEQUALITY'

要するに:

研究データ。

モデルを選択してください。

トレーニングにはトレーニング データを使用します (つまり、以前の学習アルゴリズムがコスト関数が最小化されるようなモデル パラメーター値を検索するプロセス)。

最後に、モデルが適切に一般化されることを期待して、新しい例についての予測 (推論と呼ばれます) を行うためにモデルが適用されます。

上記は典型的な機械学習プロジェクトです。

1.5 機械学習の主要な課題

主なタスクは学習アルゴリズムを選択し、それをデータでトレーニングすることなので、最も起こりやすい 2 つの問題は「不正なアルゴリズム」と「不正なデータ」です。不正なデータから始めましょう。

1.5.1 学習データの量が不足している

おしゃべりする子供にリンゴが何であるかを教えるには、リンゴを指して「リンゴ」と言うだけで済みます (このプロセスを数回繰り返す必要がある場合があります)。 そうすれば、子供はさまざまな色のリンゴを識別できるようになります。形、

まさに天才!機械学習はまだこの段階に達しておらず、ほとんどの機械学習アルゴリズムが適切に動作するには大量のデータが必要です。最も単純な問題であっても、おそらく何千もの例が必要になります。

また、画像認識や音声認識などの複雑な問題の場合は、(既存のモデルの一部を再利用できない限り) 何百万ものサンプルが必要になる場合があります。

複雑な問題の場合、アルゴリズムよりもデータが重要です

この考えは、2009 年に「データの不合理な有効性」という論文を発表した Peter Norvig らによってさらに推進されました。

ただし、小規模および中規模のデータセットが依然として非常に一般的であり、追加のトレーニング データを取得することが必ずしも簡単または安価であるとは限らないため、当面はアルゴリズムを放棄しないでください。

1.5.2 トレーニング データは代表的なものではありません

適切に一般化するには、トレーニング データが一般化される新しい例をよく表していることが重要です。インスタンスベースの学習を使用するか、モデルベースの学習を使用するか

一般化したいケースに対して代表的なトレーニング セットを使用することが重要です。しかし、言うは易く行うは難しです。

サンプルセットが小さすぎる場合、サンプリングノイズが発生します(つまり、代表的ではないデータが選択されます)。

また、非常に大きなサンプル データの場合でも、サンプリング方法が不適切な場合、いわゆるサンプリング バイアスと呼ばれる、代表的ではないデータ セットが発生する可能性があります。

1.5.3 低品質のデータ

明らかに、トレーニング セットがエラー、外れ値、ノイズ (低品質の測定によって生成されたデータなど) でいっぱいの場合、システムは基礎となるパターンを検出するのが難しくなり、良好なパフォーマンスが得られる可能性が低くなります。

したがって、時間をかけてトレーニング データをクリーンアップすることには、投資する価値があります。実際、ほとんどのデータ サイエンティストは時間のかなりの部分をこの作業に費やしています。

一部のインスタンスが明らかに異常である場合は、単にそれらを破棄するか、手動でエラーを修正してみると役立つ場合があります。

一部のインスタンスに一部の機能が欠落している場合 (たとえば、顧客の 5% が年齢を指定していない)、これらの機能を全体として無視するか、欠落しているインスタンスを無視するか、欠落している値を補完するかを決定する必要があります。

(たとえば、年齢値の中央値を入力する)、またはこの機能を使用してモデルをトレーニングしてから、この機能を使用せずにモデルをトレーニングします。

1.5.4 無関係な機能

私たちがいつも言っているように、ゴミは入ったらゴミは出ます。トレーニング データに十分な関連性のある特徴と、あまり関連性のない特徴が含まれていない場合にのみ、システムは学習を完了できます。

機械学習プロジェクトを成功させるために重要なのは、トレーニング用に適切な特徴セットを抽出することです。このプロセスは特徴エンジニアリングと呼ばれ、次のプロセスが含まれます。

  • 特徴の選択 (既存の特徴からトレーニングに最も役立つ特徴を選択します)。

  • 特徴抽出 (既存の特徴を組み合わせて、より有用な特徴を生成します。前述したように、次元削減アルゴリズムが役立ちます)。

  • 新しいデータを収集して新しい機能を作成します。「悪いデータ」の例をかなりの数見てきましたので、「悪いアルゴリズム」の例をいくつか見てみましょう。

1.5.5 トレーニングデータの過学習

外国を旅行していてタクシー運転手にぼったくられたと仮定すると、その国のタクシー運転手は全員強盗と言ってもいいでしょう。

過剰な一般化は私たち人間が頻繁に行うことであり、残念なことに、注意しないと機械も同じ罠に陥る可能性があります。

機械学習では、モデルがトレーニング データでは良好に機能するものの、一般化がうまくいかない場合、これを過適合と呼びます。

ディープ ニューラル ネットワークなどの複雑なモデルはデータ内の小さなパターンを検出できますが、トレーニング セット自体にノイズが多い場合、またはデータ セットが小さすぎる場合 (サンプリング ノイズが導入される場合)、

次に、モデルがノイズ自体のパターンを検出する可能性があります。明らかに、これらのパターンを新しいインスタンスに一般化することはできません。

たとえば、人生満足度モデルに、有益でない属性 (国名など) を含むさらに多くの属性を入力するとします。この場合、高度なモデルは、トレーニング データ内で、ニュージーランド (生活満足度 7.3)、ノルウェー (生活満足度 7.4) など、名前に文字 w が含まれる国が存在するという事実のパターンを検出する可能性があります。 , スウェーデン(スウェーデン、生活満足度は7.2)とスイス(スイス、生活満足度は7.5)では、生活満足度は7を超えています。この w 満足度ルールをルワンダまたはジンバブエ (ジンバブエ) に一般化した場合、結果にどの程度自信がありますか?

明らかに、トレーニング データ内のこのパターンは単なる偶然ですが、モデルはそのパターンが本物なのかノイズの結果なのかを判断できません。過学習は、トレーニング データの量とノイズに対してモデルが複雑すぎる場合に発生します。考えられる解決策は次のとおりです。

  • モデルを簡素化する: パラメーターの少ないモデルを選択したり (たとえば、高次多項式モデルの代わりに線形モデルを選択したり)、トレーニング データ内の属性の数を減らしたり、モデルを制約したりできます。

    • モデルを制約してモデルを簡素化し、過学習のリスクを軽減するこのプロセスは、正則化と呼ばれます。
      • 適用される正則化の程度は、ハイパーパラメータを介して制御できます。ハイパーパラメータは、学習アルゴリズムのパラメータです (モデルではありません)。したがって、アルゴリズム自体の影響を受けません。ハイパーパラメータはトレーニング前に設定し、トレーニング中は一定にしておく必要があります。正則化ハイパーパラメータを非常に大きな値に設定すると、ほぼ平坦なモデル (傾きがゼロに近い) が得られます。
      • 学習アルゴリズムがトレーニング データを過剰適合させることは確かにありませんが、適切な解決策が見つかる可能性はさらに低くなります。ハイパーパラメータの調整は、機械学習システムを構築する上で非常に重要な部分です。
  • さらに多くのトレーニング データを収集します。

  • トレーニング データのノイズを削減します (たとえば、データ エラーを修正し、外れ値を削除します)。

1.5.6 トレーニングデータのアンダーフィッティング

過小適合と過適合はまさにその逆です。これは通常、モデルが基礎となるデータ構造に対して単純すぎるために発生します。たとえば、生活の満足度を記述する線形モデルは適合不足です。

現実はモデルよりもはるかに複雑であるため、モデルによって生成される予測は、トレーニングに使用される例であっても不正確になるはずです。この問題を解決する主な方法は次のとおりです。

  • より多くのパラメーターを持つ、より強力なモデルを選択してください。

  • より優れた特徴セットを学習アルゴリズムに提供します (特徴エンジニアリング)。

  • モデル内の制約を減らします (例: 正則化ハイパーパラメーターを減らします)。

最後に取り上げるべき重要なトピックが 1 つあります。モデルがトレーニングされた後は、それが新しいシナリオに正しく一般化されることを単に「願う」だけではなく、モデルを評価し、必要に応じていくつかの調整を行う必要もあります。

では、これを行う方法を見てみましょう。

1.6 テストと検証

モデルが新しいシナリオにどの程度一般化されるかを知る唯一の方法は、モデルに実際に新しいシナリオを処理させることです。これを行う 1 つの方法は、実稼働環境にデプロイし、その出力を監視することです。

これは問題ありませんが、モデルが非常に悪い場合はユーザーから苦情が来るため、明らかに最善のアプローチではありません。より良いオプションは、データをトレーニング セットとテスト セットの 2 つの部分に分割することです。

トレーニング セットのデータを使用してモデルをトレーニングし、テスト セットのデータを使用してモデルをテストできます。新しいシナリオのエラー率は汎化エラー (またはサンプル外エラー) と呼ばれ、テスト セットでモデルを評価することでこのエラーの推定値を取得できます。この推定により、モデルが新しいシナリオをどの程度うまく処理できるかがわかります。

トレーニング誤差が低く (モデルがトレーニング セットで間違いを犯すことはめったにありません)、汎化誤差が高い場合、モデルはトレーニング データを過学習しています。

通常、データの 80% がトレーニングに使用され、20% がテスト用に保持されます。ただし、これはデータセットのサイズによって異なります。

データに 1,000 万個のインスタンスが含まれている場合、1% を維持するということは、テスト セットとして 100,000 個のインスタンスを含めることで、汎化誤差の適切な推定を得るのに十分である可能性があることを意味します。

David Wolpert は、1996 年の有名な論文で、データについてまったく仮定をしない場合、あるモデルを別のモデルより優先する理由はないことを示しました。これは、ノー フリー ランチ (NFL) 定理として知られています。一部のデータセットでは、最適なモデルは線形モデルですが、他のデータセットでは、最適なモデルはニューラル ネットワーク モデルである可能性があります。より良く機能することが保証されているアプリオリなモデルはありません (これが定理の名前の由来です)。

19 の質問と回答

1. 機械学習とは、データから学習できるシステムを構築することです。学習とは、特定のパフォーマンス指標の下で、特定のタスクがますます上手になることを意味します。

2. 機械学習は、アルゴリズムによる答えのない複雑な問題に非常に適しており、手動で調整する必要がある一連のルールを置き換えて、変化する環境に適応し、最終的に人間を助けるシステムを構築できます (データ マイニングなど)。 。

3. ラベル付きトレーニング セットは、各インスタンスの目的のソリューション (ラベルとも呼ばれます) を含むトレーニング セットです。

4. 最も一般的な 2 つの教師ありタスクは、回帰と分類です。

5. 一般的な教師なしタスクには、クラスタリング、視覚化、次元削減、および相関ルールの学習が含まれます。

6. ロボットにさまざまな未知の地形での歩行を学習させたい場合、これは通常、強化学習によって解決される典型的な問題であるため、強化学習が最適なパフォーマンスを発揮する可能性があります。

強化学習問題を教師あり学習問題または半教師あり学習問題として定式化することも可能ですが、これはあまり自然な考え方ではありません。

7. グループを定義する方法がわからない場合は、クラスタリング アルゴリズム (教師なし学習) を使用して、顧客を同様の顧客のクラスターに分割できます。

ただし、必要なグループがわかっている場合は、各グループの多数のインスタンスを分類アルゴリズム (教師あり学習) にフィードし、すべての顧客をそれらのグループに分類できます。

8. スパム検出は典型的な教師あり学習問題です。アルゴリズムに多くの電子メールとそのラベル (スパムかどうか) を入力します。

9. バッチ学習システムとは対照的に、オンライン学習システムは増分学習が可能です。これにより、変化するデータや自動化システムに迅速に適応し、大量のデータを処理できるようになります。

10. アウトオブコア アルゴリズムは、コンピューターのメイン メモリに収まらない大量のデータを処理できます。アウトオブコア学習アルゴリズムは、データをミニバッチに分割し、オンライン学習手法を使用してこれらのデータのミニバッチから学習します。

11. インスタンスベースの学習システムは、暗記によってトレーニング データを学習しようとします。次に、新しいインスタンスが与えられると、類似性の尺度を使用して最も類似したインスタンスを見つけ、それらを予測に利用します。

12. モデルには、新しいインスタンスが与えられた場合にモデルが何を予測するかを決定する 1 つ以上のモデル パラメーターがあります (線形モデルの傾きなど)。

学習アルゴリズムは、モデルが新しいインスタンスに適切に一般化されるように、これらのパラメーターの最適な値を見つけようとします。ハイパーパラメータは、モデルのパラメータではなく、学習アルゴリズム自体のパラメータです(適用する正則化の量など)。

13. モデルベースの学習アルゴリズムは、モデルが新しいインスタンスに適切に一般化できるように、モデル パラメーターの最適な値を検索します。通常、このようなシステムはコスト関数を最小化することによってトレーニングされます。

この関数は、システムがトレーニング データに対してどの程度不正確な予測を行うかを測定し、モデルが正則化されている場合にはモデルの複雑さにペナルティを加えます。予測を行うには、学習アルゴリズムによって見つかったモデルのパラメーター値を使用します。

新しいインスタンスの特徴は、モデルの予測関数に入力されます。

14. 機械学習における主な課題には、データ不足、データ品質の低下、データの過小表現、情報不足、単純すぎてトレーニング データに適合しないモデル、および複雑すぎてデータに過剰適合するモデルなどがあります。

15. モデルがトレーニング データでは良好に機能するが、新しいインスタンスでは一般化が不十分な場合、モデルはトレーニング データを過剰適合している可能性があります (またはトレーニング データに関しては非常に幸運でした)。

過学習に対する考えられる解決策は、より多くのデータを取得するか、モデルを単純化する (より単純なアルゴリズムを選択する、使用するパラメーターや特徴の数を減らす、またはモデルを正規化する)、またはトレーニング データのノイズを減らすことです。

16. テスト データ セットは、運用環境を起動する前に、新しいインスタンスでのモデルの汎化誤差を推定するために使用されます。

17. 検証セットはモデルを比較するために使用されます。これにより、最適なモデルの選択とハイパーパラメータの調整が可能になります。

18. train-dev セットは、トレーニング データセットと、検証およびテスト データセットで使用されるデータとの間に不一致がある場合に使用できます (このデータセットは、モデルが運用開始後に使用するデータセットに常にできるだけ近いものである必要があります) )

train-dev セットは、トレーニング セットの一部です (モデルはトレーニングされませんでした)。モデルは残りのトレーニング セットでトレーニングされ、トレーニング 開発セットと検証セットで評価されます。

モデルがトレーニング セットでは良好に機能するが、train-dev セットではパフォーマンスが悪い場合、モデルはトレーニング セットを過剰適合している可能性があります。トレーニング セットと train-dev セットの両方で良好なパフォーマンスが得られる場合、

しかし、検証セットではうまく機能しません。その場合、トレーニング データと検証データおよびテスト データの間に明らかなデータの不一致がある可能性があります。そのため、検証データとテスト データにより似たものになるようにトレーニング データを改善する必要があります。データ。

19. テスト セットを使用してハイパーパラメーターを調整する場合、テスト セットを過剰適合させる可能性があり、測定された汎化誤差が楽観的すぎる可能性があります (予想よりも悪いパフォーマンスのモデルが得られる可能性があります)。

おすすめ

転載: blog.csdn.net/Morganfs/article/details/124030706