機械学習の問題を解決する一般的な方法があります!この記事を1つだけ読んでみてください!

機械学習の問題を解決する一般的な方法があります!この記事を1つだけ読んでみてください!

[[205485]]

アビシェーク・タクル

編集者: Cathy、Huang Wenchang、Jiang Fanbo、Han Xiaoyang

1. はじめに

この記事は、Searchmetrics のシニア データ サイエンティストである Abhishek Thakur 氏によって寄稿されました。

平均的なデータ サイエンティストは毎日大量のデータを処理します。データのクリーニング、処理、機械学習モデルを適用できる形式へのデータ変換に、60% ~ 70% 以上の時間が費やされているという人もいます。この記事では、後者、つまり機械学習モデルの適用(前処理段階を含む)に焦点を当てます。この記事で説明する内容は、私が参加した何百もの機械学習コンテストから得たものです。ここで説明する方法は一般的に適用可能なものであり、もちろん専門家が使用するより複雑な方法も多数あることに注意してください。

次はPythonを使います。

2. データ

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

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

1. ラベルの種類

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

  • 単一列、バイナリ値(分類問題、サンプルは 1 つのクラスのみに属し、クラスは 2 つだけ)
  • 単一列、実数値(回帰問題、1 つの値のみを予測)
  • 複数の列、バイナリ値(サンプルが1つのクラスに属しているが、2つ以上のクラスがある分類問題)
  • 複数列、実数値(回帰問題、複数値の予測)
  • 複数のラベル(分類問題、サンプルは複数のクラスに属することができます)

2. 評価指標

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

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

3. 図書館

機械学習ライブラリの実験を始めるには、まず 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 は使いやすく、これらすべてが準備されていますが、私は自分で設定して自由に使用することに慣れているため、使用していません。もちろん、決定権はあなたにあります。

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

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

画像出典:

A. Thakur および A. Krohn-Grimberghe、「AutoCompete: 機械学習コンペティションのフレームワーク」、AutoML ワークショップ、機械学習に関する国際会議 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 つです。

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

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

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

(1)分類

  • ランダムフォレスト
  • 骨髄線維症
  • ロジスティック回帰
  • ナイーブベイズ
  • サポートベクターマシン
  • K近傍法

(2)回帰

  • ランダムフォレスト
  • 骨髄線維症
  • 線形回帰
  • リッジ
  • 投げ縄
  • SVR

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

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

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

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

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

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

オリジナル:

http://www.iamwire.com/2016/10/approaching-almost-any-machine-learning-problem/142291?from=groupmessage&isappinstalled=0

[この記事は51CTOコラムBig Data Digest、WeChatパブリックアカウント「Big Data Digest(id: BigDataDigest)」のオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  ニューラルネットワークの問題を解決するための新しいアイデア: OpenAI は線形ネットワークを使用して非線形問題を計算します

>>:  マイクロソフト CEO ナデラ氏へのインタビュー: 人工知能の全体的な方向性と将来はどのようなものでしょうか?

ブログ    
ブログ    
ブログ    

推薦する

...

SOA におけるソフトウェア アーキテクチャ設計とソフトウェアとハ​​ードウェアの分離方法論

次世代の集中型電子電気アーキテクチャでは、中央+ゾーン中央コンピューティング ユニットと地域コントロ...

...

AI による効率化: データセンターのエネルギー使用を再定義

今日のデジタル時代において、データ センターは、私たちのつながった世界を動かし続けるための膨大な情報...

Xiaolin が LRU アルゴリズムを破壊!

[[411501]]この記事はWeChatの公開アカウント「Xiao Lin Coding」から転...

Go言語で遺伝的アルゴリズムを実装する方法

ただの楽しみのために、Go 言語を学ぶことにしました。新しい言語を学ぶ最良の方法は、深く学び、できる...

LRU キャッシュ アルゴリズムの Java カスタム実装

背景LinkedHashMap は HashMap を継承し、内部的に removeEldestEn...

スマートヘルスケアが業界のトレンドをリード、AI無人薬局の導入が加速

スマート医療産業の急速な発展は、多くの患者に恩恵をもたらしています。伝統的な医療業界をアップグレード...

...

TFとPyTorchだけを知っているだけでは不十分です。PyTorchから自動微分ツールJAXに切り替える方法を見てみましょう。

現在のディープラーニング フレームワークに関しては、TensorFlow と PyTorch を避け...

ビデオ分析が物流と製造業の業務と安全性をどのように改善するか

[[400684]]製造品に対する世界的な需要が高まり続ける中、製造組織とサプライチェーン内のセキュ...

VSCodeでChatGPTを実行すると、ファイルを直接生成できます。

人気の ChatGPT には、コード生成という非常に目を引く機能があります。多くの開発者はすでにプロ...

JetBrains が 2023 年開発者レポートをリリースしました。 35年来の危機は存在するのか?最高のプログラミング言語はどれですか?

開発者の間で大きな影響力を持つ JetBrains が、毎年恒例の「開発者エコシステムの現状」レポー...

微調整の必要はありませんか? 3つのサンプル、LLMアライメントを修正するための1つのヒント、エンジニアのヒント:すべて戻る

教師なしテキストコーパスのみで事前トレーニングされた基本的な大規模言語モデル (LLM) は、通常、...

OpenAI、リーダーシップ争いの末に新事業GPTストアを立ち上げ

ChatGPT Team は OpenAI の Enterprise Edition 製品の小型版で...