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

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

## データフローを配列する

### 手順

1. Talend StudioのIntegrationパースペクティブで、[Repository] (リポジトリー)ツリービューの[Job Designs] (ジョブ設計)ノードから、たとえばrf\_model\_creationという名前の空のSpark Batchジョブを作成します。

   Spark Batchジョブの作成方法は、[Sparkジョブを作成](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/creating-spark-job)をご覧ください。
2. 使用するコンポーネントの名前をワークスペースに入力し、表示されるリストからそのコンポーネントを選択します。

   このシナリオでは、コンポーネントは、tHDFSConfiguration、tFileInputDelimited、tRandomForestModelコンポーネント、4つのtModelEncoderコンポーネントです。

   4つの各tModelEncoderコンポーネントに別々の名前を付けることをお勧めします。そうすれば、各コンポーネントを使って行うタスクを簡単に識別できるようになります。このシナリオではそれぞれ、Tokenize、tf、tf\_idf 、features\_assemblerとラベル付けされています。
3. [Row] (行) &gt; [Main] (メイン)リンクを使い、tHDFSConfiguration以外のコンポーネントを接続させます。

   ![tRandomForestModelコンポーネントを使った7コンポーネントのジョブ。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel1.png)

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

手順は、[Getting Started Guide](https://help.qlik.com/talend/ja-JP/studio-getting-started-guide-data-fabric/8.0/configuring-connection-to-file-system-to-be-used-by-spark)をご覧ください。

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

### 手順

1. tFileInputDelimitedをダブルクリックして、[Component] (コンポーネント)ビューを開きます。

   ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel2.png)
2. [Define a storage configuration component] (ストレージ設定コンポーネントを定義)チェックボックスをオンにし、使うtHDFSConfigurationコンポーネントを選択します。

   tFileInputDelimitedはこの設定を使い、使うトレーニングセットにアクセスします。
3. [Edit schema] (スキーマを編集)の横にある[...]ボタンをクリックし、スキーマエディターを開きます。
4. [+]ボタンを5回クリックして5つの行を追加し、[Column] (カラム)カラムで名前をそれぞれ*label*、*sms\_contents*、*num\_currency*、*num\_numeric*、*num\_exclamation*に変更します。

   ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel3.png)

   *label*カラムと*sms\_contents*カラムは、*sms\_contents*カラム内のSMSテキストメッセージで構成された生データを保持し、メッセージがスパムかどうかを*label*カラムでラベル表示します。

   他のカラムは、このシナリオで前に説明したように、生データセットに追加された機能を保持するために使われます。これらの3つの機能は、各SMSメッセージにある通貨記号の数、数値の数、感嘆符の数です。
5. [Type] (タイプ)カラムで、カラム*num\_currency*、*num\_numeric*、*num\_exclamation*に[Integer] (整数)を選択します。
6. [OK]をクリックして、これらの変更を検証します。
7. [Folder/File] (フォルダー/ファイル)フィールドに、使うトレーニングセットが保管されているディレクトリーを入力します。
8. [Field separator] (フィールド区切り)フィールドに*\t*を入力します。これはデータセットが使う区切りで、このシナリオ用にダウンロードできます。

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

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

### 手順

1. メッセージを単語に変換する方法:
   1. [Tokenize] (トークン化)とラベル表示されたtModelEncoderコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。このコンポーネントは、SMSメッセージを単語にトークン化します。

      ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel4.png)
   2. [Sync columns] (カラムを同期)をクリックして、先行のコンポーネントからスキーマを取得します。
   3. [Edit schema] (スキーマを編集)の横にある[...]ボタンをクリックし、スキーマエディターを開きます。
   4. 出力側で[+]ボタンをクリックして1行を追加し、[Column] (カラム)カラムで名前をsms\_tokenizer\_wordsに変更します。このカラムは、トークン化されたメッセージを保持するために使われます。

      ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel5.png)
   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カラムに入力します。したがって、通貨記号、数値、句読点、およびa、an、toなどの単語はこのカラムから除外されます。
2. 各メッセージ内の単語の重みを計算する方法:
   1. tfとラベル表示されたtModelEncoderコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。

      ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel6.png)
   2. Tokenizeというラベルが付けられたtModelEncoderに前述の操作を繰り返して、Vector型のsms\_tf\_vectカラムを出力スキーマに追加し、上の画像に示すように変換を定義します。

      ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel7.png)

      この変換では、tModelEncoderはHashingTFを使って、トークン化済みのSMSメッセージを固定長(このシナリオでは*15*)の特徴ベクターに変換し、各SMSメッセージの単語の重要性を反映します。
3. 各メッセージ内の無関係な単語の重みを軽減する方法:
   1. tf\_idfとラベル表示されたtModelEncoderコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。

      この処理で、tModelEncoderは出現頻度が非常に高いものの、出現しているメッセージが多すぎる単語の重みを軽くします。この種の単語は、*the*のようにテキスト分析に有意な情報をもたらさない場合が多いためです。![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel8.png)
   2. Tokenizeというラベルが付けられたtModelEncoderに前述の操作を繰り返して、Vector型のsms\_tf\_idf\_vectカラムを出力スキーマに追加し、上の画像に示すように変換を定義します。

      ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel9.png)

      この変換では、tModelEncoderは[Inverse Document Frequency] (文献出現頻度の逆数)を使って、5つ以上のメッセージに出現する単語の重みを軽くします。
4. 特徴ベクターを結合させる方法:
   1. *features\_assembler*とラベル表示されたtModelEncoderコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。

      ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel10.png)
   2. *Tokenizer*とラベル表示されたtModelEncoderに前述の操作を繰り返して、Vector型の*features\_vect*カラムを出力スキーマに追加し、上の画像に示すように変換を定義します。

      [Parameters] (パラメーター)カラムに入力するパラメーターは*inputCols=sms\_tf\_idf\_vect,num\_currency,num\_numeric,num\_exclamation*です。

      ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel12.png)

      この変換では、tModelEncoderはすべての機能Vectorを1つの機能カラムに結合します。

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

### 手順

1. tRandomForestModelをダブルクリックして[Component] (コンポーネント)ビューを開きます。

   ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-trandomforestmodel11.png)
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](https://help.qlik.com/talend/ja-JP/studio-getting-started-guide-data-fabric/8.0/selecting-spark-mode)をご覧ください。

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

### 手順

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

### タスクの結果

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