(57)【特許請求の範囲】
【請求項１】
通信ネットワークで接続された複数の情報処理装置により構成される分散データ処理システム上で、MapReduce処理を行うことにより、教師データから決定木を生成する決定木生成装置であって、
ノードを示す識別情報と、ノードの負荷情報とを含むノードデータを格納するノードデータ格納手段から、展開処理の対象となるノードのノードデータを取得し、当該ノードデータに基づき、負荷の高いノードを検出し、当該高負荷ノードを所定の数に分割することで負荷を所定の値よりも低くすることができるか否かを判断する負荷判定手段と、  
前記負荷判定手段により、高負荷ノードがあり分割により負荷を低くすることができると判断された場合には、当該高負荷ノードが複数のノードに分散されるように、MapReduce処理におけるMap処理時に、キーを追加するための処理を行い、前記負荷判定手段により、高負荷ノードがあり分割により負荷を低くすることができないと判断された場合には、当該高負荷ノードのみに関するノード展開を行い、ノード展開の結果得られた処理対象ノードのノードデータを前記ノードデータ格納手段に格納する負荷分散処理手段と、
前記展開処理の対象ノードの中で、負荷が低いノードと、キーを追加するための処理が行われたノードと、ノード展開が行われた展開後のノードの３者を処理対象のノードとし当該処理対象のノードから、MapReduce処理により当該処理対象のノード毎に分割属性を決定し、決定した分割属性を用いて当該処理対象のノードを展開して中間木を成長させることにより、決定木を生成する決定木生成手段と
を備えることを特徴とする決定木生成装置。
【請求項２】
前記決定木生成装置は、前記教師データを分割し、複数のサブセットデータとしてサブセットデータ格納手段に格納する教師データ分割手段を備え、
前記決定木生成手段は、当該サブセットデータ格納手段に格納された複数のサブセットデータのそれぞれを、教師データとして用いて決定木生成を行うことを特徴とする請求項１に記載の決定木生成装置。
【請求項３】
前記負荷分散処理手段は、前記ノードデータ格納手段に格納されたノードデータの負荷情報に基づき、負荷に応じてノードを分類し、ノードの組の群を生成し、
前記決定木生成手段は、前記分類されたノードの組の情報を用いて、前記分散データ処理システムにおける複数の情報処理装置間での処理負荷が平均化するように、Reduce処理を各情報処理装置に割り当てる
ことを特徴とする請求項１又は２に記載の決定木生成装置。
【請求項４】
通信ネットワークで接続された複数の情報処理装置により構成される分散データ処理システム上で、MapReduce処理を行うことにより、教師データから決定木を生成する決定木生成装置が実行する決定木生成方法であって、
ノードを示す識別情報と、ノードの負荷情報とを含むノードデータを格納するノードデータ格納手段から、展開処理の対象となるノードのノードデータを取得し、当該ノードデータに基づき、負荷の高いノードを検出し、当該高負荷ノードを所定の数に分割することで負荷を所定の値よりも低くすることができるか否かを判断する負荷判定ステップと、  
前記負荷判定ステップにより、高負荷ノードがあり分割により負荷を低くすることができると判断された場合には、当該高負荷ノードが複数のノードに分散されるように、MapReduce処理におけるMap処理時に、キーを追加するための処理を行い、前記負荷判定ステップにより、高負荷ノードがあり分割により負荷を低くすることができないと判断された場合には、当該高負荷ノードのみに関するノード展開を行い、ノード展開の結果得られた処理対象ノードのノードデータを前記ノードデータ格納手段に格納する負荷分散処理ステップと、
前記展開処理の対象ノードの中で、負荷が低いノードと、キーを追加するための処理が行われたノードと、ノード展開が行われた展開後のノードの３者を処理対象のノードとし当該処理対象のノードから、MapReduce処理により当該処理対象のノード毎に分割属性を決定し、決定した分割属性を用いて当該処理対象のノードを展開して中間木を成長させることにより、決定木を生成する決定木生成ステップと
を備えることを特徴とする決定木生成方法。
【請求項５】
コンピュータを、請求項１ないし３のうちいずれか１項に記載された決定木生成装置における各手段として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機械学習分野における決定木生成の技術に関するものであり、特に、決定木生成処理を高速化するための技術に関するものである。
【背景技術】
【０００２】
機械学習分野における予測モデルの1つとして決定木がよく用いられる。一般に、決定木の生成にあたっては、まず、例えば、図１（ａ）に示すようなデータセット（教師データと呼ぶ）が与えられる。
【０００３】
ここで、図１（ａ）に示すデータにおいて、"発生"等のデータの種類を示す名前を「属性」と呼び、"胎生"等の値を「属性値」と呼ぶ。また、決定木において決定の対象となる属性を「目標属性」と呼び、その値を「目標属性値」と呼ぶ。
【０００４】
このようなデータセットに基づき、一のノードについて、全ての属性でデータセット分割を試行し、予め定めた基準（エントロピー等）で最適な分割属性を求める処理（これをノード展開と呼ぶ）を繰り返し行うことにより、図１（ｂ）に示すような決定木が生成される。図１（ｂ）に示す例では、最初に枝分かれするノードであるルートノードにおいて、「発生」が分割属性として用いられている。図１（ｂ）に示しているように、枝分かれの先にあるデータの集合を「ノード」と呼び、特に、末端のノードは「葉ノード」と呼ばれる。図２に、ルートノードを「発生」で分割した場合に得られる２つのノードに対応するレコードを示す。
【０００５】
一般に、決定木生成のためのデータセットは大規模であり、大規模なデータセットから、高速に決定木を生成することが求められている。このような観点での決定木生成に関する従来技術として、例えば、特許文献１、特許文献２に記載された技術がある。
【０００６】
特許文献１には、大規模データセットを教師データとした決定木生成をする際に、教師データの中の数値的な属性値を丸めることで非可逆な圧縮を行い、読み込むデータ量を削減して高速化を図る技術が記載されている。
【０００７】
また、特許文献２には、大規模なデータベースから決定木を生成しておいて、新たにデータベースにデータが追加された際に、差分的に決定木を更新してゆくことで、決定木構築に要する時間を削減する技術が記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開2002-189737号公報
【特許文献２】特開2001-282817号公報
【非特許文献】
【０００９】
【非特許文献１】PLANET:Massively Parallel Learning of Tree Ensembles with MapReduce  [Google, VLDB2009, 2009年8月]
【発明の概要】
【発明が解決しようとする課題】
【００１０】
近年、大規模分散ファイルシステムや大規模分散計算フレームワーク等、複数台のサーバマシンからなるクラスタ上で大規模に情報処理を行う分散処理技術が使用されてきている。
【００１１】
このような分散処理に適した情報処理技術として、MapReduceと呼ばれる技術があり、非特許文献１には、MapReduceを利用して決定木を生成する技術が記載されている。MapReduceを利用して決定木を生成する技術では、サイズの大きいファイルを分散ファイルシステムに格納すると、予め設定したサイズ（例えば64MB）のブロックに分割され、分散ファイルシステムを構成する複数台のマシンに各ブロックが配布される。そして、その複数台のマシンが各々ローカルに保持しているブロックをその先頭から1行ずつ読み込んでMap処理をした上でKeyとValueのペアの形になっている中間データを一つまたは複数個出力し、同じKeyを持ったものを1台のマシンに集めて、Reduce処理を行って、それを結果として出力する。
【００１２】
また、決定木の構築はテーブル形式のデータを対象としており、各ノードでは実際にテーブルを各カラム（属性）の値によって分割してみて、それがどれだけうまく分割できたかのスコア（例えばエントロピーやGINI係数）を計算し、高いスコアで分割できた属性をそのノードでの分割属性として採用する。そして、採用された分割属性による分割後のテーブルを対象に同様の処理を繰り返して木を成長させてゆく。
【００１３】
1台のマシンで小規模な教師データを対象に決定木を構築する場合は、基本的にメモリ上に教師データをロードして、それを実際に分割（分割後の形になるように参照を保持）しながら再帰的に処理を進めるが、分散ファイルシステムではこの方法を用いることはできない。
【００１４】
分散ファイルシステム上のファイルを教師データとしてMapReduceを用いて木を成長させるために、教師データを直接操作することなく、毎回教師データ全体を読み込んで、全ての展開可能ノードにおいて全ての属性での分割スコア算出に必要な情報を出力・集約し、それを繰り返す。なお、このとき決定木の深さ1段に所属する各ノードが処理対象とするテーブルを全て集めると教師データ全体と等しくなるため、深さ1に対して1回のMapReduceが最も効率が良いと考えられる。
【００１５】
図３に、非特許文献１に記載された技術に基づく、MapReduceを利用して決定木を生成する処理の流れの概要を示す。図３には、処理の過程におけるデータ例も示されている。図３に示す例は、教師データとして図１（ａ）に示したデータセットを用い、決定木生成アルゴリズムとしてID３アルゴリズムを使用し、ルートノード展開時を示す例である。
【００１６】
図３に示すように、教師データが、複数のマシン（図３の例では２台）に分配され、各サーバにおいて、Map処理が行われる。図２に示すように、Map処理では、各Keyに対するValueが抽出され、KeyとValueの対応付けが行われる。その後、中間データが生成され、同じKeyを持ったデータが、１つのサーバに集められて、Reduce処理が行われる。図３に示すように、Reduce処理は、Keyに対するValueをまとめる処理である。
【００１７】
また、図３には、分散処理におけるMap処理やReduce処理等を管理・制御するコントローラ（Controlletr)が示されている。
【００１８】
さて、MapReduce処理において、Mapに関しては各マシンにほぼ均等にブロックが割り振られるため負荷も均等になっているが、Reduceに関しては同じKeyを持ったKey・Valueのペアの個数によって処理の負荷に差が出る。これにより、少ない個数を処理するマシンは、大量の個数を処理するマシンにおける処理が終了するのを待つことになる。例えば、図４の２段目のノードに示されるように、ノード間で、Key・Valueのペアの個数（すなわち、レコード数）に偏りが発生する場合がある。図４に示す偏りが発生した場合、２段目における右側のノードを処理するマシンでの処理時間が、左側のノードを処理するマシンにおける処理時間より大きくなる。各段では、１度のMapReduceで処理を行うから、上記のような偏りが発生すると、次の段の処理を開始するまでに、処理待ち時間が発生することになる。
【００１９】
このように、MapReduceを利用した決定木生成には、同期のための処理待ち時間により、処理速度も低下する恐れがあるという問題がある。
【００２０】
本発明は、上記の点に鑑みてなされたものであり、分散データ処理システム上でのMapReduceを利用した決定木生成において、同期のための待ち時間を減少させ、決定木生成の処理を高速化するための技術を提供することを目的とする。
【課題を解決するための手段】
【００２１】
上記の課題を解決するために、本発明は、通信ネットワークで接続された複数の情報処理装置により構成される分散データ処理システム上で、MapReduce処理を行うことにより、教師データから決定木を生成する決定木生成装置であって、
ノードを示す識別情報と、ノードの負荷情報とを含むノードデータを格納するノードデータ格納手段から、展開処理の対象となるノードのノードデータを取得し、当該ノードデータに基づき、負荷の高いノードを検出し、当該高負荷ノードを所定の数に分割することで負荷を所定の値よりも低くすることができるか否かを判断する負荷判定手段と、  
前記負荷判定手段により、高負荷ノードがあり分割により負荷を低くすることができると判断された場合には、当該高負荷ノードが複数のノードに分散されるように、MapReduce処理におけるMap処理時に、キーを追加するための処理を行い、前記負荷判定手段により、高負荷ノードがあり分割により負荷を低くすることができないと判断された場合には、当該高負荷ノードのみに関するノード展開を行い、ノード展開の結果得られた処理対象ノードのノードデータを前記ノードデータ格納手段に格納する負荷分散処理手段と、
前記展開処理の対象ノードの中で、負荷が低いノードと、キーを追加するための処理が行われたノードと、ノード展開が行われた展開後のノードの３者を処理対象のノードとし当該処理対象のノードから、MapReduce処理により当該処理対象のノード毎に分割属性を決定し、決定した分割属性を用いて当該処理対象のノードを展開して中間木を成長させることにより、決定木を生成する決定木生成手段と
を備えることを特徴とする決定木生成装置として構成される。
【００２４】
前記決定木生成装置は、前記教師データを分割し、複数のサブセットデータとしてサブセットデータ格納手段に格納する教師データ分割手段を備えてもよく、その場合、前記決定木生成手段は、当該サブセットデータ格納手段に格納された複数のサブセットデータのそれぞれを、教師データとして用いて決定木生成を行う。
【００２５】
また、前記負荷分散処理手段は、前記ノードデータ格納手段に格納されたノードデータの負荷情報に基づき、負荷に応じてノードを分類し、ノードの組の群を生成する機能を備えてもよく、その場合、前記決定木生成手段は、前記分類されたノードの組の情報を用いて、前記分散データ処理システムにおける複数の情報処理装置間での処理負荷が平均化するように、Reduce処理を各情報処理装置に割り当てるようにする。
【発明の効果】
【００２６】
本発明によれば、分散データ処理システム上でのMapReduceを利用した決定木生成において、同期のための待ち時間を減少させ、決定木生成の処理を高速化することが可能となる。
【図面の簡単な説明】
【００２７】
【図１】決定木生成を説明するための図である。
【図２】ノードの分割の例を示す図である。
【図３】MapReduceを用いた決定木生成処理の概要を示す図である。
【図４】従来技術の問題点を説明するための図である。
【図５】決定木生成装置１０の機能構成図である。
【図６】決定木生成装置１０として用いられるコンピュータのハードウェア構成図である。
【図７】決定木生成のための基本的な処理を示すフローチャートである。
【図８】負荷分散のための処理の概要を示すフローチャートである。
【図９】負荷分散判定処理のフローチャートである。
【図１０】教師データ分割処理のフローチャートである。
【図１１】教師データ分割の概要を示す図である。
【図１２】高負荷ノード細分化処理のフローチャートである。
【図１３】Map処理時のキー追加を示す図である。
【図１４】高負荷ノード細分化処理の概要を示す図である。
【図１５】高負荷ノード先行展開処理のフローチャートである。
【図１６】高負荷ノードの先行展開処理の概要を示す図である。
【図１７】負荷平均化処理のフローチャートである。
【図１８】負荷平均化処理の概要を示す図である。
【図１９】ノード展開処理のフローチャートである。
【発明を実施するための形態】
【００２８】
以下、図面を参照して本発明の実施の形態を説明する。
【００２９】
（実施の形態の概要）
実施の形態を詳細に説明する前に、実施の形態の概要を説明する。本実施の形態では、決定木生成アルゴリズムを、複数台のサーバマシンからなるクラスタ上の分散ファイルシステムと、複数回のMapReduceによって実現することを前提としている。
【００３０】
そして、MapReduceにおいて全てのマシンにおけるReduce処理が完了するまで次のMapReduce処理に進むことができず、同期によって処理待ち時間が発生するという従来の問題を解決するために、負荷分散処理を行って、決定木生成処理を高速化している。
【００３１】
負荷分散処理としては、決定木生成過程において突出した負荷を持つノードの負荷を負荷分散判定によって判定し、分散を行い、その後 、負荷平均化処理を行う。
【００３２】
上記の負荷分散判定では、生成中の決定木が浅い段階で分岐数が少ないノードの場合は教師データ分割を行い、処理対象ノードの中に高い負荷のノードが含まれる場合は高負荷ノード細分化を行い、特に突出したノードの場合は高負荷ノード先行展開を選択して、極端な教師データの偏りによる処理待ち時間を抑えることとしている。
【００３３】
上述した教師データ分割においては、そもそも同期しなくともよくなるように教師データを分割し、保存したサブセットを教師データとしてそれぞれ独立して決定木を成長させるようにしている。
【００３４】
高負荷ノード細分化では、高負荷ノードに関してMap処理する際にキーを細分化することで高負荷ノードをより多くのマシンで処理できるようにしている。また、高負荷ノード先行展開においては、突出して負荷の高いノードを先行展開して、他のノードと負荷を揃えるようにしている。負荷平均化では、各ノードを負荷によって分類し、各マシンの負荷が平均化するようにReduce処理を担当させることとしている。
【００３５】
上記の処理により、教師データの偏りにより生ずる負荷の偏りを分散でき、決定木生成処理中に発生する同期による処理待ち時間の削減できる。結果として、決定木生成処理を高速化できる。
【００３６】
（装置構成）
以下、本発明の実施の形態を詳細に説明する。まず、装置構成を説明する。
【００３７】
図５に、本発明の実施の形態に係る決定木生成装置１０の機能構成図を示す。図５に示すように、決定木生成装置１０は、制御部１１、分散処理部１２、教師データ格納部１３、中間木格納部１４、サブセットデータ格納部１５、ノードキュー格納部１６を備える。
【００３８】
決定木生成装置１０は、通信ネットワークで接続された複数の情報処理装置（サーバマシン）により構成される分散データ処理システムを利用して、MapReduceを用いて、教師データから決定木を生成する装置であり、決定木生成装置１０には、複数の情報処理装置が通信ネットワークを介して接続されている。
【００３９】
本実施の形態において、決定木生成装置１０は、決定木生成のための制御を行うコントローラを想定しており、図５にはそのための機能部が示されているが、決定木生成装置１０自体もMapReduceの分散処理を行うクラスタの中の１台として機能してよいことは言うまでもない。
【００４０】
制御部１１は、決定木生成部１１１と負荷分散処理部１１２を有する。決定木生成部１１１は、中間木及びノードキューを操作し、分散処理部１２を利用して、中間木を成長させて決定木を生成するための基本的な処理を行う機能部である。負荷分散処理部１１２は、本発明に関連する負荷分散のための処理を行う機能部である。
【００４１】
分散処理部１２は、中間木及びノードキューに基づいて、教師データ又はサブセットデータからノード展開を行って、各ノードの最適な分割属性を導出する機能部である。分散処理部１２は、ノード展開等の処理を、複数台のマシンを用いた分散ファイルシステム上でのMapReduceを用いて行う。このような分散処理技術自体は既存技術である。
【００４２】
教師データ格納部１３は、教師データを格納する。本実施の形態において、教師データは、属性毎にカンマで区切られた表形式のテキストデータであり、1行で1レコードを表す。
【００４３】
中間木格納部１４は、中間木データを格納する。中間木データは、例えばXMLにより記述されたツリー構造のデータである。なお、中間木とは、最終的な決定木が完成する前の、処理途中の決定木のことである。
【００４４】
サブセットデータ格納部１５は、サブセットデータを格納する。サブセットデータは、教師データを特定の属性（サブキー）で分割し、同じ属性値を持つものが集められた複数のデータの集合である。サブセットデータが存在する場合は、以降サブセットデータをそれぞれ教師データとして扱うことになる。
【００４５】
ノードキュー格納部１６は、処理対象ノードのキュー（リスト）であるノードキューを格納する。ノードキューは、ノードを識別するノードIDと負荷情報（ここでは、そのノードに関わるレコード数）と、ノード細分化フラグとを含むノードデータ（クラス）を格納したキューである。なお、ノード細分化フラグは、含まれない場合もある。なお、以降、"ノード"をノードデータの意味で使用する場合がある。
【００４６】
図５に示す各格納部は、決定木生成装置１０であるコンピュータの記憶装置（メモリ等）で実現してもよいし、物理的には決定木生成装置１０の外部にある記憶装置で実現してもよい。この場合、各格納部は、分散ファイルシステムにより実現される。
【００４７】
図５に示すように、決定木生成装置１０からは、決定木が出力される。本実施の形態において、決定木は、例えばXML形式のツリー構造のデータ（ファイル）である。なお、決定木の剪定は適宜行うことができるが、本実施の形態においては、決定木の剪定についての構成は示していない。
【００４８】
決定木生成装置１０は、コンピュータに、各機能部の処理を記述したプログラムを実行させることにより実現可能である。また、当該プログラムは、メモリ等の記録媒体に記録して配布することが可能である。図６に、決定木生成装置１０として用いられるコンピュータのハードウェア構成の一例を示す。図６に示すように、当該コンピュータは、CPU２１、メモリ２２、入出力装置２３、ハードディスク装置２４、及び通信装置２５を備える。上記プログラムが、入出力装置２３からハードディスク装置２４にインストールされ、起動される。これにより、当該プログラムは、CPU２１により実行され、決定木生成装置１０が実現される。通信装置２５は、他の装置と通信ネットワークを介してデータ通信を行うための装置である。
【００４９】
（決定木生成装置１０の動作について）
次に、決定木生成装置１０の動作について説明する。
【００５０】
＜決定木生成のための基本的な処理動作＞
まず、決定木生成装置１０により実行される決定木生成のための基本的な処理動作を、図７のフローチャートを参照して説明する。以下の処理動作は、基本的に、非特許文献１に記載された技術に基づくものである。ただし、本願での独自の処理として、図８以降で詳細に説明する本発明に係る負荷分散のための処理が加えられている。
【００５１】
制御部１１における決定木生成部１１１は、中間木のルートノードに対応するデータ（例えば、XML形式で記述されたツリー状の階層構造を持ったデータ）を生成し、中間木格納部１４に格納する（ステップ１）。続いて、決定木生成部１１１は、ノードキュー格納部１６におけるノードキューに、ルートノードのID（"0"）と負荷情報（レコード数）を含むルートノードを追加する（ステップ２）。
【００５２】
続いて、中間木格納部１４に格納されている中間木データ、ノードキュー格納部１６に格納されているノードキュー、及び教師データ格納部１３に格納されている教師データを用いて、分散処理部１２を利用して、MapReduceによるノード展開処理を行い、各処理対象ノードに対する最適分割属性を取得する（ステップ３）。また、ここでは、処理済みのノードが、ノードキューから削除される。また、ステップ３では、図８以降で説明する負荷平均化のための処理も行われる。
【００５３】
続いて、決定木生成部１１１は、ステップ３で取得した最適分割属性を用いて、中間木格納部１４に格納されている中間木データ（XML形式のツリー）を更新する。すなわち、中間木を成長させる（ステップ４）。決定木生成部１１１は、ステップ４で得られた中間木中にある展開可能ノードがあれば、それを、新たにノードキュー格納部１６におけるノードキューに追加する（ステップ５）。
【００５４】
続いて、決定木生成部１１１は、ノードキューが空か否かを判定し（ステップ６）、空であればステップ３に進む。空でなければ、現在の中間木を決定木として出力する。ここでは、例えば、中間木データを文字列化してファイルに書き出し、決定木を表現するXMLファイルを出力する（ステップ７）。
【００５５】
＜負荷分散のための処理概要＞
次に、図８のフローチャートを参照して、本発明に係る負荷分散のための処理の全体の流れを説明する。以下は、概要説明であり、各処理の詳細については、概要説明の後に順次説明する。また、図８に示す処理は、図７におけるステップ３に対応する。
【００５６】
図８に示すように、負荷分散処理部１１２は、中間木格納部１４から中間木データを取得するとともに、ノードキュー格納部１６から処理対象ノードを取得する（ステップ１０）。
【００５７】
続いて、負荷分散処理部１１２は、負荷分散判定処理を行い、ノードキューを更新する（ステップ２０）。
【００５８】
負荷分散処理部１１２は、更新されたノードキューに基づき、負荷平均化処理を行って、ここで更新されたノードキューをノードキュー格納部１６に格納する（ステップ３０）。
【００５９】
続いて、決定木生成部１１１は、ノードキュー格納部１６に格納されたノードキューと、中間木格納部１４における中間木データとを用いて、分散処理部１２を利用したMapReduce処理を行い、各ノードの最適分割属性を求めるノード展開処理を行い（ステップ４０）、結果として分割属性リストデータが得られる(ステップ５０）。この後、図７に示したステップ４以降の処理が行われることになる。
【００６０】
なお、ステップ２０における負荷分散の処理と、ステップ３０における負荷平均化の処理とは、これら両方を行うことは必須ではない。ステップ２０における負荷分散の処理と、ステップ３０における負荷平均化の処理のうちのいずれかを行うこととしてもよい。
【００６１】
＜負荷分散判定処理＞
次に、図８のステップ２０に示した負荷分散判定処理について、図９のフローチャートを参照して説明する。
【００６２】
まず、負荷分散処理部１１２は、ノードキュー格納部１６に格納されている処理対象のノードの数が、予め定めた閾値より小さく、かつ、中間木の深さが、予め定めた閾値より小さい、か否かを判定する（ステップ１００）。ここでの判定は一例であり、例えば、処理対象のノードの数のみの閾値判定を行うこととしてもよい。
【００６３】
ステップ１００での判定結果がYesの場合、ステップ１１０において、教師データ分割処理を行い、教師データのサブセットを求めて、それをサブセットデータ格納部１５に格納する。教師データ分割処理の詳細については後述する。
【００６４】
ステップ１００における判定がNoであった場合、負荷分散処理部１１２は、ノードキュー内の突出した負荷（レコード数）を持つノードを検出する（ステップ１２０）。ここでは、例えば、処理対象ノードの負荷の平均値に対する負荷の割合が、予め定めた閾値を超えているかどうかで、突出しているか否かを判断する。例えば、処理対象ノードの負荷の平均値が１００で、予め定めた閾値が２であり、あるノードの負荷が３００であるとすると、当該ノードの、平均値に対する負荷の割合は３であるから、閾値を越えており、負荷が突出していると判定される。
【００６５】
ステップ１２０における判定の結果がNoであれば、負荷分散判定処理を終了する。ステップ１２０における判定の結果がYesであれば、当該突出ノードにおけるデータを所定の数に分割することで他のノードの負荷と同等程度に揃うか判断する（ステップ１３０）。ここでは、例えば、所定の数に分割することにより、上記閾値を越えるノードが検出されなくなるかどうかを判断する。
【００６６】
ステップ１３０における判定結果がYesであれば、ステップ１４０の高負荷ノード細分化処理を行い、ステップ１３０における判定結果がNoであれば、ステップ１５０の高負荷ノード先行展開処理を行う。高負荷ノード細分化処理と高負荷ノード先行展開処理の詳細については後述する。
【００６７】
＜教師データ分割処理＞
次に、図９のステップ１１０で示した処理である教師データ分割処理について、図１０のフローチャートを参照して説明する。
【００６８】
まず、負荷分散処理部１１２は、教師データ格納部１３に格納された教師データに対して、分散処理部１２を利用して、Key（ノード・サブキー）及びValue（レコード）としたMapReduce処理を行うことにより、教師データからノード毎にレコードを抽出する（ステップ２００）。なお、Keyの中にサブキーを追加するのは、Reduce結果が一台のマシンに集中するのを防ぐためである。サブキーとしては、例えば、特定の属性を用いる。特定の属性としては、分割対象のノード（ルードノード等）において、最適分割属性であると判断された属性を用いることができる。
【００６９】
そして、負荷分散処理部１１２は、ステップ２００で得られたレコードをノード毎にID名の記憶手段（具体的には、ディレクトリ）に保存する（ステップ２１０）。この記憶手段は、サブセットデータ格納部１５に対応する。この処理が終わった段階の分散ファイルシステムは、サブセットとなるノード別にディレクトリが作成され，その中にはそのノードの展開に必要なレコードが全て入っている状態となる。教師データをサブセットデータに分け、サブセットが存在する場合は、これ以降、各サブセットが教師データとして扱われることになる。
【００７０】
図１１に、教師データ分割のイメージを示す。図１１の上段が、教師データ分割を行わない場合を示し、下段が、分割を行った場合を示す。図１１の下段に示すように、分割を行うことにより、サブセット毎（ルートの次のノード毎）にMapReduceが行われ、決定木の成長処理が行われる。サブセット毎に生成された決定木は、最後に連結されて最終的な決定木が生成される。
【００７１】
＜高負荷ノード細分化処理＞
次に、図９のステップ１４０における高負荷ノード細分化処理を、図１２のフローチャートを参照して説明する。
【００７２】
まず、負荷分散処理部１１２は、ノードキュー格納部１６に格納されたノードキューから全処理対象ノードのリストを取り出し、負荷（レコード数）によってノードをソートした上で、処理対象ノードの負荷の平均値との割合が所定の閾値を超えているノードに対して、Map処理時にサブキーを追加することを示すフラグを付与する処理を行う（ステップ３００）。これにより、フラグ付与済みのノードリストが得られる。
【００７３】
続いて、負荷分散処理部１１２は、ステップ３００で得られたフラグ付与済みのノードリストを、ノードキューとして、ノードキュー格納部１６に再格納する（ステップ３１０）。
【００７４】
高負荷ノード細分化処理により、サブキーを追加することを示すフラグを付与されたノードに関しては、図１３に示すように、Map処理時にKeyに当該サブキーが追加され、ノードのデータの細分化が行われることになる。
【００７５】
図１４に高負荷ノード細分化のイメージを示す。図１４に示す例では、"A"で示されるノードにおいて、ノードのレコードが２つに細分化されたことが示されている。
【００７６】
＜高負荷ノード先行展開処理＞
次に、図９のステップ１５０における高負荷ノード先行展開処理を、図１５のフローチャートを参照して説明する。
【００７７】
負荷分散処理部１１２は、決定木生成部１１１を利用して、ノードキュー格納部１６のノードキューから処理対象ノードのノードリストを取得し、図９のステップ１２０で検出された高負荷ノードのみに対してノード展開（詳細は図１９を参照して後述）の処理を実行する（ステップ４００）。これにより、高負荷ノードに関する最適分割属性情報と負荷情報を含むノードリストが得られる。
【００７８】
続いて、負荷分散処理部１１２は、ステップ４００で得られたノードリストと、中間木格納部１４に格納されている中間木データを用いて、決定木生成部４１０を利用することにより、高負荷ノード部分のみ中間木を成長させる（ステップ４１０）。ここでは、図７に示したステップ４における処理と同様の処理が行われる。
【００７９】
そして、ステップ４１０にて得られた中間木中にある展開可能ノードを新たにノードキューに追加する処理を行う（ステップ４２０）。ここでの処理は、図７のステップ５の処理と同様である。
【００８０】
図１６に、高負荷ノードの先行展開のイメージを示す。図１６に示す例では、"A"で示されるノードが高負荷であると判定され、先行展開が行われ、B、C、Dのノードに展開されている。
【００８１】
＜負荷平均化処理＞
次に、図８のステップ３０における負荷平均化処理を、図１７のフローチャートを参照して説明する。
【００８２】
負荷分散処理部１１２は、ノードキュー格納部１６に格納されているノードキューから全ノードを取得し、リスト化し、負荷によってソートする（ステップ５００）。そして、負荷分散処理部１１２は、ソートされたノードリストの両端から１つずつノードを取って、これらを１組とし、各組にIDを付ける処理を行う（ステップ５１０）。なお、両端から１つずつとって組にする処理は一例にすぎない。負荷を適切に平均化することができるのであれば、他の選択方法を用いてもよい。例えば、２より大きな数のノードが1組となるような組み合わせの方法を用いてもよい。これにより、当該ID付のノードの集合からなる更新されたノードリストが得られる。
【００８３】
その後、負荷分散処理部１１２は、ステップ５１０で得られたノードリストを用いたノード展開処理の中で用いるPartitionerを設定する処理を行う（ステップ５２０）。
【００８４】
具体的には、Mapperの処理の後、Keyの値に応じたReducerへの割り振りを決定するためのPartitioner（区分基準データと称することもできる）を初期設定である単なるハッシュを利用したものから、ステップ５１０の処理結果とクラスタのマシン台数を考慮したものに入れ替える。すなわち、Partitionerは、処理対象のノード数がマシン台数以上になるとき、ステップ５１０の結果で同じ組になったノードを静的に同じマシンに割り振るようなものに設定される。
【００８５】
図１８に、負荷平均化のイメージを示す。図１８に示す例では、最下段のノードに関して、レコード数合計が500,000の組にノードが分けられたことが示されている。本例では、Partitionerにより、例えば、同じ組に属する複数のノードに関して、同じマシンでReduce処理される。
【００８６】
＜ノード展開処理＞
次に、図８のステップ４０におけるノード展開処理を、図１９のフローチャートを参照して説明する。
【００８７】
ここではまず、決定木生成部１１１が、教師データ格納部１３に格納された教師データを取得する（ステップ６００）。なお、サブセットデータが存在する場合は、サブセットデータ格納部１５からサブセットデータを教師データとして取得する。
【００８８】
続いて、決定木生成部１１１は、Map処理を行う（ステップ６１０）。より詳細には、まず、予め定めた目標属性（インデックス）を記憶手段から取得し、中間木格納部１４から中間木データを取得し、ノードキュー格納部１６からノードキューを取得する。そして、ステップ６００で取得した教師データ（例えば、CSV形式のデータである）を1行ずつ読み込んで、中間木を辿り、その行がどの処理対象ノードに属するレコードか判断した上で、Key・Valueの組を生成し、各マシン毎にローカルに存在する、同じKeyを持つKey・Valueの組を集約する（つまり、個数をカウントアップする）。
【００８９】
この処理により、「Key（ノードID・属性・（サブキー））  Value（属性値・目標属性値・個数）」の組の集合である中間データが得られ、記憶手段に格納される。なお、括弧内の"サブキー"は、細分化を行う場合に付加されるものである。
【００９０】
続いて、決定木生成部１１１は、ステップ６１０で得られた中間データと、図１７のステップ５２０で得られたPartitionerとに基づき、各マシンにReduce処理を割り振る（ステップ６２０）。図１７に示した負荷平均化処理がなされているので、ここでは、負荷情報とリソース（マシン台数）に応じて負荷が平均化するように割り振りが行われる。
【００９１】
ステップ６３０では、Reduce処理が行われる。すなわち、同じKeyを持つKey・Valueの組が1台のマシンに集められ、Key・Valueを集約して、新たなKey・Valueの組を生成する処理が行われる。これにより、「Key（ノードID・属性・（サブキー））  Value（ハッシュマップ｛属性値：｛目標属性値：個数｝｝）」の組の集合が得られる。
【００９２】
その後、決定木生成部１１１は、ステップ６３０で得られた各Key・Valueの組に対して、Keyにサブキーが含まれる場合に、サブキーに基づき、Key・Valueの組を集約する（ステップ６４０）。この処理により、「Key（ノードID・属性）  Value（ハッシュマップ｛属性値：｛目標属性値：個数｝｝）」の組の集合が得られる。
【００９３】
続いて、決定木生成部１１１は、ステップ６４０で得られたKey・Valueの組に基づき、ノード毎に各分割における情報利得を計算し、各分割での分割スコアを算出する（ステップ６５０）。そして、決定木生成部１１１は、ステップ６５０で得られたスコアに基づき、ノード毎に最適な分割属性を決定する（ステップ６６０）。これにより、最適分割属性情報と負荷情報を含むノードリストが得られる。
【００９４】
その後、図７のステップ４以降の、中間木を成長させる処理や、次の展開可能ノードの処理等が行われることになる。
【００９５】
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【００９６】
１０  決定木生成装置
１１  制御部
１１１  決定木生成部
１１２  負荷分散処理部
１２  分散処理部
１３  教師データ格納部
１４  中間木格納部
１５  サブセットデータ格納部
１６  ノードキュー格納部
２１  CPU
２２  メモリ
２３  入出力装置
２４  ハードディスク装置
２５  通信装置
【図１】
0005427640.tif 000002
【図２】
0005427640.tif 000003
【図３】
0005427640.tif 000004
【図４】
0005427640.tif 000005
【図５】
0005427640.tif 000006
【図６】
0005427640.tif 000007
【図７】
0005427640.tif 000008
【図８】
0005427640.tif 000009
【図９】
0005427640.tif 000010
【図１０】
0005427640.tif 000011
【図１１】
0005427640.tif 000012
【図１２】
0005427640.tif 000013
【図１３】
0005427640.tif 000014
【図１４】
0005427640.tif 000015
【図１５】
0005427640.tif 000016
【図１６】
0005427640.tif 000017
【図１７】
0005427640.tif 000018
【図１８】
0005427640.tif 000019
【図１９】
0005427640.tif 000020