(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-07
(45)【発行日】2024-10-16
(54)【発明の名称】秘密決定木学習装置、秘密決定木学習システム、秘密決定木学習方法、及びプログラム
(51)【国際特許分類】
G09C 1/00 20060101AFI20241008BHJP
G06N 20/00 20190101ALI20241008BHJP
【FI】
G09C1/00 650Z
G06N20/00
(21)【出願番号】P 2022556816
(86)(22)【出願日】2020-10-16
(86)【国際出願番号】 JP2020039123
(87)【国際公開番号】W WO2022079907
(87)【国際公開日】2022-04-21
【審査請求日】2023-04-05
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】110004381
【氏名又は名称】弁理士法人ITOH
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100124844
【氏名又は名称】石原 隆治
(72)【発明者】
【氏名】濱田 浩気
【審査官】塩澤 如正
(56)【参考文献】
【文献】国際公開第2019/208484(WO,A1)
【文献】LINDELL Yehuda, PINKAS Benny,Privacy Preserving Data Mining,Advances in Cryptology - CRYPTO 2000,ドイツ,Springer-Verlag Berlin Heidelberg,2000年08月11日,pp.36-54,<URL:https://link.springer.com/chapter/10.1007/3-540-44598-6_3><doi:https://doi.org/10.1007/3-540-44598-6_3>
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
G06N 20/00
(57)【特許請求の範囲】
【請求項1】
秘密計算により決定木の学習を行う秘密決定木学習装置であって、
前記決定木を学習するための複数のレコードで構成されるデータ集合を入力する入力部と、
前記決定木の階層ごとに、
1つ前の階層で1以上のグループに分割されたデータ集合と、前記データ集合に含まれる各レコードが属するグループを表すグループ情報ベクトルとを用いて、前記階層に含まれる全ての節点
で前記データ集合を一括してより細かいグループに分割することで、前記決定木を学習する学習部と、
を有する秘密決定木学習装置。
【請求項2】
前記データ集合は、同一グループに属するレコードが連続して構成されており、
前記グループ情報ベクトルは、前記データ集合を構成する各レコードの中で同一グループに属するレコードの最後のレコードに対応する要素を1、前記最後のレコードに対応する要素以外の要素を0としたベクトルである、請求項
1に記載の秘密決定木学習装置。
【請求項3】
前記階層をi(ただし、i=1,・・・,h)として、
前記学習部は、
1つ前の階層で1以上のグループに分割されたデータ集合[T
i]と、前記データ集合[T
i]に含まれる各レコードが属するグループを表すグループ情報ベクトル[g
i]とを用いて、前記階層iに含まれる各節点における分割条件を表すパラメータ[p
i]を計算し、
前記データ集合[T
i]と前記パラメータ[p
i]とを用いて、前記データ集合[T
i]に含まれる各レコードを階層i+1の節点に分類し、
前記データ集合[T
i]と、前記パラメータ[p
i]と、前記分類の結果と、前記データ集合[T
i]に含まれる各レコードが分類されている節点を表す情報とを用いて、データ集合[T
i+1]とグループ情報ベクトル[g
i+1]とを計算する、ことを階層iごとに繰り返す、請求項
1又は
2に記載の秘密決定木学習装置。
【請求項4】
秘密計算により決定木の学習を行う秘密決定木学習システムであって、
前記決定木を学習するための複数のレコードで構成されるデータ集合を入力する入力部と、
前記決定木の階層ごとに、
1つ前の階層で1以上のグループに分割されたデータ集合と、前記データ集合に含まれる各レコードが属するグループを表すグループ情報ベクトルとを用いて、前記階層に含まれる全ての節点
で前記データ集合を一括してより細かいグループに分割することで、前記決定木を学習する学習部と、
を有する秘密決定木学習システム。
【請求項5】
秘密計算により決定木の学習を行う秘密決定木学習方法であって、
前記決定木を学習するための複数のレコードで構成されるデータ集合を入力する入力手順と、
前記決定木の階層ごとに、
1つ前の階層で1以上のグループに分割されたデータ集合と、前記データ集合に含まれる各レコードが属するグループを表すグループ情報ベクトルとを用いて、前記階層に含まれる全ての節点
で前記データ集合を一括してより細かいグループに分割することで、前記決定木を学習する学習手順と、
をコンピュータが実行する秘密決定木学習方法。
【請求項6】
コンピュータを、請求項1乃至
3の何れか一項に記載の秘密決定木学習装置として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、秘密決定木学習装置、秘密決定木学習システム、秘密決定木学習方法、及びプログラムに関する。
【背景技術】
【0002】
暗号化された数値を復元すること無く特定の演算結果を得る方法として、秘密計算と呼ばれる方法が知られている(例えば、非特許文献1)。非特許文献1に記載されている方法では、3つの秘密計算装置に数値の断片を分散させるという暗号化を行い、3つの秘密計算装置が協調計算を行うことにより、数値を復元すること無く、加減算、定数加算、乗算、定数倍、論理演算(否定、論理積、論理和、排他的論理和)、データ形式変換(整数と二進数)等の結果を3つの秘密計算装置に分散された状態として得ることができる。
【0003】
ところで、与えられたデータ集合から決定木の学習を行う際に、各データの属性値により各節点(ノード)でデータ集合を分割した際の評価値を計算し、その評価値が最大となる分割を採用する方法がよく知られている。
【先行技術文献】
【非特許文献】
【0004】
【文献】千田浩司,濱田浩気,五十嵐大,高橋克巳,「軽量検証可能3パーティ秘匿関数計算の再考」,In CSS, 2010.
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、秘密計算により決定木の学習を行う場合、その計算時間が大きくなることがあった。例えば、決定木を高さh以下の二分木とした場合、秘密計算では各節点で分類されるデータ数を隠すため、データ集合の参照回数はΘ(2h)となる。このため、決定木の高さが大きくなると、学習に要する計算時間が大きくなる。
【0006】
本発明の一実施形態は、上記の点に鑑みてなされたもので、秘密計算による決定木の学習を行う場合の計算時間を削減することを目的とする。
【課題を解決するための手段】
【0007】
上記目的を達成するため、一実施形態に係る秘密決定木学習装置は、秘密計算により決定木の学習を行う秘密決定木学習装置であって、1以上の説明変数の属性値と目的変数の属性値とを含む複数のレコードで構成されるデータ集合を入力する入力部と、前記決定木の階層ごとに、前記階層に含まれる全ての節点における前記データ集合の分割を一括して行うことで、前記決定木を学習する学習部と、を有する。
【発明の効果】
【0008】
秘密計算による決定木の学習を行う場合の計算時間を削減することができる。
【図面の簡単な説明】
【0009】
【
図1】本実施形態に係る秘密決定木学習装置の機能構成の一例を示す図である。
【
図2】本実施形態に係る秘密決定木学習装置のハードウェア構成の一例を示す図である。
【
図3】本実施形態に係る秘密決定木学習処理の流れの一例を示すフローチャートである。
【
図4】本実施形態に係る秘密決定木テスト処理の流れの一例を示すフローチャート(その1)である。
【
図5】本実施形態に係る秘密決定木テスト処理の流れの一例を示すフローチャート(その2)である。
【
図6】本実施形態に係る秘密グループ分け処理の流れの一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下、本発明の一実施形態について説明する。本実施形態では、秘密計算による決定木の学習(つまり、入力や出力を明かすことなく決定木の学習)を効率的に行うことが可能な秘密決定木学習装置10について説明する。本実施形態に係る秘密決定木学習装置10は、後述するように、与えられたデータ集合中の各データが決定木の同一階層の節点間で互いに重なりなく分類されることを利用し、同一階層のすべての節点における分類を一括で行うことにより、当該データ集合全体の参照回数を指数的に小さくことができる。なお、本実施形態では、秘密計算を利用して入力や出力を秘匿した決定木を秘密決定木ともいう。
【0011】
<記法>
まず、各種記法について説明する。なお、以下では、本実施形態で必ずしも用いるとは限らない記法についても説明している。
【0012】
ある値aを暗号化や秘密分散等により秘匿化した値をaの秘匿値と呼び、[a]と記述する。aが秘密分散により秘匿化された場合は、[a]により各秘密計算装置が持つ秘密分散の断片の集合を参照するものとする。
【0013】
・復元
aの秘匿値[a]を入力とし、c=aとなる値cを計算する処理を
c←Open([a])
と記述する。
【0014】
・算術演算
加算、減算、乗算の各演算は2つの値a、bの秘匿値[a]、[b]を入力とし、それぞれa+b、a-b、abの計算結果c1、c2、c3の秘匿値[c1]、[c2]、[c3]を計算する。加算、減算、乗算の各演算の実行をそれぞれ
[c1]←Add([a],[b])
[c2]←Sub([a],[b])
[c3]←Mul([a],[b])
と記述する。誤解を招く恐れのない場合は、Add([a],[b])、Sub([a],[b])、Mul([a],[b])をそれぞれ[a]+[b]、[a]-[b]、[a]×[b]と略記する。
【0015】
・比較
比較の演算は2つの値a、bの秘匿値[a]、[b]を入力とし、a=b、a≦b、a<bの真偽値c∈{0,1}の秘匿値[c1]、[c2]、[c3]を計算する。真偽値は真のとき1、偽のとき0とする。a=b、a≦b、a<bの比較演算の実行をそれぞれ
[c1]←EQ([a],[b])
[c2]←LE([a],[b])
[c3]←LT([a],[b])
と記述する。
【0016】
・選択
選択の演算は、真偽値c∈{0,1}の秘匿値[c]と2つの値a、bの秘匿値[a]、[b]とを入力とし、
【0017】
【数1】
を満たすdの秘匿値[d]を計算する。この演算の実行を
[d]←IfElse([c],[a],[b])
と記述する。この演算は、
[d]←[c]×([a]-[b])+[b]
により実現できる。
【0018】
<決定木>
決定木は、データのある属性に対する知識を、木構造によるルールの組み合わせで表現した有向グラフである。また、属性には目的変数と呼ばれる属性と説明変数と呼ばれる属性とがあり、決定木は、説明変数の属性値を入力とし、目的変数の属性値を予測及び出力する。決定木には1以上の節点(ノード)が含まれており、葉以外の各節点には、例えば「年齢が30歳未満」等といった説明変数に関する分割のルール(分割条件)が設定される。一方で、葉(つまり、決定木の終端の節点)には目的変数の属性値が設定される。
【0019】
決定木は説明変数の属性値を受け取ると、まず、最初に根の節点で分割条件の判定を行う。次に、当該分割条件の判定結果に従って子の節点のいずれかに遷移する。その後、各節点での分割条件の判定と子の節点への遷移とを再帰的に繰り返し、最終的に到達した葉に割り当てられている属性値が目的変数の予測値として出力される。
【0020】
・決定木の学習アルゴリズム
説明変数と目的変数とで構成されるデータの集合から決定木を学習するアルゴリズムとして、例えば、CART、ID3、C4.5等が知られている。これらのアルゴリズムは細部で異なるが、いずれも根から葉へとある目的関数を最大化するように貪欲的にデータ集合を再帰的に分割することで決定木を学習する(後述するStep1~Step8)。また、アルゴリズムへの入力はデータ集合Q=(X,y)であり、出力は根から葉へ向かう有向グラフとして表現された決定木である。以降では、データ集合に含まれる各データのそれぞれをレコードともいう。なお、例えば、データ集合は「学習用データセット」や「教師データセット」、データ集合に含まれる各データは「学習用データ」や「教師データ」等と称されてもよい。
【0021】
ここで、Xは各レコードの説明変数の属性値を要素する行列であり、例えば、レコードの総数を行数、説明変数の総数を列数とした行列で表される。yは各レコードの目的変数の属性値を要素するベクトルであり、例えば、Xのn行目のレコードの目的変数の属性値をn番目の要素とする縦ベクトルで表される。
【0022】
なお、上述したように、決定木の葉以外の各節点には分割条件が設定され、葉には目的変数の属性値が設定される。また、目的変数はカテゴリ値、説明変数は数値又はカテゴリ値をそれぞれ取るものとし、目的変数のことをラベル、その値(属性値)のことをラベル値ともいう。また、以降では数値を取る説明変数のことを数値属性ともいい、その値を数値属性値ともいうものとする。同様に、カテゴリ値を取る説明変数のことをカテゴリ属性ともいい(つまり、「カテゴリ属性」と表した場合は、カテゴリ値を取る説明変数のこと指すものとする。)、その値をカテゴリ属性値ともいうものとする。目的変数が数値の場合の決定木は回帰木とも呼ばれる。
【0023】
Step1:節点vを作成する。
【0024】
Step2:分割の終了条件が満たされれば、当該節点vに目的変数の属性値を設定した上で葉として出力し、終了する。このとき、当該節点vに設定する属性値(ラベル値)は、例えば、yに含まれる要素の値うち、最も多く出現する値とする。なお、終了条件としては、例えば、yに含まれる要素がすべて同じ値(つまり、目的変数の属性値がすべて同じ)となること、決定木が予め決められた高さに達したこと、等が挙げられる。
【0025】
Step3:分割の終了条件が満たされていなければ、当該節点vに対して適用可能な分割条件r1,r2,・・・を列挙する。
【0026】
Step4:目的関数により各分割条件riの評価値siを計算する。
【0027】
Step5:分割条件の集合{ri}の中から最大の評価値を取る分割条件r*を選択し、当該節点vに分割条件r*を設定する。
【0028】
Step6:分割条件r*に基づいてデータ集合(X,y)をデータ集合(X1,y1),(X2,y2),・・・,(Xd,yd)に分割する。これは、言い換えれば、分割条件r*に基づいてデータ集合(X,y)に含まれる各レコードをデータ集合(X1,y1),(X2,y2),・・・,(Xd,yd)に分類することを意味する。なお、dは分岐数(つまり、1つの節点が持つ子の数)である。
【0029】
Step7:各(Xj,yj)に対してStep1~Step7を再帰的に実行する。すなわち、各(Xj,yj)を(X,y)とみなして、Step1~Step7を実行する関数又はメソッド等を呼び出す。ここで、再帰的に実行されたStep1で節点vが作成されると、呼び出し元のStep1で作成された節点vとの間で枝が張られる。なお、呼び出し元のStep1で作成された節点vが親、呼び出し先のStep1で作成された節点vが子となる。
【0030】
Step8:すべてのデータ集合(Xj,yj)に対するStep1~Step7の実行が終了(つまり、再帰的に呼び出されたすべてのStep1~Step7の実行が終了)すると、各節点v(及びその節点vに設定された分割条件r)の集合と節点間に張られた枝の集合とを出力し、終了する。これらの節点vの集合と枝の集合とが決定木である。
【0031】
本実施形態では、同一階層の各節点における分割条件の評価(上記のStep4~Step5)とその評価結果に基づくデータ集合の分割(上記のStep6)とを一括して実行し、それらを階層ごとに再帰的に繰り返すことで、秘密決定木の学習を行う。なお、階層とは根からの深さが同一である節点の集合のことであり、単に「層」とも称される。
【0032】
・分岐数
分岐数dは2以上の任意の整数値とすることが可能であるが、本実施形態では、2分木を想定し、d=2であるものとする。なお、本実施形態はdが3以上の場合も適用可能であるが、dの値が大きいほど計算時間は大きくなる。
【0033】
・分割条件
分割条件としては説明変数の属性値に対する任意の条件を用いることが可能であるが、一般に、大小比較やある集合に含まれるか否か等の条件が用いられることが多い。本実施形態では説明変数は数値又はカテゴリ値のいずれかを取るため、数値を取る場合はしきい値に対する大小比較(例えば、Cを閾値、xを説明変数の数値属性値として、x≦C等)を分割条件とし、カテゴリ値を取る場合はある集合に属すること(例えば、Xを集合、xをカテゴリ属性値として、x∈X等)を分割条件とする。なお、分割条件は、例えば、分割ルール、分類条件、分類ルール等と称されてもよい。
【0034】
・純度の指標
あるデータ集合を複数のデータ集合に分割(言い換えれば、あるデータ集合に含まれる各レコードを複数のデータ集合に分類)した際の分割(又は分類)の良し悪しを測る指標として、データ集合があいまいであるかどうかを表す純度の指標H(・)が知られている。よく用いられる指標には、例えば、gini係数やエントロピー等がある。
【0035】
データ集合Qのうち、目的変数の属性値(つまり、ラベル値)がkであるレコードの集合をQkとする。このとき、データ集合Qを入力とする節点におけるラベル値kのレコードの割合を
【0036】
【0037】
そして、本実施形態では、純度の指標としてエントロピー
【0038】
【0039】
・目的関数
各分割条件の良し悪しは目的関数により評価される(つまり、目的関数の値が分割条件の評価値である。)。よく利用される目的関数には、例えば、相互情報量、ゲイン率等がある。
【0040】
分割条件をθとして、データ集合Qをある分割条件θでQ(θ,0)、Q(θ,1)の2つのデータ集合に分割したものとする。このとき、
【0041】
【数4】
により定義されるGainRatio()はゲイン率と呼ばれる。本実施形態では、ゲイン率を目的関数とする。
【0042】
<評価値の計算>
各節点の分割条件は、予め定められた目的関数をその節点で最大化するような分割条件を選択することにより設定される。分割条件の候補それぞれについて目的関数の値を計算する必要があるため、与えられた分割条件に対して目的関数の値を効率よく計算できることは重要である。
【0043】
上記の数4で定義したゲイン率は、実際に分割を行った後の各ラベルの値(目的変数の値)の度数を求めるという入り組んだ計算をする必要がある。そこで、本実施形態では、秘密計算により複数の分割条件に対するゲイン率の計算を一括で行えるように、ゲイン率の計算方法を整理し単純化する。
【0044】
ゲイン率の計算を単純化するために、ゲイン率では多くの割合が必要とされていることに着目する。割合は除算を必要とするため、そのまま計算すると計算コストが高くなるが、総数を掛けることで度数という計算しやすい統計量に変換することができる。この観察に基づき、本実施形態では、SplitInfo、H、Gain及びGの各関数の代わりに、入力されるデータ集合の大きさを乗じたSplitInfo+、H+、Gain+及びG+の各関数を用いる。
【0045】
簡単のために、
【0046】
【数5】
を用いると、SplitInfo
+は以下のように整理できる。
【0047】
【0048】
【0049】
【数8】
また、同様に、Gain
+は以下のように整理できる。
【0050】
【数9】
上記のSplitInfo
+、H
+、Gain
+及びG
+の各関数はいずれも、データ集合Qに含まれるレコード数やデータ集合Qのうち或る条件を満たすレコード数等の度数と、f(・)と、加減算とで構成される。GainRatioは、
【0051】
【数10】
であるため、データ集合Qに対する分割条件θのGainRatioの分子、分母は、結局、
(1)Qのレコード数|Q|
(2)Qのうちラベル値kのレコード数|Q
k|
(3)Qをθで分割した各データ集合のレコード数|Q(θ,i)|
(4)Qをθで分割した各データ集合のうちラベル値kのレコード数|Q(θ,i)
k|
の4つと、f(・)と、加減算とで計算できることがわかる。
【0052】
f(・)の入力は上述した4つの度数(レコード数|Q|、|Qk|、|Q(θ,i)|、|Q(θ,i)k|)のいずれかである。したがって、学習用データセットとして与えられたデータ集合のレコード数がnである場合、f(・)の入力は必ず0以上n以下の整数である。よって、秘密分散により秘匿化が行われている場合、f(・)は大きさΘ(n)の以下の対応を表す対応表(ルックアップテーブル)を使った秘密一括写像を用いることで、Θ(n)回のf(・)の計算をO(nlogn)の通信量で実現できる。
【0053】
【数11】
これにより、本実施形態では、秘密決定木を学習する際に、各節点で各度数を算出することで、各節点における複数の分割条件の評価値(GainRatio)の計算を一括して行うことが可能になる。
【0054】
また、非負の分子と分母の対として与えられる2つの値(a,b)と(c,d)の比較結果はadとbcの比較結果と等しくなる。GainRatioの分子と分母はいずれも非負であるため、GainRatioの比較(つまり、評価値の比較)を行う際には上記の方法で代用することで除算を回避する。これにより、最大の評価値を取る分割条件を選択するための評価値同士の比較に要する計算時間を削減することができる。
【0055】
<機能構成>
次に、本実施形態に係る秘密決定木学習装置10の機能構成について、
図1を参照しながら説明する。
図1は、本実施形態に係る秘密決定木学習装置10の機能構成の一例を示す図である。
【0056】
図1に示すように、本実施形態に係る秘密決定木学習装置10は、入力部101と、秘密決定木学習部102と、出力部103と、記憶部104とを有する。
【0057】
記憶部104には、秘密決定木を学習するための各種データ(つまり、秘匿化された各種データ)が記憶されている。ここで、これら各種データには、学習用データセットとして与えられたデータ集合(以下、学習用データセットという。)がある。学習用データセットは、各レコードの説明変数の値を要素とするベクトルと、各レコードのラベル値を要素とするベクトルとで構成されているものとする。具体的には、例えば、学習用データセットを構成するレコード数をn、説明変数の総数をm-1とすれば、当該学習用データセットはn行m列の行列で表されるデータである。
【0058】
また、記憶部104に記憶される各種データには、秘密決定木の学習中にあるレコードがどの節点に分類されたか(つまり、グループ)を表すグループ情報ベクトル等も含まれる。
【0059】
入力部101は、秘密決定木を学習するための学習用データセットを入力する。
【0060】
秘密決定木学習部102は、学習用データセットとグループ情報ベクトルとを用いて、同一層の各節点における分割条件の評価(テスト)とその評価結果に基づくデータ集合の分割(つまり、当該データ集合を構成するレコードの分類)とを一括して、層ごとに再帰的に繰り返すことで秘密決定木を学習する。ここで、秘密決定木学習部102には、初期化部111と、分割部112と、グループ分け部113と、節点抽出部114とが含まれる。
【0061】
初期化部111は、秘密決定木を学習する際にグループ情報ベクトル等の各種データを初期化する。分割部112は、同一層の各節点における分割条件の評価(テスト)とその評価結果に基づくデータ集合の分割(つまり、当該データ集合を構成するレコードの分類)とを一括して行う。グループ分け部113は、分割部112によるレコードの分類結果を用いて、次の層の各節点における分割条件の評価とその評価結果に基づくデータ集合の分割とに利用される学習用データセット及びグループ情報ベクトル等を計算する。節点抽出部114は、最終的に出力される秘密決定木を構成する各節点の情報を抽出する。
【0062】
出力部103は、秘密決定木学習部102によって学習された秘密決定木を出力する。なお、出力部103は予め決められた任意の出力先(例えば、記憶部104等)に秘密決定木(より正解には、秘密決定木を構成する各節点の情報を表すデータ)を出力すればよい。
【0063】
<ハードウェア構成>
次に、本実施形態に係る秘密決定木学習装置10のハードウェア構成について、
図2を参照しながら説明する。
図2は、本実施形態に係る秘密決定木学習装置10のハードウェア構成の一例を示す図である。
【0064】
図2に示すように、本実施形態に係る秘密決定木学習装置10は一般的なコンピュータ又はコンピュータシステムのハードウェア構成で実現され、入力装置201と、表示装置202と、外部I/F203と、通信I/F204と、プロセッサ205と、メモリ装置206とを有する。これら各ハードウェアは、それぞれがバス207を介して通信可能に接続される。
【0065】
入力装置201は、例えば、キーボードやマウス、タッチパネル等である。表示装置202は、例えば、ディスプレイ等である。なお、秘密決定木学習装置10は、例えば、入力装置201及び表示装置202のうちの少なくとも一方を有していなくてもよい。
【0066】
外部I/F203は、記録媒体203a等の外部装置とのインタフェースである。秘密決定木学習装置10は、外部I/F203を介して、記録媒体203aの読み取りや書き込み等を行うことができる。記録媒体203aには、例えば、秘密決定木学習装置10が有する各機能部(入力部101、秘密決定木学習部102及び出力部103)を実現する1以上のプログラムが格納されていてもよい。
【0067】
なお、記録媒体203aには、例えば、CD(Compact Disc)、DVD(Digital Versatile Disk)、SDメモリカード(Secure Digital memory card)、USB(Universal Serial Bus)メモリカード等がある。
【0068】
通信I/F204は、秘密決定木学習装置10を通信ネットワークに接続するためのインタフェースである。なお、秘密決定木学習装置10が有する各機能部を実現する1以上のプログラムは、通信I/F204を介して、所定のサーバ装置等から取得(ダウンロード)されてもよい。
【0069】
プロセッサ205は、例えば、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)等の各種演算装置である。秘密決定木学習装置10が有する各機能部は、例えば、メモリ装置206等に格納されている1以上のプログラムがプロセッサ205に実行させる処理により実現される。
【0070】
メモリ装置206は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ等の各種記憶装置である。秘密決定木学習装置10が有する記憶部104は、例えば、メモリ装置206を用いて実現可能である。なお、記憶部104は、例えば、秘密決定木学習装置10と通信ネットワークを介して接続される記憶装置等を用いて実現されていてもよい。
【0071】
本実施形態に係る秘密決定木学習装置10は、
図2に示すハードウェア構成を有することにより、各種処理を実現することができる。なお、
図2に示すハードウェア構成は一例であって、秘密決定木学習装置10は、他のハードウェア構成を有していてもよい。例えば、秘密決定木学習装置10は、複数のプロセッサ205を有していてもよいし、複数のメモリ装置206を有していてもよい。
【0072】
<秘密決定木学習処理>
次に、与えられた学習用データセットから秘密決定木を学習するための秘密決定木学習処理について、
図3を参照しながら説明する。
図3は、本実施形態に係る秘密決定木学習処理の流れの一例を示すフローチャートである。なお、以降では、高さh以下のd分木を学習するものとする。
【0073】
まず、入力部101は、秘密決定木を学習するための学習用データセットを入力する(ステップS101)。ここで、以降では、一例として、学習用データセットQはレコード数をn、説明変数の総数をm-1としてn行m列の行列で表されるデータであるものとし、[T1]:=[Q]とする。
【0074】
次に、秘密決定木学習部102の初期化部111は、グループ情報ベクトル[g1]と引継ぎパラメータ[q1]とを以下に初期化する(ステップS102)。
【0075】
[g1]:=(0,0,・・・,1)T
[q1]:=(0,・・・,0)T
なお、グループ情報ベクトル及び引継ぎパラメータは要素数がnのベクトルである。また、Tは転置を表す記号である。
【0076】
ここで、グループ情報ベクトルは学習用データセットの各レコードがどのグループに分類されているかを表すベクトルであり、ある連続したレコード群が同一グループに分類されている場合そのレコード群の末尾のレコードに対応する位置の要素を1、それ以外の要素を0としたベクトルである。例えば、上記のグループ情報ベクトル[g1]は、学習用データセット[T1]のすべてのレコードが同一のグループに分類されていることを表している。これは、根の節点ではすべてのレコードが同一のグループに分類されていることを意味している。
【0077】
また、引継ぎパラメータは各階層で各レコードが分類された節点の番号を要素するベクトルであり、i=1,・・・,hに対して、引継ぎパラメータ[qi]のn番目の要素は、学習用データセット[Ti]のn番目のレコードが分類された節点の番号を表す。例えば、上記の引継ぎパラメータ[q1]は学習用データセット[T1]のすべてのレコードが番号「0」の節点(つまり、根)に分類されていることを表している。
【0078】
以降のステップS103~ステップS105は、層i=1,・・・,hごとに繰り返し実行される。以降では、ある層iにおけるステップS103~ステップS105について説明する。
【0079】
秘密決定木学習部102の分割部112は、学習用データセット[Ti]及びグループ情報ベクトル[gi]から分割パラメータ[pi]を計算する(ステップS103)。このステップS103の処理は当該層iの各節点における分割条件の評価(テスト)を行う処理であり、この処理によって当該層iの各節点(ただし、葉は除く)に分割条件が設定される。なお、この処理の詳細については後述する。
【0080】
ここで、分割パラメータ[pi]とは秘密決定木の各節点における分類結果(後述する[fi])を計算するために必要な情報の秘匿値が含まれたデータであり、例えば、層iの各節点ごとに以下の(a)~(d)ような情報の秘匿値が含まれている。
【0081】
(a)どの説明変数に対して分割条件の判定を行うのか
(b)当該説明変数に対してどのような種類の分割条件(例えば、しきい値との大小比較を表す分割条件、ある集合に属するか否かを表す分割条件等)の判定を行うのか
(c)分割条件に利用されるしきい値又は集合
(d)当該節点が葉となった場合に設定されるラベル値
すなわち、分割パラメータ[pi]には、層iの各節点に設定された分割条件(又は、節点が葉の場合はラベル値)の情報が含まれている。
【0082】
次に、秘密決定木学習部102の分割部112は、学習用データセット[Ti]及び分割パラメータ[pi]から分類結果[fi]を計算する(ステップS104)。ここで、分類結果[fi]は上記のステップS103で各節点に設定された分割条件で学習用データセット[Ti]を分割(つまり、当該学習用データセット[Ti]を構成する各レコードを分類)した結果を表す情報であり、例えば、各レコードの分類先を示す番号(0以上d-1以下の番号)をその要素とするベクトル等である。分割部112は、例えば、d=2の場合、上記の(a)に示す説明変数の各属性値を学習用データセット[Ti]から取り出した上で、上記の(b)及び(c)で決定される条件を当該各属性値が満たすか否かをそれぞれ判定し、j(1≦j≦n)番目のレコードの属性値が当該条件を満たす場合はj番目の要素を1、そうでなければ0とすることで分類結果[fi]を計算すればよい。
【0083】
次に、秘密決定木学習部102のグループ分け部113は、学習用データセット[Ti]、引継ぎパラメータ[qi]、グループ情報ベクトル[gi]及び分類結果[fi]から次の層i+1の学習用データセット[Ti+1]、引継ぎパラメータ[qi+1]及びグループ情報ベクトル[gi+1]を計算する(ステップS105)。このとき、グループ分け部113は、[Ti]と[qi]×d+[fi]とを連結したデータセット([Ti],[qi]×d+[fi])を[gi]及び[fi]に従って並び替えることで、その並び替えの結果([Ti+1],[qi+1])と、[Ti+1]の各レコードがどのグループに分類されているかを表す[gi+1]とを計算する。なお、[qi]×d+[fi]は並べ替えを行う前の[qi+1]に相当する。これは、[fi]の各要素は0以上d-1以下の値を取るため、[qi]の各要素の値(つまり、節点の番号)を、[fi]の各要素ごとに異なる番号に振り直しを行って、i+1層における各節点の番号を採番していることを意味している。
【0084】
上記のステップS105の処理は上記のステップS104で得られた分類結果[fi]に従って学習用データセット[Ti]の各レコードをより細かいグループにグループ分けする処理であり、この処理によって次の層i+1の学習用データセット[Ti+1]と引継ぎパラメータ[qi+1]とグループ情報ベクトル[gi+1]とが計算される。なお、この処理の詳細については後述する。
【0085】
続いて、上記のステップS103~ステップS105がi=1,・・・,hに対して実行された場合、秘密決定木学習部102の節点抽出部114は、各引継ぎパラメータ[qi]及び各分割パラメータ[pi]から各節点の情報を抽出する(ステップS106)。ここで、上述したように、[qi]には[Ti]の各レコードが分類されている節点の番号が格納されている。一方で、[pi]には各節点ごとに上記の(a)~(d)に示す情報が格納されている。このため、節点抽出部114は、例えば、[qi]の各要素が取る値のうちの異なる値ごとに、当該値に対応する節点の(a)~(d)の情報を抽出すればよい。
【0086】
そして、出力部103は、上記のステップS106で抽出された情報(つまり、秘密決定木を構成する各節点の情報)を出力する(ステップS107)。
【0087】
<秘密決定木テスト処理(その1)>
次に、上記のステップS103の処理の詳細の一例について、
図4を参照しながら説明する。
図4は、本実施形態に係る秘密決定木テスト処理の流れの一例を示すフローチャート(その1)である。なお、以降では、一例として、ある数値属性を対象として、層iを構成する各節点で分割条件の評価(テスト)を行う場合について説明する。また、学習用データセット[T
i]中の各レコードの当該数値属性値をレコード順に並べたベクトルを数値属性値ベクトルといい、同様にラベル値をレコード順に並べたベクトルをラベル値ベクトルという。また、ラベルが取り得る値の集合を{1,2,3}とする。
【0088】
まず、分割部112は、数値属性値ベクトルと、ラベル値ベクトルと、グループ情報ベクトルとを入力する(ステップS201)。以降では、一例として、グループ情報ベクトルは、
[g]=[gi]=(0,0,1,1,0,0,0,1,0,1)T
であるものとする。上記の[g]は、学習用データセット[Ti]中の1番目のレコードから3番目のレコードは1番目のグループに属し、4番目のレコードは2番目のグループに属し、5番目のレコードから8番目のレコードは3番目のグループに属し、9番目のレコードから10番目のレコードは4番目のグループに属することを表している。
【0089】
次に、分割部112は、グループごとに、同一グループ内で数値属性値ベクトル及びラベル値ベクトルの要素を昇順に並び替える(ステップS202)。すなわち、分割部112は、1番目のグループ~4番目のグループの各グループ内で、数値属性値ベクトル及びラベル値ベクトルの要素を昇順に並び替える。以降では、一例として、この並び替え後の数値属性値ベクトルは、
[c]=(1,2,5,2,3,4,5,7,2,4)T
であるものとする。また、並び替え後のラベル値ベクトルは、
[y]=(3,2,1,3,2,1,1,3,1,2)T
であるものとする。以降、数値属性値ベクトル及びラベル値ベクトルは、並び替え後の数値属性値ベクトル及びラベル値ベクトルを指すものとする。
【0090】
次に、分割部112は、ラベルが取り得る値ごとに、ラベル値ベクトル[y]の要素のうち、当該ラベル値と一致する要素の位置を表すビットベクトルを計算する(ステップS203)。
【0091】
ラベルが取り得る値「1」、「2」及び「3」のそれぞれに対応するビットベクトルを[f1]、[f2]及び[f3]とすれば、これらのビットベクトルはそれぞれ以下のようになる。
【0092】
[f1]=(0,0,1,0,0,1,1,0,1,0)T
[f2]=(0,1,0,0,1,0,0,0,0,1)T
[f3]=(1,0,0,1,0,0,0,1,0,0)T
つまり、あるラベル値に対応するビットベクトルとは、ラベル値ベクトルの要素のうち、当該ラベル値に一致する要素と同一位置にある要素のみを1、それ以外の要素を0としたベクトルである。
【0093】
次に、分割部112は、各ビットベクトルに対して、グループ情報ベクトル[g]によるグループ分けに従って集約関数累積和演算を行い、第1の判定ベクトルを計算する(ステップS204)。ここで、集約関数累積和演算は同一グループ内の要素の集合を入力して、その要素の値の累積和の集合を出力する演算である。言い換えれば、集約関数累積和演算は、同一グループ内の各要素について先頭から累積和を計算する演算である。
【0094】
例えば、分割部112は、各ビットベクトルのそれぞれについて、1番目の要素から3番目の要素の累積和を順に計算し、同様に4番目の要素の累積和を計算し、5番目の要素から8番目の要素の累積和を順に計算し、9番目の要素から10番目の要素の累積和を順に計算する。
【0095】
これにより、ビットベクトル[f1]に対応する第1の判定ベクトル
[s0,1]=(0,0,1,0,0,1,2,2,1,1)T
が得られる。
【0096】
同様に、ビットベクトル[f2]に対応する第1の判定ベクトル
[s0,2]=(0,1,1,0,1,1,1,1,0,1)T
が得られる。
【0097】
同様に、ビットベクトル[f3]に対応する第1の判定ベクトル
[s0,3]=(1,1,1,1,0,0,0,1,0,0)T
が得られる。
【0098】
上記の第1の判定ベクトルは、各グループ内で各数値属性値の直後(つまり、当該数値属性値と次に大きい数値属性値との間)にしきい値を設定した場合に、このしきい値以下の数値属性値が該当のラベル値である個数(度数)を表している。例えば、第1の判定ベクトル[s0,1]は、数値属性値ベクトル[c]の1番目のグループの1番目の要素の直後にしきい値を設定した場合、しきい値以下の数値属性値でラベル値が1である個数は0であることを表している。同様に、例えば、1番目のグループの3番目の要素の直後にしきい値を設定した場合、しきい値以下の数値属性値でラベル値が1である個数は1であることを表している。
【0099】
したがって、上記の第1の判定ベクトルにより、x≦C(ただし、Cはしきい値)といった形式で表される分割条件で分割(グループ分け)されたデータ集合(数値属性値の集合)のうち、当該分割条件を満たすデータ集合でラベル値kを取るレコードの度数を計算することができる。
【0100】
次に、分割部112は、各ビットベクトルに対して、グループ情報ベクトル[g]によるグループ分けに従って集約関数総和演算を行い、集約総和ベクトルを計算する(ステップS205)。ここで、集約関数総和演算は同一グループ内の要素の集合を入力して、その要素の値の総和を出力する演算である。
【0101】
例えば、分割部112は、各ビットベクトルのそれぞれについて、1番目の要素から3番目の要素の総和を計算し、同様に4番目の要素の総和を計算し、5番目の要素から8番目の要素の総和を計算し、9番目の要素から10番目の要素の総和を計算する。そして、分割部112は、各総和を、当該総和の計算元となった要素と同一位置の要素とすることで集約総和ベクトルを作成する。
【0102】
これにより、ビットベクトル[f1]に対応する集約総和ベクトル
[s*,1]=(1,1,1,0,2,2,2,2,1,1)T
が得られる。
【0103】
同様に、ビットベクトル[f2]に対応する集約総和ベクトル
[s*,2]=(1,1,1,0,1,1,1,1,1,1)T
が得られる。
【0104】
同様に、ビットベクトル[f3]に対応する集約総和ベクトル
[s*,3]=(1,1,1,1,1,1,1,1,0,0)T
が得られる。
【0105】
次に、分割部112は、同一のラベル値に対応する第1の判定ベクトル及び集約総和ベクトルを用いて、当該ラベル値に対応する第2の判定ベクトルを計算する(ステップS206)。分割部112は、同一のラベル値に対応する第1の判定ベクトル及び集約総和ベクトルを用いて、集約総和ベクトルから第1の判定ベクトルを減算することで第2の判定ベクトルを計算する。
【0106】
これにより、ラベル値「1」に対応する第2の判定ベクトル
[s1,1]=[s*,1]-[s0,1]=(1,1,0,0,2,1,0,0,0,0)T
が得られる。
【0107】
同様に、ラベル値「2」に対応する第2の判定ベクトル
[s1,2]=[s*,2]-[s0,2]=(1,0,0,0,0,0,0,0,1,0)T
が得られる。
【0108】
同様に、ラベル値「3」に対応する第2の判定ベクトル
[s1,3]=[s*,3]-[s0,3]=(0,0,0,0,1,1,1,0,0,0)T
が得られる。
【0109】
上記の第2の判定ベクトルは、各グループ内で各数値属性値の直後(つまり、当該数値属性値と次に大きい数値属性値との間)にしきい値を設定した場合に、このしきい値より大きい数値属性値が該当のラベル値である個数(度数)を表している。例えば、第2の判定ベクトル[s1,1]は、数値属性値ベクトル[c]の1番目のグループの1番目の要素の直後にしきい値を設定した場合、しきい値より大きい数値属性値でラベル値が1である個数は1個であることを表している。同様に、例えば、1番目のグループの3番目の要素の直後にしきい値を設定した場合、しきい値より大きい数値属性値でラベル値が1である個数は0であることを表している。
【0110】
したがって、上記の第2の判定ベクトルにより、x≦C(ただし、Cはしきい値)といった形式で表される分割条件で分割(グループ分け)されたデータ集合(数値属性値の集合)のうち、当該分割条件を満たさないデータ集合でラベル値kを取るレコードの度数を計算することができる。
【0111】
次に、分割部112は、グループごと、かつ、分割条件ごとに、各度数を計算する(ステップS207)。ここで、分割部112は、
数値属性値ベクトル[c]の各グループの要素数(つまり、上記の(1)に示す|Q|)
数値属性値ベクトル[c]の各グループでラベル値kの要素数(つまり、上記の(2)に示す|Qk|)
数値属性値ベクトル[c]の各グループを分割条件θで分割した各グループの要素数(つまり、上記の(3)に示す|Q(θ,i)|)
数値属性値ベクトル[c]の各グループを分割条件θで分割した各グループでラベル値kの要素数(つまり、上記の(4)に示す|Q(θ,i)k|)
の4つの度数を計算する。
【0112】
これら4つの度数のうち、1つ目の度数は数値属性値ベクトル[c]及びグループ情報ベクトル[g]を用いて、グループごとの要素数を計算することで得られる。また、2つ目の度数は数値属性値ベクトル[c]、ラベル値ベクトル[y]及びグループ情報ベクトル[g]を用いて、グループごと、かつ、ラベル値ごとの要素数を計算することで得られる。また、3つ目の度数は数値属性値ベクトル[c]及びグループ情報ベクトル[g]を用いて、分割条件θのしきい値をグループに設定した際に、当該グループ内で分割条件θにより分割された各集合(つまり、分割条件θを満たす集合と満たさない集合)の要素数を計算することで得られる。
【0113】
一方で、4つ目の度数は数値属性値ベクトル[c]とグループ情報ベクトル[g]と第1の判定ベクトルと第2の判定ベクトルとを用いて、分割条件θのしきい値をグループに設定した際に、当該グループ内で分割条件θにより分割された各集合でラベル値kを取る要素数を計算することで得られる。これは、上述したように、分割後の各集合のうち、分割条件θを満たす集合でラベル値kを取る要素数は当該ラベル値kに対応する第1の判定ベクトルにより計算され、分割条件θを満たさない集合でラベル値kを取る要素数は当該ラベル値kに対応する第2の判定ベクトルにより計算される。
【0114】
次に、分割部112は、上記のステップS207で計算された各度数を用いて、グループごと、かつ、分割条件ごとに、上記の数10により当該分割条件の評価値を計算する(ステップS208)。
【0115】
そして、分割部112は、各グループで評価値が最大となる分割条件を選択し、選択した分割条件を当該グループに対応する節点に設定される分割条件として出力する(ステップS209)。なお、各グループで評価値が最大となる分割条件を選択する際には、例えば、集約関数最大値演算を行えばよい。集約関数最大値演算は同一グループ内の要素(評価値)を入力し、その要素の値の最大値を出力する演算である。
【0116】
これにより、層iの葉以外の各節点に関する(a)~(c)の情報が得られる。一方で、上記のステップS201で数値属性値ベクトルとラベル値ベクトルとグループ情報ベクトルとを入力した結果、あるグループ内のラベル値がすべて同一である場合、当該グループに対応する節点は葉となり、(a)及び(d)の情報が得られる。
【0117】
<秘密決定木テスト処理(その2)>
次に、上記のステップS103の処理の詳細の一例について、
図5を参照しながら説明する。
図5は、本実施形態に係る秘密決定木テスト処理の流れの一例を示すフローチャート(その2)である。なお、以降では、一例として、あるカテゴリ属性を対象として、層iを構成する各節点で分割条件の評価(テスト)を行う場合について説明する。また、学習用データセット[T
i]中の各レコードの当該カテゴリ属性値をレコード順に並べたベクトルをカテゴリ属性値ベクトルといい、同様にラベル値をレコード順に並べたベクトルをラベル値ベクトルという。また、当該カテゴリ属性が取り得る値の集合を{5,6,7,8}、ラベルが取り得る値の集合を{1,2,3}とする。
【0118】
まず、分割部112は、カテゴリ属性値ベクトルと、ラベル値ベクトルと、グループ情報ベクトルとを入力する(ステップS301)。以降では、一例として、グループ情報ベクトルは、
[g]=[gi]=(0,0,1,1,0,0,0,1,0,1)T
であるものとする。
【0119】
また、カテゴリ属性値ベクトルは、
[c]=(5,5,6,8,5,8,5,7,6,5)T
であり、ラベル値ベクトルは、
[y]=(3,2,1,3,2,1,1,3,1,2)T
であるものとする。
【0120】
次に、分割部112は、当該カテゴリ属性が取り得る値とラベルが取り得る値との組み合わせごとに、当該カテゴリ属性値及びラベル値の組み合わせと一致する要素の位置を表すビットベクトルを計算する(ステップS302)。
【0121】
例えば、カテゴリ属性が取り得る値「5」とラベルが取り得る値「1」との組み合わせに対応するビットベクトルを[f5,1]とすれば、このビットベクトル[f5,1]は以下のようになる。
【0122】
[f5,1]=(0,0,0,0,0,0,1,0,0,0)T
同様に、例えば、カテゴリ属性が取り得る値「5」とラベルが取り得る値「2」との組み合わせに対応するビットベクトルを[f5,2]とすれば、このビットベクトル[f5,2]は以下のようになる。
【0123】
[f5,2]=(0,1,0,0,1,0,0,0,0,1)T
同様に、例えば、カテゴリ属性が取り得る値「5」とラベルが取り得る値「3」との組み合わせに対応するビットベクトルを[f5,3]とすれば、このビットベクトル[f5,3]は以下のようになる。
【0124】
[f5,3]=(1,0,0,0,0,0,0,0,0,0)T
その他の組み合わせに対応する各ビットベクトル[f6,1]~[f6,3]、[f7,1]~[f7,3]、[f8,1]~[f8,3]も同様に計算される。
【0125】
つまり、あるカテゴリ属性値とラベル値との組み合わせに対応するビットベクトルとは、カテゴリ属性値ベクトルとラベル値ベクトルとで同一位置にある要素の組み合わせのうち、当該カテゴリ属性値とラベル値との組み合わせに一致する組み合わせの位置にある要素のみを1、それ以外の要素を0としたベクトルである。
【0126】
次に、分割部112は、各ビットベクトルに対して、グループ情報ベクトル[g]によるグループ分けに従って集約関数総和演算を行い、判定ベクトルを計算する(ステップS303)。
【0127】
例えば、分割部112は、各ビットベクトルのそれぞれについて、1番目の要素から3番目の要素の総和を計算し、同様に4番目の要素の総和を計算し、5番目の要素から8番目の要素の総和を計算し、9番目の要素から10番目の要素の総和を計算する。そして、分割部112は、各総和を、当該総和の計算元となった要素と同一位置の要素とすることで判定ベクトルを作成する。
【0128】
これにより、ビットベクトル[f5,1]に対応する判定ベクトル
[c5,1]=(0,0,0,0,1,1,1,1,0,0)T
が得られる。
【0129】
同様に、ビットベクトル[f5,2]に対応する判定ベクトル
[c5,2]=(1,1,1,0,1,1,1,1,1,1)T
が得られる。
【0130】
同様に、ビットベクトル[f5,3]に対応する判定ベクトル
[c5,3]=(1,1,1,0,0,0,0,0,0,0)T
が得られる。
【0131】
その他の各ビットベクトル[f6,1]~[f6,3]、[f7,1]~[f7,3]、[f8,1]~[f8,3]に対応する判定ベクトルも同様に計算される。
【0132】
上記の判定ベクトルは、ビットベクトルに対応するカテゴリ属性値及びラベル値の組み合わせが各グループ内で出現する回数を表している。例えば、(カテゴリ属性値,ラベル値)=(5,1)の組み合わせは1番目のグループで0回、2番目のグループで0回、3番目のグループで1回、4番目のグループで0回出現していることを表している。同様に、例えば、(カテゴリ属性値,ラベル値)=(5,2)の組み合わせは1番目のグループで1回、2番目のグループで0回、3番目のグループで1回、4番目のグループで1回出現していることを表している。
【0133】
したがって、上記の判定ベクトルにより、x∈X(ただし、Xはカテゴリ属性が取り得る値の集合の部分集合)といった形式で表される分割条件で分割(グループ分け)されたデータ集合(カテゴリ属性値の集合)のうち、当該分割条件を満たすデータ集合でラベル値kを取るレコードの度数を計算することができる。
【0134】
次に、分割部112は、グループごと、かつ、分割条件ごとに、各度数を計算する(ステップS304)。ここで、分割部112は、
カテゴリ属性値ベクトル[c]の各グループの要素数(つまり、上記の(1)に示す|Q|)
カテゴリ属性値ベクトル[c]の各グループでラベル値kの要素数(つまり、上記の(2)に示す|Qk|)
カテゴリ属性値ベクトル[c]の各グループを分割条件θで分割した各グループの要素数(つまり、上記の(3)に示す|Q(θ,i)|)
カテゴリ属性値ベクトル[c]の各グループを分割条件θで分割した各グループでラベル値kの要素数(つまり、上記の(4)に示す|Q(θ,i)k|)
の4つの度数を計算する。
【0135】
これら4つの度数のうち、1つ目の度数はカテゴリ属性値ベクトル[c]及びグループ情報ベクトル[g]を用いて、グループごとの要素数を計算することで得られる。また、2つ目の度数はカテゴリ属性値ベクトル[c]、ラベル値ベクトル[y]及びグループ情報ベクトル[g]を用いて、グループごと、かつ、ラベル値ごとの要素数を計算することで得られる。また、3つ目の度数はカテゴリ属性値ベクトル[c]及びグループ情報ベクトル[g]を用いて、分割条件θでグループを分割した際に、当該分割条件θにより分割された各集合(つまり、分割条件θを満たす集合と満たさない集合)の要素数を計算することで得られる。
【0136】
一方で、4つ目の度数はカテゴリ属性値ベクトル[c]とグループ情報ベクトル[g]と判定ベクトルとを用いて、分割条件θでグループを分割した際に、当該分割条件θにより分割された各集合でラベル値kを取る要素数を計算することで得られる。これは、分割後の集合に含まれる各要素(カテゴリ属性値)とラベル値kとの組み合わせが当該グループ内に出現する回数を判定ベクトルにより計算すればよい。具体的には、例えば、分割条件θがx∈{5,8}であった場合、カテゴリ属性値ベクトル[c]の3番目のグループは{5,8,5}と{7}に分割される。このため、例えば、{5,8,5}でラベル値kを取る要素数は、上述したように、(5,k)の組み合わせが3番目のグループで出現する回数と(8,k)の組み合わせが3番目のグループで出現する回数との和を判定ベクトル[f5,k]及び[f8,k]から計算することで得られる。同様に、例えば、{7}でラベル値kを取る要素数は、(7,k)の組み合わせが3番目のグループで出現する回数を判定ベクトル[f7,k]から計算することで得られる。
【0137】
次に、分割部112は、上記のステップS304で計算された各度数を用いて、グループごと、かつ、分割条件ごとに、上記の数10により当該分割条件の評価値を計算する(ステップS305)。
【0138】
そして、分割部112は、各グループで評価値が最大となる分割条件を選択し、選択した分割条件を当該グループに対応する節点に設定される分割条件として出力する(ステップS306)。
【0139】
これにより、層iの葉以外の各節点に関する(a)~(c)の情報が得られる。一方で、上記のステップS301で数値属性値ベクトルとラベル値ベクトルとグループ情報ベクトルとを入力した結果、あるグループ内のラベル値がすべて同一である場合、当該グループに対応する節点は葉となり、(a)及び(d)の情報が得られる。
【0140】
<秘密グループ分け処理>
次に、上記のステップS105の処理の詳細の一例について、
図6を参照しながら説明する。
図6は、本実施形態に係る秘密グループ分け処理の流れの一例を示すフローチャートである。以降では、簡単のため、データセット([T
i],[q
i]×d+[f
i])の各レコードのレコード番号を要素とするベクトルをデータベクトルとして、このデータベクトルの各要素を並び替えることでデータセット([T
i],[q
i]×d+[f
i])の各レコードを並び替える場合について説明する。
【0141】
まず、グループ分け部113は、データベクトルと、グループ情報ベクトルとを入力する(ステップS401)。以降では、一例として、データベクトルは、
[v]=(3,0,4,5,1,6,7,2)T
であるものとする。また、グループ情報ベクトルは、
[g]=[gi]=(0,1,1,0,0,1,0,1)T
であるものとする。
【0142】
次に、グループ分け部113は、分類結果を分類先ベクトルとして入力する(ステップS402)。以降では、一例として、分類先ベクトルは、
[f]=[fi]=(0,1,0,1,1,0,1,1)T
であるものとする。
【0143】
次に、グループ分け部113は、データベクトルの各要素のうち、各グループ内で各分類先の端点となる要素を検出した検出ベクトルを計算する(ステップS403)。この検出ベクトルは以下の手順1~手順2により計算される。
【0144】
手順1:分類先として取り得る値ごとに、同一グループ内で当該分類先の端点となる要素を検出した分類先単位検出ベクトルを計算する。分類先単位検出ベクトルとは、データベクトルの各要素のうち、同一グループ内で当該分類先の端点となる要素と同一位置の要素を1、それ以外の要素を0としたベクトルである。
【0145】
例えば、分類先として取り得る値が「1」の場合、まず、グループ分け部113は、[e1]←EQ([f],1)を計算し、以下の[e1]を得る。
【0146】
[e1]=(0,1,0,1,1,0,1,1)T
次に、グループ分け部113は、グループ情報ベクトル[g]が表すグループ内で下から累積和を計算し、以下の[x1]を得る。
【0147】
[x1]=(1,1,0,2,1,0,2,1)T
なお、グループ内で下から累積和を計算するとは、グループ内の下の要素(後ろの要素)から順に上(前)に向かって累積和を計算することを意味する。
【0148】
次に、グループ分け部113は、[e1]×[x1]により以下の[k1]を得る。
【0149】
[k1]=(0,1,0,2,1,0,2,1)T
そして、グループ分け部113は、[t1]←EQ([k1],1)を計算し、以下の[t1]を得る。
【0150】
[t1]=(0,1,0,0,1,0,0,1)T
この[t1]が分類先「1」に対応する分類先単位検出ベクトルである。この分類先単位検出ベクトル[t1]は、データベクトルの各要素のうち、各グループ内で分類先「1」に分類される要素の端点(つまり、最後の要素)を検出したベクトルである。すなわち、上記の分類先単位検出ベクトル[t1]は、データベクトル[v]の2番目の要素が、1番目のグループで分類先「1」に分類される要素の最後の要素(つまり、端点)であることを表している。同様に、データベクトル[v]の5番目の要素が、3番目のグループで分類先「1」に分類される要素の最後の要素であることを表している。同様に、データベクトル[v]の8番目の要素が、4番目のグループで分類先「1」に分類される要素の最後の要素であることを表している。
【0151】
同様に、例えば、分類先として取り得る値が「0」の場合、まず、グループ分け部113は、[e0]←EQ([f],0)を計算し、以下の[e0]を得る。
【0152】
[e0]=(1,0,1,0,0,1,0,0)T
次に、グループ分け部113は、グループ情報ベクトル[g]が表すグループ内で下から累積和を計算し、以下の[x0]を得る。
【0153】
[x0]=(1,0,1,1,1,1,0,0)T
次に、グループ分け部113は、[e0]×[x0]により以下の[k0]を得る。
【0154】
[k0]=(1,0,1,0,0,1,0,0)T
そして、グループ分け部113は、[t0]←EQ([k0],1)を計算し、以下の[t0]を得る。
【0155】
[t0]=(1,0,1,0,0,1,0,0)T
この[t0]が分類先「0」に対応する分類先単位検出ベクトルである。この分類先単位検出ベクトル[t0]は、データベクトルの各要素のうち、各グループ内で分類先「0」に分類される要素の端点(つまり、最後の要素)を検出したベクトルである。すなわち、上記の分類先単位検出ベクトル[t0]は、データベクトル[v]の1番目の要素が、1番目のグループで分類先「0」に分類される要素の最後の要素(つまり、端点)であることを表している。同様に、データベクトル[v]の3番目の要素が、2番目のグループで分類先「0」に分類される要素の最後の要素であることを表している。同様に、データベクトル[v]の6番目の要素が、3番目のグループで分類先「0」に分類される要素の最後の要素であることを表している。
【0156】
手順2:すべての分類先単位検出ベクトルの和を検出ベクトルとして計算する。
【0157】
すなわち、例えば、上記の分類先単位検出ベクトル[t0]及び[t1]が得られた場合、グループ分け部113は、[t]=[t0]+[t1]により以下の検出ベクトル[t]を得る。
【0158】
[t]=(1,1,1,0,1,1,0,1)T
この検出ベクトル[t]が、データベクトルの各要素のうち、各グループ内で各分類先「0」及び「1」の端点となる要素を検出したベクトルである。
【0159】
次に、グループ分け部113は、データベクトル及び検出ベクトルを分類先ベクトルでそれぞれ安定ソートして、分類後のデータベクトル及びグループ情報ベクトルを得る(ステップS404)。
【0160】
すなわち、例えば、グループ分け部113は、データベクトル[v]を分類先ベクトル[f]の要素の昇順に安定ソートして、以下の[v']を得る。
【0161】
[v']=(3,4,6,0,5,1,7,2)T
この[v']が分類後のデータベクトルである。
【0162】
同様に、例えば、グループ分け部113は、検出ベクトル[t]を分類先ベクトル[f]の要素の昇順に安定ソートして、以下の[g']を得る。
【0163】
[g']=(1,1,1,1,0,1,0,1)T
この[g']が分類後のグループ情報ベクトルである。
【0164】
そして、グループ分け部113は、分類後のデータベクトルと分類後のグループ情報ベクトルとを出力する(ステップS405)。
【0165】
これにより、([Ti],[qi]×d+[fi])のレコード番号を[v']に並び替えたデータセット([Ti+1],[qi+1])と、グループ情報ベクトル[gi+1]=[g']とが得られる。
【0166】
<まとめ>
以上のように、本実施形態に係る秘密決定木学習装置10は、与えられた秘匿値のデータ集合から秘密決定木を学習する際に、同一階層のすべての節点でデータ集合の分割を一括して行うことにより、データ集合全体の参照回数を指数的に小さくすることができる。具体的には、例えば、決定木を高さh以下の二分木とした場合、従来技術ではΘ(2h)の参照回数が必要であったのに対して、本実施形態に係る秘密決定木学習装置10では、O(h)とすることができる。
【0167】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、請求の範囲の記載から逸脱することなく、種々の変形や変更、既知の技術との組み合わせ等が可能である。
【符号の説明】
【0168】
10 秘密決定木学習装置
101 入力部
102 秘密決定木学習部
103 出力部
104 記憶部
111 初期化部
112 分割部
113 グループ分け部
114 節点抽出部
201 入力装置
202 表示装置
203 外部I/F
203a 記録媒体
204 通信I/F
205 プロセッサ
206 メモリ装置
207 バス