人工知能ランダムフォレストアルゴリズムプロジェクト実際の戦闘


ランダムフォレスト(ランダムフォレスト)は統合アルゴリズムであり、複数の決定木がフォレストを形成します。このアルゴリズムのソースコードとそのアプリケーションについて説明しましょう。

(1)ランダムフォレストアルゴリズムの概要

ランダムフォレストは、基本モデルとして決定木を使用した統合アルゴリズムです。ランダムフォレストは、機械学習モデルの分類と回帰で最も成功したモデルの1つです。多数の決定木を組み合わせて、過剰適合のリスクを軽減します。決定木と同様に、ランダムフォレストは分類特徴を処理し、マルチクラス分類設定に拡張し、特徴のスケーリングを必要とせず、非線形性と特徴の相互作用をキャプチャできます。

ランダムフォレストは一連の決定木を個別にトレーニングするため、トレーニングプロセスは並行しています。ランダムプロセスがアルゴリズムに追加されるため、各決定木にはわずかな違いがあります。各ツリーの予測結果をマージして予測の分散を減らすことにより、テストセットのパフォーマンスを向上させます。

ランダム性

1.各反復で、元のデータをサブサンプリングして、さまざまなトレーニングデータを取得します

2.ツリーノードごとに、分割するさまざまなランダム機能サブセットを検討します

さらに、意思決定中のトレーニングプロセスは、単一のデシジョンツリーのトレーニングプロセスと同じです。

新しいインスタンスを予測する場合、ランダムフォレストは、さまざまな決定木の予測結果を統合する必要があります。回帰問題と分類問題の統合は少し異なります。分類問題は投票システムを採用しています。各決定木はカテゴリに投票し、投票数が最も多いカテゴリが最終結果になります。回帰問題では、各ツリーの予測結果は実数であり、最終的な予測結果は各ツリーの予測結果の平均です。

Sparkのランダムフォレストアルゴリズムは、連続特徴とカテゴリ特徴に適した、バイナリ分類、複数分類、回帰ランダムフォレストアルゴリズムをサポートしています。

(2)ランダムフォレストアプリケーションのシナリオ

分類タスク:
1。広告システムのクリックスルー率予測

2.レコメンデーションシステムの二次再ランクソート

3.金融業界は、ローンリスク評価にランダムフォレストを使用できます

4.保険業界は、保険プロモーションの予測にランダムフォレストを使用できます

5.医療業界は、ランダムフォレストを使用して、補助的な診断および廃棄モデルを生成できます。

回帰タスク
1.子供の身長を予測する

2.eコマースWebサイトでの製品販売予測

ランダムフォレストは、複数の決定木で構成されています。作成できるランダムフォレストも、より良い結果で作成できます。

(3)スパークランダムフォレストトレーニングおよび予測プロセス

ランダムフォレストは、一連の決定木を個別にトレーニングするため、トレーニングを並行して実行できます。アルゴリズムは、トレーニングプロセスにランダム性を注入して、各決定木をわずかに異なるものにします。各ツリーの予測を組み合わせると、予測の分散を減らし、テストデータのパフォーマンスを向上させることができます。

トレーニング

トレーニングプロセスに注入されるランダム性には、次のものが含まれます。

各反復で元のデータセットをサブサンプリングして、異なるトレーニングセット(ブートストラップなど)を取得します。

各ツリーノードで分割されたさまざまなランダム機能サブセットを検討してください

これらのランダム化を除いて、決定木は単一の決定木と同じ方法でトレーニングされます。

予測

新しいインスタンスの予測を行うには、ランダムフォレストがさまざまな決定木の予測を統合する必要があります。分類と回帰の場合、この統合方法は異なります

分類

多数決の原則。各ツリーの予測は、クラス投票としてカウントされます。ラベルは、投票数が最も多いカテゴリになると予想されます

戻る

平均。各ツリーは真の値を予測します。予測ラベルは、各ツリーによって予測された平均です。

(4)Sparkランダムフォレストモデルパラメータの詳細な説明

ランダムフォレストには多くのパラメーターがあります。実際の作業では、モデルが最適な状態になるようにパラメーター値を調整することがよくあります。パラメーター調整の方法に加えて、各機能の計算式を手動で改善し、追加します。データ機能、および常に最適化モデル。パラメータの調整は、実際の作業に不可欠なリンクです。使用可能なパラメータを見てみましょう。

タイプ1:整数タイプ

意味:チェックポイント間隔を設定する(> = 1)、またはチェックポイントを設定しない(-1)

タイプ2:文字列タイプ

意味:各分割の候補フィーチャの数

タイプ3:文字列タイプ

意味:フィーチャ列名

タイプ4:文字列タイプ

意味:情報ゲインを計算するための基準(大文字と小文字は区別されません)

タイプ5:文字列タイプ

意味:情報ゲインを計算するための基準(大文字と小文字は区別されません)

タイプ6:文字列タイプ

意味:ラベル列名

タイプ7:整数型

意味:連続特徴の離散化の最大数、および各ノードの分割特徴を選択する方法

タイプ8:整数型

意味:木の最大の深さ(> = 0)

デシジョンツリーの最大深度max_depth、デフォルトは入力できません。入力しない場合、デシジョンツリーはサブツリーの作成時にサブツリーの深度を制限しません。一般的に、この値は、データまたは機能が少ない場合は無視できます。モデルのサンプルサイズが大きく、特徴が多い場合は、この最大深度を制限することをお勧めします。具体的な値は、データ分布によって異なります。一般的に使用されるのは10〜100の間です

パラメータ効果:値が大きいほど、決定木が複雑になり、過剰適合しやすくなります。

タイプ9:倍精度タイプ

意味:ノードを分割するときに必要な最小限の情報ゲイン

タイプ10:整数型

意味:分割後にノードに含まれるインスタンスの最小数

タイプ11:整数タイプ

意味:訓練された木の数

タイプ12:ストリングタイプ

意味:予測結果の列名

タイプ13:文字列タイプ

意味:カテゴリ条件付き確率予測結果の列名

タイプ14:文字列タイプ

意味:当初の予測

タイプ15:長整数

意味:ランダムシード

タイプ16:倍精度タイプ

意味:決定木を学習するために使用されるトレーニングデータの割合、範囲[0,1]

タイプ17:倍精度配列タイプ

意味:各カテゴリの予測結果の確率を調整するためのマルチカテゴリ予測のしきい値

上記のパラメータのいくつかは精度に大きな影響を与え、いくつかは比較的小さいです。その中で、パラメータmaxDepthは精度に大きな影響を与えますが、設定が高すぎると過剰適合しやすくなります。実際の状況に応じて妥当な値を設定する必要がありますが、通常は20以下です。

(5)ランダムフォレストソースコードの戦闘をスパークする

トレーニングデータの形式は、上記の決定木と同じです。ランダムフォレストは、二項分類、複数分類、回帰に使用できます。また、売上予測などの回帰アプリケーションシナリオにも使用できます。良い効果。売上予測には時系列アルゴリズムが使用されますが、ランダムフォレストの効果は時系列の効果に劣りません。これには、パラメーター調整と機能エンジニアリング調整の努力が必要です。次のコードは、データモデルをトレーニングする方法、モデルに従ってフィーチャが属する分類を予測する方法、およびモデルが永続化およびロードされる方法の完全なプロセスを示しています。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入

上記のランダムフォレストアルゴリズムは、複数の決定木で構成されており、統合アルゴリズムであり、バギングワードバッグモデルに属しています。どのように機能するかを見てみましょう。

動作原理

バギングに基づくランダムフォレスト(ランダムフォレスト)は、決定木のコレクションです。ランダムフォレストでは、多くの決定木(「フォレスト」と呼ばれます)を収集します。属性に基づいて新しいオブジェクトを分類するために、各ツリーに分類が与えられ、次にこれらのツリーの結果が「投票」され、最後に投票数が最も多いカテゴリが選択されます。

各ツリーは次のように構成されます。

各ツリーのトレーニングとしてN個のトレーニングサンプルが取得された場合、1つのサンプルがランダムに選択され、次のサンプリングが置換されて実行されます。各サンプリングで得られたN個のサンプルは、ツリーのトレーニングデータとして使用されます。

入力変数(特徴値)がM個ある場合は、各ノードでm個の特徴がMからランダムに選択され、これらのm個の特徴がノードの最適化に使用されるように数m(Mよりはるかに小さい)を指定します。適切なセグメンテーション。森が成長しても、mの値は変わりません。

すべての木は可能な限り自由に成長します。トリミングなし。

ランダムフォレストの利点

このアルゴリズムは、分類と回帰という2種類の問題を解決でき、2つの側面で適切な推定を行いました。

私を最も興奮させるランダムフォレストの利点の1つは、より高い次元の大きなデータセットを処理できることです。何千もの入力変数を処理し、最も重要な変数を識別することができるため、次元削減方法の1つと見なされます。さらに、モデル出力変数の重要性。これは非常に便利な関数です(一部のランダムデータセットで)。

欠落データを推定し、ほとんどのデータが欠落している場合に精度を維持する効果的な方法があります。

不均衡なデータセットのエラーのバランスをとる方法があります。

上記の関数は、ラベルのないデータに拡張でき、教師なしクラスタリング、データビュー、および外れ値の検出につながります。

ランダムフォレストには入力データのサンプリングが含まれ、置換はブートストラップサンプリングと呼ばれます。ここにあるデータの3分の1はトレーニングには使用されず、テストに使用できます。これらは、out-of-bagサンプルと呼ばれます。バッグの外側のこれらのサンプルの推定誤差は、バッグの外側の誤差と呼ばれます。Out of bagによるエラー推定に関する調査では、out-of-bag推定は、トレーニングセットと同じサイズのテストセットを使用するのと同じくらい正確であることが証明されています。したがって、アウトオブバッグエラー推定を使用すると、テストセットを予約する必要がなくなります。

ランダムフォレストのデメリット

分類はうまくいきますが、正確な連続性予測が得られないため、回帰問題ほど良くはありません。回帰の場合、予測を行うためのトレーニングデータの範囲を超えることはなく、特にノイズの多いデータセットに適合しすぎる可能性があります。

ランダムフォレストは、統計モデラーにとってブラックボックスアプローチのように感じることがあります。モデルの役割をほとんど制御できません。さまざまなパラメータとランダムシードを試すことができます。

実際の使用では、Sparkランダムフォレストに問題があることもわかりました。Sparkのデフォルトのランダムフォレストバイナリ分類予測は0と1のみを返し、確率値を返すことはできません。たとえば、広告がクリックされる確率を予測する場合、それがすべて1の場合、どちらが最初にランク付けされ、どちらが2番目にランク付けされますか?より厳密なソートが必要です。これは連続した10進値でなければなりません。したがって、確率をサポートする値を返すことができるように、元のSparkランダムフォレストアルゴリズムを再開発する必要があります。

ソースコードを変更する前に、そのソースコードを理解できる必要があるため、ソースコードの変更は一般により複雑です。そうでなければ、どこから始めればよいのかわかりません。理解した後、変更が必要な最も重要な機能を見つけたら、ビジネス機能を実装するためにできるだけ変更を加えないでください。これにより、変更を加えたり、他のバグを引き起こしたりすることはありません。ランダムフォレストが私たちのニーズを満たすことができるように、二次開発を行う方法について話しましょう。

(6)スパークランダムフォレストトレーニングおよび予測プロセス

確率値をサポートするようにSparkRandom Forestを変更するには、1つのクラスtreeEnsembleModels.scalaのみが必要です。

元の2つの関数を次のように変更します。

/ **

  • トレーニングされたモデルを使用して、単一のデータポイントの値を予測します。

  • 単一のデータポイントを表す@paramfeatures配列

  • トレーニング済みモデルからの@return予測カテゴリ

* /

defpredict(機能:ベクトル):Double = {

(algo, combiningStrategy) match {

  case (Regression, Sum) =>

    predictBySumming(features)

  case (Regression, Average) =>

    predictBySumming(features) / sumWeights

  case (Classification, Sum) => // binary classification

    val prediction = predictBySumming(features)

    // TODO: predicted labels are +1 or -1 for GBT. Need a better way to store this info.

    if (prediction > 0.0) 1.0 else 0.0

  case (Classification, Vote) =>

    predictByVoting(features)

  case _ =>

    throw new IllegalArgumentException(

      "TreeEnsembleModel given unsupported (algo, combiningStrategy) combination: " +

        s"($algo, $combiningStrategy).")

}

}

/ **

  • > * /に基づいて単一のデータポイントを分類します

private def ForecastByVoting(features:Vector):Double = {

val votes = mutable.Map.empty[Int, Double]

trees.view.zip(treeWeights).foreach { case (tree, weight) =>

  val prediction = tree.predict(features).toInt

  votes(prediction) = votes.getOrElse(prediction, 0.0) + weight

}

votes.maxBy(_._2)._1

}

2つの変更された機能:

def ForecastChongDianLeMe(features:Vector):Double = {

(algo, combiningStrategy) match {

  case (Regression, Sum) =>

    predictBySumming(features)

  case (Regression, Average) =>

    predictBySumming(features) / sumWeights

  case (Classification, Sum) => // binary classification

    val prediction = predictBySumming(features)

    // TODO: predicted labels are +1 or -1 for GBT. Need a better way to store this info.

    if (prediction > 0.0) 1.0 else 0.0

  case (Classification, Vote) =>

    //我们用的是基于投票的分类算法,关键改这里。用我们自己实现的投票算法。

    predictByVotingChongDianLeMe(features)

  case _ =>

    throw new IllegalArgumentException(

      "TreeEnsembleModel given unsupported (algo, combiningStrategy) combination: " +

        s"($algo, $combiningStrategy).")

}

}

private def ForecastByVotingChongDianLeMe(features:Vector):Double = {

val votes = mutable.Map.empty[Int, Double]

trees.view.zip(treeWeights).foreach { case (tree, weight) =>

  val prediction = tree.predict(features).toInt

  votes(prediction) = votes.getOrElse(prediction, 0.0) + weight

}

//投票結果が見つかった後に投票したツリーのレコードをフィルタリングします

val zVotes = votes.filter(p => p._1==1)

var zTrees = 0.0

if (zVotes.size > 0) {

  zTrees = zVotes.get(1).get

}

//返回投赞成票的树的数量zTrees,我们训练设置树的个数是总数total,zTrees*1.0/total=概率,就是广告被点击的一个概率小数值。

zTrees

}

このように、コードを変更しました。予測関数は、zTreesに投票したツリーの数を返します。呼び出し側で確率値に変更すると、トレーニングして設定したツリーの数は、合計数になります。 zTrees * 1.0 / total =確率は、広告がクリックされる確率の10進値です。もちろん、小数に変更せずにzTreeの投票数で並べ替えることもできます。変更後、プロジェクトをコンパイルしてパッケージ化する必要があります。Sparkプロジェクトは非常に大きく、ソース環境を調整するとそれほど簡単ではありません。実際、環境を改善するためには多くの問題があります。もう1つは、コードを変更してパッケージ化することです。これまでに行ったことがない場合は、コードを調べる必要があります。コンパイルされたjarパッケージを、オンラインクラスターの対応するjarパッケージに置き換えるだけです。

(7)ランダムフォレストとGBDTの関係と違い

上記のランダムフォレストは、Baggingのワードバッグモデルに基づいています。Spakには、統合アルゴリズムとGradientBoostedTreesアルゴリズムを形成する複数のツリーもあります。GradientBoostedTreesは、略してGBDTと呼ぶことができます。これも統合アルゴリズムであり、Boostingに属しています。統合アルゴリズムですが、バギングと同じ機能がありますが、違いは何ですか?

バギングの方法は比較的単純です。複数のモデルをトレーニングし、各モデルを使用して投票します。各モデルの重みは同じです。分類の問題の場合は投票の総数が分類として使用され、回帰の場合は平均が使用されます。複数の弱い分類器を使用して、高性能分類器を統合します。典型的な代表はランダムフォレストです。ランダムフォレストは、各モデルをトレーニングするときにランダムな要素を追加し、特徴とサンプルをランダムにサンプリングしてから、各ツリーのトレーニング結果を統合します。ランダムフォレストは、複数の木を並行してトレーニングできます。

ブースティングは、反復アルゴリズムモデルである複数の決定木モデルもトレーニングします。トレーニングプロセスでは、誤分類されたサンプルにより多くの注意が払われます。誤分類される可能性が高いサンプルについては、後続のモデルトレーニングにより多くの労力が必要になります。注意してください。前回分割されたデータの重みを増やし、分割されたデータを気にするようになります。統合融合では、各トレーニングのモデルの重みが異なり、最後に最終的なモデルが重みによって融合されます。AdaboostとGBDTの両方がブースティングのアイデアを採用しています。

総括する

この記事には、対応するサポートビデオがあります。ランダムフォレストに加えて、よりエキサイティングな記事の充電アプリをダウンロードしてください。何千もの無料のレッスンと記事を入手できます。サポートする新しい本と教科書については、ChenJingleiの新しい本をご覧ください。分散型機械学習の実践」(人工知能科学技術シリーズ)

[新しい本の紹介]
「分散型機械学習の実践」(人工知能科学技術シリーズ)[ChenJinglei編集] [Tsinghua University Press]
新しい本の特徴:分散型機械学習のフレームワークと、パーソナライズされたレコメンデーションをサポートするアプリケーションについて説明します。ステップバイステップのアルゴリズムシステム、顔認識、対話ロボットおよびその他の実用的なプロジェクト

【新刊紹介動画】
分散型機械学習実践(人工知能科学技術シリーズ)新刊【チェン・ジンレイ】

ビデオ機能:新しい本の紹介、最新のテクノロジーホットスポットの分析、技術的なキャリアプランの提案に焦点を当てます!このレッスンを聞くと、人工知能の分野でまったく新しい技術的ビジョンが得られます。キャリア開発もより明確に理解できるようになります!

【優秀コース】
「分散型機械学習実戦」ビッグデータ人工知能AIエキスパートレベル優秀コース

【無料体験動画】:

人工知能百万年俸の成長ルート/ Pythonから最新のホットテクノロジーまで

初心者からPythonプログラミングの基礎がないことから、高度な実践的な一連の人工知能コースまで

ビデオ機能:この一連のエキスパートレベルの高品質コースには、対応するサポートブック「DistributedMachine Learning Practical Combat」があります。高品質のコースとブックは相互に補完し合うことができ、学習効率が大幅に向上します。この一連のコースと書籍では、分散型機械学習をメインラインとし、それが依存するビッグデータテクノロジーについて詳しく紹介します。その後、現在の主流の分散型機械学習のフレームワークとアルゴリズムに焦点を当てます。この一連のコースそして本は実際の戦闘に焦点を合わせています。最後に、私は皆のためのいくつかの産業レベルのシステム戦闘プロジェクトについて話します。コースのコアコンテンツには、インターネット企業のビッグデータと人工知能、ビッグデータアルゴリズムシステムアーキテクチャ、ビッグデータファンデーション、Pythonプログラミング、Javaプログラミング、Scalaプログラミング、Dockerコンテナ、Mahout分散型機械学習プラットフォーム、Spark分散型機械学習プラットフォーム、分散型が含まれます。深層学習フレームワークとニューラルネットワークアルゴリズム、自然言語処理アルゴリズム、産業グレードの完全なシステム戦闘(推奨アルゴリズムシステム戦闘、顔認識戦闘、対話ロボット戦闘)、雇用/インタビュースキル/キャリアプランニング/プロモーションガイダンスなど。

【有料ですか?会社紹介】

Rechargeable Appは、オフィスワーカー向けの職業訓練と学習に焦点を当てたオンライン教育プラットフォームです。

仕事の職業スキルの向上と学習に焦点を当て、仕事の効率を向上させ、経済的利益をもたらします!今日は充電していますか?

公式サイトhttp://www.chongdianleme.com/を充電してい
ますか

課金されますか?アプリの公式ウェブサイトのダウンロードアドレス
https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app

機能は次のとおりです。

【業界全体のポジション】-サラリーマンの職業スキルの向上に焦点を当てる

あなたがサラリーマン、エグゼクティブ、または起業家であるかどうかにかかわらず、すべての業界とポジションをカバーして、あなたが学びたいビデオと記事があります。その中でも、ビッグデータインテリジェントAI、ブロックチェーン、ディープラーニングは、インターネットの第一線の産業レベルの実践的な経験です。

専門的なスキルの学習に加えて、企業経営、公平なインセンティブとデザイン、キャリアプランニング、社会的エチケット、コミュニケーションスキル、プレゼンテーションスキル、会議スキル、メールスキル、仕事のプレッシャーを緩和する方法、個人的なつながりなどの一般的な職場スキルがあります。など。すべての面であなたの専門レベルと全体的な品質を向上させます。

【ニウレン教室】-ニウレンの実習体験を学ぶ

1.インテリジェントなパーソナライズエンジン:

さまざまな業界とポジションのスキルワードプリファレンスマイニング分析を通じて、すべての業界とすべてのポジションをカバーする大規模なビデオコースで、現在のポジションに最も関心のあるスキル学習コースをインテリジェントに照合します。

2.ネットワーク全体で講義を検索します

大規模なビデオコースを検索するためのキーワードを入力してください、すべてがあります、あなたに適したコースが常にあります。

3.クラスの聴取の詳細

ビデオ再生の詳細、現在のビデオの再生に加えて、関連するビデオコースや記事の読み方もあり、特定のスキル知識ポイントを強化して、特定の分野の上級エキスパートになることができます。

【優れた読書】-スキル記事の興味深い読書

1.パーソナライズされた読書エンジン:

さまざまな業界のポジションのスキルワードプリファレンスマイニング分析を通じて、すべての業界とすべてのポジションをカバーする数千万の記事を読み、現在のポジションで最も関心のあるスキル学習記事をインテリジェントに照合します。

2.ネットワーク検索全体を読む

キーワードを入力して、読むべき多数の記事を検索してください。すべてが利用可能であり、興味のある記事を学ぶスキルが常にあります。

[ロボット教師]-楽しい学習を個人的に強化する

検索エンジンとインテリジェントな深層学習トレーニングに基づいて、私たちはあなたをよりよく理解し、自然言語、娯楽と学習、効率的な学習、そして幸せな生活でロボット教師とチャットして学ぶロボット教師を作成します。

【ショートコース】-知識を効率的に学ぶ

時間の断片化された学習を満足させ、特定のスキル知識ポイントを迅速に向上させるための大規模な短期コース。

おすすめ

転載: blog.csdn.net/weixin_52610848/article/details/111302326