機械学習の問題を解決する一般的な方法があります!これを読んでください

機械学習の問題を解決する一般的な方法があります!これを読んでください

編集者注: この記事は、WeChat パブリック アカウント「Big Data Digest」(ID: BigDataDigest) からの引用です。著者: Abhishek Thakur、翻訳: Cathy、Huang Wenchang、Jiang Fanbo、Han Xiaoyang、公開の許可は 36Kr にあります。

平均的なデータ サイエンティストは毎日大量のデータを処理します。データのクリーニング、処理、機械学習モデルを適用できる形式へのデータ変換に、60% ~ 70% 以上の時間が費やされているという人もいます。

この記事では、後者、つまり機械学習モデルの適用(前処理段階を含む)に焦点を当てます。この記事で説明する内容は、私が参加した何百もの機械学習コンテストから得たものです。ここで説明する方法は一般的に適用可能なものであり、もちろん専門家が使用するより複雑な方法も多数あることに注意してください。

次はPythonを使います。

データ

機械学習モデルを適用する前に、すべてのデータを表形式に変換する必要があります。下の図に示すように、このプロセスは最も時間がかかり、難しい部分です。

変換が完了すると、表形式のデータを機械学習モデルに取り込むことができます。表形式のデータは、機械学習やデータマイニングにおける最も一般的なデータ表現形式です。 x 軸にサンプル データ、y 軸にラベルが付いたデータ テーブルがあります。質問の形式に応じて、ラベルは 1 列または複数列にすることができます。 X を使用してデータを表し、y を使用してラベルを表します。

タグの種類

タグは、解決する問題の種類を定義します。問題にはさまざまなタイプがあります。例えば:

  • 単一列、バイナリ値(分類問題、サンプルは 1 つのクラスのみに属し、クラスは 2 つだけ)

  • 単一列、実数値(回帰問題、1 つの値のみを予測)

  • 複数の列、バイナリ値(分類問題、1つのサンプルは1つのクラスに属しますが、クラスは2つ以上あります)

  • 複数の列、実数値(回帰問題、複数の値の予測)

  • 複数のラベル(分類問題、サンプルは複数のクラスに属することができます)

評価指標

どのようなタイプの機械学習の問題でも、結果を評価する方法、つまり評価基準と目的は何かを知っておく必要があります。たとえば、不均衡なバイナリ分類問題の場合、通常は受信者動作特性曲線の下の領域 (ROC AUC または単に AUC) を選択します。マルチラベルまたはマルチクラスの分類問題の場合、通常はカテゴリクロスエントロピーまたはマルチクラス対数損失を選択します。回帰問題の場合、平均二乗誤差を選択します。

問題に応じてさまざまな評価指標の種類があるため、ここでは詳しく説明しません。

図書館

機械学習ライブラリの実験を始めるには、まず numpy や scipy などの最も基本的で重要なライブラリをインストールすることから始めます。

  • データ操作の表示と実行: pandas (http://pandas.pydata.org/)

  • さまざまな機械学習モデルの場合: scikit-learn (http://scikit-learn.org/stable/)

  • 最高の勾配ブースティング ライブラリ: xgboost (https://github.com/dmlc/xgboost)

  • ニューラルネットワークの場合: keras (http://keras.io/)

  • データプロット: matplotlib (http://matplotlib.org/)

  • 進捗状況の監視: tqdm (https://pypi.python.org/pypi/tqdm)

Anaconda は使いやすく、これらすべてが準備されていますが、私は自分で設定して自由に使用することに慣れているため、使用していません。もちろん、決定権はあなたにあります。

機械学習の全体的な枠組み

2015 年から、自動機械学習フレームワークの開発に着手しました。現在も改良が続けられており、近々リリースされる予定です。以下に示すフレームワーク図は、この記事で説明する基本的なフレームワークです。

画像出典: A. Thakur および A. Krohn-Grimberghe、「AutoCompete: 機械学習コンペティションのフレームワーク」、AutoML ワークショップ、International Conference on Machine Learning 2015

上記のフレームワーク図では、ピンクの線は最もよく使用されるパスを表しています。データを抽出して表形式にしたら、機械学習モデルの構築を開始できます。

最初のステップは、問題を特定(区別)することです。これは、ウォッチ タグを使用することで解決できます。この問題がバイナリ分類、マルチクラスまたはマルチラベル分類、あるいは回帰問題のいずれであるかを知っておく必要があります。問題が特定されると、データはトレーニング セットとテスト セットの 2 つの部分に分割できます。下の図の通りです。

データをトレーニング セットと検証セットに分割することは、ラベルに基づいて行う必要があります。分類の問題に遭遇した場合は、階層的セグメンテーションを使用するのが適切です。 Python では、scikit-learn を使用すると簡単にこれを行うことができます。

回帰問題が発生した場合、単純な K 分割で十分です。もちろん、トレーニング セットと検証セットの元の分布を維持しながらデータを分割する複雑な方法も数多くあります。これは読者の課題として残しておきます。

関連: スタートアップの教訓: 迅速に行動する必要がある理由

上記の例では、検証セットとして全データの 10% を使用することを選択しました。もちろん、特定のデータに基づいてサンプリング サイズを決定することもできます。

データを分割した後は、それを脇に置いて触れないようにしてください。トレーニング セットに対して実行されたすべての操作は保存され、検証セットに適用する必要があります。検証セットはトレーニング セットと決して混同しないでください。なぜなら、混ぜ合わせた後は、評価指標値はユーザーが満足する値に戻ったものの、モデルが過剰適合しているため使用できないからです。

次のステップは、データ内のさまざまな変数を識別することです。一般的に、変数には数値変数、カテゴリ変数、テキスト変数の 3 種類があります。人気のタイタニックデータセットを例として使用してみましょう。 (https://www.kaggle.com/c/titanic/data)。

ここでは、「生存」がラベルです。前のステップでは、トレーニング セットからラベルを削除しました。次に、pclass、sex、embarked 変数があります。これらの変数は異なるレベルで構成されているため、カテゴリ変数です。年齢、樹齢、乾き具合などは数値変数です。名前はテキストを含む変数ですが、生存を予測するのには役立たないと思います。

まず数値変数を分離します。これらの変数はいかなる種類の処理も必要としないため、正規化して機械学習モデルを適用することができます。

カテゴリ変数を処理する方法は 2 つあります。

  • カテゴリ変数をラベルに変換する

  • ラベルをバイナリ変数に変換する

OneHotEncoder を適用する前に、LabelEncoder を使用してカテゴリ変数を数値変数に変換することを忘れないでください。

タイタニック号のデータにはテキスト変数の良い例がないので、テキスト変数を処理するための独自の一般的なルールを作成します。いくつかのテキスト分析アルゴリズムを使用して、すべてのテキスト変数を結合し、数値に変換できます。

テキスト変数は次のように統合できます。

次に、CoutVectorizer または TfidfVectorizer を適用します。

または

TfidfVectorizer は、ほとんどの場合、単純なカウントよりも優れたパフォーマンスを発揮します。ほとんどの場合、次のパラメータ設定で良好な結果が得られます。

トレーニング セットでベクトル化 (またはその他の操作) を実行する場合は、後で検証セットに適用できるように必ずディスクに保存してください。

次にスタッカーモジュールがあります。スタッカー モジュールはモデルのスタッキングではなく、機能のスタッキングを行います。上記の処理手順の後に得られたさまざまな機能は、スタッカー モジュールを通じて統合できます。

すべての特徴を水平に積み重ね、密な特徴か疎な特徴かに応じて numpy hstack または sparse hvstack を使用してさらに処理を行うことができます。

PCA や特徴選択などの他の処理手順がある場合には、FeatureUnion モジュールを介して実装することもできます (分解と特徴選択については後で説明します)。

特徴が得られたら、機械学習モデルの適用を開始できます。この段階では、次のようなツリーベースのモデルのみを使用する必要があります。

  • ランダムフォレスト分類器

  • ランダムフォレスト回帰

  • ExtraTrees 分類器

  • ExtraTrees リグレッサー

  • XGB 分類器

  • XGB リグレッサー

正規化が行われていないため、上記の特徴に線形モデルを適用することはできません。線形モデルを適用するには、scikit-learn の Normalizer または StandardScaler を使用します。

これらの正規化方法は密な特徴に限定されており、疎な特徴に対しては満足のいく結果が得られません。もちろん、平均を使用せずにスパース行列に StandardScaler を使用することもできます (パラメーター: with_mean=False)。

上記の手順で「良好な」モデルが完成したら、ハイパーパラメータをさらに最適化できます。これが不可能な場合は、次の手順を実行してモデルを改善できます。

次の手順では、モデルを分解します。

簡潔にするために、LDA 変換と QDA 変換は省略します。高次元データの場合、一般的に PCA を使用してデータを分解できます。画像の場合、10 ~ 15 個のコンポーネントから開始し、結果の品質が向上し続けるにつれて、コンポーネントの数を徐々に増やします。その他のデータについては、開始点として 50~60 個のコンポーネントを選択します (数値データについては、処理できる限り PCA を使用しません)

テキスト データの場合、テキストをスパース マトリックスに変換した後、特異値分解 (SVD) が実行されます。TruncatedSVD と呼ばれる SVD のバリアントは、scikit-learn にあります。

一般的に、TF-IDF に有効な特異値分解成分の数は 120 ~ 200 です。数値を大きくすると効果は向上しますが、その効果は明ら​​かではなく、コンピュータ リソースの消費量は非常に多くなります。

モデルのパフォーマンスをさらに評価した後、線形モデルを評価できるようにデータセットをスケーリングできます。正規化またはスケーリングされた特徴は、機械学習モデルまたは特徴選択モジュールで使用できます。

特徴選択にはさまざまな方法があります。最も一般的に使用される方法の 1 つは、貪欲アルゴリズム選択 (前方または後方) です。具体的には、特徴を選択し、固定された評価マトリックスでモデルをトレーニングしてそのパフォーマンスを評価し、次に特徴を 1 つずつ追加または削除して、各ステップでモデルのパフォーマンスを記録します。最後に、パフォーマンス スコアが最も高い機能が選択されます。貪欲アルゴリズムの AUC とその評価マトリックスの例は、https://github.com/abhishekkrthakur/greedyFeatureSelection にあります。

このアプリは完璧ではないため、要件に応じて変更する必要があることに注意することが重要です。

その他のより高速な特徴選択方法では、モデルから最適な特徴を選択します。ロジスティック回帰モデルの係数を使用したり、ランダムフォレストをトレーニングして最適な機能を選択したりして、それを他の機械学習モデルで使用することができます。

過剰適合しないように、推定値またはハイパーパラメータの数をできるだけ少なくすることを忘れないでください。

特徴選択は、Gradient Boosting Machine を使用して実現することもできます。 xgboost を使用できる場合は、GBM は使用しないでください。xgboost の方がはるかに高速でスケーラブルです。

スパース データ セットの場合、特徴選択にランダム フォレスト分類器/ランダム フォレスト回帰器または xgboost を使用することもできます。

正のスパース データセットから特徴を選択するためのもう 1 つの一般的な方法は、カイ 2 乗に基づく特徴選択であり、これは scikit-learn で利用できます。

ここでは、カイ二乗検定と SelectKBest メソッドを組み合わせて、データから 20 個の特徴を選択しました。これ自体も、機械学習モデルを改善するために使用するハイパーパラメータの 1 つです。

中間変換体を保存することを忘れないでください。これらを使用して、検証セットのパフォーマンスを評価します。

次の(または、その直後の)主要なステップは、モデルの選択とハイパーパラメータの最適化です。

一般的に、機械学習モデルを選択するには次のアルゴリズムを使用します。

  • 分類

  • ランダムフォレスト

  • 骨髄線維症

  • ロジスティック回帰

  • ナイーブベイズ

  • サポートベクターマシン

  • K近傍法

  • 戻る

  • ランダムフォレスト

  • 骨髄線維症

  • 線形回帰

  • リッジ

  • 投げ縄

  • SVR

どのパラメータを最適化する必要がありますか?最適なパラメータを選択するにはどうすればよいでしょうか?これらは人々がよく遭遇する質問です。大規模なデータセットでさまざまなモデルとパラメータを扱った経験がなければ、これらの質問に答えることはできません。経験豊富な人は自分の秘密を公表したがりません。幸いなことに、私は共有したい豊富な経験を持っています。さまざまなモデルのハイパーパラメータの秘密を見てみましょう。

RS* = 適切な値が何であるかを判断するのは難しいため、これらのハイパーパラメータ間をランダムに検索します。

私の謙虚な意見(原作者の個人的な意見)では、上記のモデルは他のモデルよりも優れているため、他のモデルを評価する必要はありません。

繰り返しますが、これらの変換を保存することを忘れないでください。

次に、検証セットに対して同じことを行います。

上記のルールとフレームワークは、私が遭遇したデータセットではうまく機能しました。もちろん、特に複雑な状況では失敗することもあります。世の中に完璧というものは存在しません。機械学習と同じように、私たちは学びながら改善し続けることしかできません。

<<:  ディープラーニングによる物体検出モデルの包括的なレビュー: 高速 R-CNN、R-FCN、SSD

>>:  Google の AI 覇権を解決する別の方法は?開発プラットフォームのエコシステム包囲

ブログ    

推薦する

超低消費電力センサーソリューションがスマートビルディングを実現する方法

現在、モノのインターネット(IoT)のインフラストラクチャはすでに非常に完成しており、その適用範囲は...

これらの「ブラックテクノロジー」は洪水対策をよりスマートにする

現在、我が国の南北はともに洪水の季節を迎え、大雨が頻繁に発生し、洪水の予防と制御は危機的な段階に達し...

NTU Yu Yangによる徹底分析:「世界モデル」とは何か?

メディアがSoraを大々的に宣伝するなか、OpenAIの紹介資料ではSoraを「世界シミュレーター」...

ベアリングポイント調査 - 2022 年の 5 つのテクノロジー トレンド

[[429514]]ベアリングポイントは、IT リーダーが今後 1 年間にどのテクノロジー分野に重点...

このような秩序だったニューロンは、皆さんがよくご存知の再帰型ニューラル ネットワークに似ていますか?

本論文では、これまでの RNN モデル研究に基づいて、隠れ状態ニューロン間の更新頻度の順序を強制し、...

OpenAIがカスタムコマンド機能を開始、会話ごとに好みや情報を繰り返す必要がなくなる

OpenAIは7月21日、カスタム指示機能のリリースを発表しました。この機能はまずPLUSプランのベ...

ニューラルネットワークはどのように学習するのでしょうか?

坂を下るのと同じように、損失関数の最低点を見つけます。 [[336501]]ニューラル ネットワーク...

Googleの人工知能学習により低ピクセル画像も鮮明に

【環球網智能報記者張洋】過去2年間で、人工知能技術が次のホットスポットとなり、多くの有名なテクノロジ...

AIカメラとLiDARがスマート道路にとって重要な理由

今年 1 月の Consumer Electronics Show は、今後数年間に自動車市場に参入...

...

IoT生体認証は職場でより大きな役割を果たす

組織はセンサーや監視を通じて職場のセキュリティと従業員の安全性を向上させるために生体認証を使用できま...

...

Google が史上最強の人間の脳の「地図」を公開、3D ニューロンの「森」がオンラインで閲覧可能に

シナプスはニューラルネットワークの「橋」です。人間の脳には 860 億個のニューロンがあり、あるニュ...

ダイクストラアルゴリズムに関する予備的研究

ダイクストラアルゴリズム (Dijkstra アルゴリズムとも呼ばれます) は、有向グラフ内の単一の...