メイン コンテンツをスキップする 補完的コンテンツへスキップ

ランダムフォレストを使って分類モデルを作成する

このシナリオでは、ランダムフォレストを使った分類モデルの作成方法を説明します。

データフローを配列する

手順

  1. Talend StudioIntegrationパースペクティブで、[Repository] (リポジトリー)ツリービューの[Job Designs] (ジョブ設計)ノードから、たとえばrf_model_creationという名前の空のSpark Batchジョブを作成します。
    Spark Batchジョブの作成方法は、Sparkジョブを作成をご覧ください。
  2. 使用するコンポーネントの名前をワークスペースに入力し、表示されるリストからそのコンポーネントを選択します。
    このシナリオでは、コンポーネントは、tHDFSConfigurationtFileInputDelimitedtRandomForestModelコンポーネント、4つのtModelEncoderコンポーネントです。
    4つの各tModelEncoderコンポーネントに別々の名前を付けることをお勧めします。そうすれば、各コンポーネントを使って行うタスクを簡単に識別できるようになります。このシナリオではそれぞれ、Tokenizetftf_idf features_assemblerとラベル付けされています。
  3. [Row] (行) > [Main] (メイン)リンクを使い、tHDFSConfiguration以外のコンポーネントを接続させます。
    tRandomForestModelコンポーネントを使った7コンポーネントのジョブ。

Sparkが使用するファイルシステムに接続を設定

手順は、Getting Started Guideをご覧ください。

トレーニングセットを読み取る

手順

  1. tFileInputDelimitedをダブルクリックして、[Component] (コンポーネント)ビューを開きます。
  2. [Define a storage configuration component] (ストレージ設定コンポーネントを定義)チェックボックスをオンにし、使うtHDFSConfigurationコンポーネントを選択します。
    tFileInputDelimitedはこの設定を使い、使うトレーニングセットにアクセスします。
  3. [Edit schema] (スキーマを編集)の横にある[...]ボタンをクリックし、スキーマエディターを開きます。
  4. [+]ボタンを5回クリックして5つの行を追加し、[Column] (カラム)カラムで名前をそれぞれlabelsms_contentsnum_currencynum_numericnum_exclamationに変更します。
    labelカラムとsms_contentsカラムは、sms_contentsカラム内のSMSテキストメッセージで構成された生データを保持し、メッセージがスパムかどうかをlabelカラムでラベル表示します。
    他のカラムは、このシナリオで前に説明したように、生データセットに追加された機能を保持するために使われます。これらの3つの機能は、各SMSメッセージにある通貨記号の数、数値の数、感嘆符の数です。
  5. [Type] (タイプ)カラムで、カラムnum_currencynum_numericnum_exclamation[Integer] (整数)を選択します。
  6. [OK]をクリックして、これらの変更を検証します。
  7. [Folder/File] (フォルダー/ファイル)フィールドに、使うトレーニングセットが保管されているディレクトリーを入力します。
  8. [Field separator] (フィールド区切り)フィールドに\tを入力します。これはデータセットが使う区切りで、このシナリオ用にダウンロードできます。

tModelEncoderを使ってSMSテキストメッセージを特徴ベクトルに変換する

このステップには、4つのサブステップ(メッセージを単語に変換、各メッセージ内の単語の重みを計算、各メッセージ内の無関係な単語の重みを軽減、特徴ベクトルを結合)を必要とします。

手順

  1. メッセージを単語に変換する方法:
    1. [Tokenize] (トークン化)とラベル表示されたtModelEncoderコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。このコンポーネントは、SMSメッセージを単語にトークン化します。
    2. [Sync columns] (カラムを同期)をクリックして、先行のコンポーネントからスキーマを取得します。
    3. [Edit schema] (スキーマを編集)の横にある[...]ボタンをクリックし、スキーマエディターを開きます。
    4. 出力側で[+]ボタンをクリックして1行を追加し、[Column] (カラム)カラムで名前をsms_tokenizer_wordsに変更します。このカラムは、トークン化されたメッセージを保持するために使われます。
    5. [Type] (タイプ)カラムで、このsms_tokenizer_words行に[Object] (オブジェクト)を選択します。
    6. [OK]をクリックして、これらの変更を検証します。
    7. [Transformations] (変換)テーブルで[+]ボタンをクリックして1行を追加し、次の手順を実行します。
      1. [Input column] (入力カラム)カラムで、機能に変換するデータを提供するカラムを選択します。このシナリオではsms_contentsです。
      2. [Output column] (出力カラム)カラムで、機能を持つカラムを選択します。このシナリオではsms_tokenizer_wordsです。
      3. [Transformation] (変換)カラムで、変換に使うアルゴリズムを選択します。このシナリオではRegex tokenizerです。
      4. [Parameters] (パラメーター)カラムに、選択したアルゴリズムで使うためにカスタマイズするパラメーターを入力します。このシナリオではpattern=\\W;minTokenLength=3です。
      tModelEncoderはこの変換を使って、各入力メッセージをホワイトスペースで分割し、少なくとも3文字を含む単語のみを選択し、変換の結果をsms_tokenizer_wordsカラムに入力します。したがって、通貨記号、数値、句読点、およびaantoなどの単語はこのカラムから除外されます。
  2. 各メッセージ内の単語の重みを計算する方法:
    1. tfとラベル表示されたtModelEncoderコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。
    2. Tokenizeというラベルが付けられたtModelEncoderに前述の操作を繰り返して、Vector型のsms_tf_vectカラムを出力スキーマに追加し、上の画像に示すように変換を定義します。

      この変換では、tModelEncoderHashingTFを使って、トークン化済みのSMSメッセージを固定長(このシナリオでは15)の特徴ベクトルに変換し、各SMSメッセージの単語の重要性を反映します。

  3. 各メッセージ内の無関係な単語の重みを軽減する方法:
    1. tf_idfとラベル表示されたtModelEncoderコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。
      この処理で、tModelEncoderは出現頻度が非常に高いものの、出現しているメッセージが多すぎる単語の重みを軽くします。この種の単語は、theのようにテキスト分析に有意な情報をもたらさない場合が多いためです。
    2. Tokenizeというラベルが付けられたtModelEncoderに前述の操作を繰り返して、Vector型のsms_tf_idf_vectカラムを出力スキーマに追加し、上の画像に示すように変換を定義します。

      この変換では、tModelEncoder[Inverse Document Frequency] (文献出現頻度の逆数)を使って、5つ以上のメッセージに出現する単語の重みを軽くします。

  4. 特徴ベクトルを結合させる方法:
    1. features_assemblerとラベル表示されたtModelEncoderコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。
    2. Tokenizerとラベル表示されたtModelEncoderに前述の操作を繰り返して、Vector型のfeatures_vectカラムを出力スキーマに追加し、上の画像に示すように変換を定義します。
      [Parameters] (パラメーター)カラムに入力するパラメーターはinputCols=sms_tf_idf_vect,num_currency,num_numeric,num_exclamationです。
      この変換では、tModelEncoderはすべての機能Vectorを1つの機能カラムに結合します。

ランダムフォレストを使ってモデルをトレーニングする

手順

  1. tRandomForestModelをダブルクリックして[Component] (コンポーネント)ビューを開きます。
  2. [Label column] (ラベルカラム)リストから、分類に使われるクラスを提供するカラムを選択します。このシナリオではlabelです。このカラムには2つのクラス名が含まれています。ジャンクメッセージ用のspamと、通常のメッセージ用のhamです。
  3. [Features column] (特徴カラム)リストから、分析する特徴ベクトルを提供するカラムを選択します。このシナリオではfeatures_vectを選択します。これはすべての特徴を組み合わせます。
  4. [Save the model on file system] (モデルをファイルシステムに保存)チェックボックスをオンにし、表示された[HDFS folder] (HDFSフォルダー)フィールドに、生成されたモデルの保管に使うディレクトリーを入力します。
  5. [Number of trees in the forest] (フォレスト内のツリーの数)フィールドに、tRandomForestModelで構築するデシジョンツリーの数を入力します。現在のジョブを実行して分類モデルを作成するには、さまざまな数を数回試す必要があります。各実行で作成されたすべてのモデルの評価結果を比較した後、使う必要がある数を判断できます。このシナリオでは20入力します。
    評価ジョブは、次のいずれかのセクションに表示されます。
  6. 他のパラメーターはそのままにしておきます。

Sparkモードの選択

手順は、Getting Started Guideをご覧ください。

ジョブを実行して分類モデルを作成する

手順

F6を押してこのジョブを実行します。

タスクの結果

tRandomForestModelコンポーネントで指定したディレクトリーに、モデルファイルが作成されます 。

このページは役に立ちましたか?

このページまたはコンテンツにタイポ、ステップの省略、技術的エラーなどの問題が見つかった場合はお知らせください。