説明

密度が高い部分行列データをコンピュータによって抽出する方法、そのコンピュータシステム及びコンピュータプログラム

【課題】 抽出された密な部分行列が必要な行や列を含むことができるようにする。
【解決手段】 有意なデータ要素と非有意なデータ要素とが含まれる行列データMから、有意なデータ要素の密度が高い部分行列データをコンピュータによって抽出する方法であって、部分行列データを抽出するために基準となる単一又は複数の基準行r_bと単一又は複数の基準列c_bを決定し、前記行列データの各行rと前記基準行r_bとの間での類似性を示す数値を演算して前記基準行r_bとの類似性の低い行rを削除し、前記行列データの各列cと前記基準列c_bとの間での類似性を示す数値を演算して前記基準列c_bとの類似性の低い列cを削除する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、密度が高い部分行列データをコンピュータによって抽出する方法、そのコンピュータシステム及びコンピュータプログラムに関するものである。
【背景技術】
【0002】
大量のデータから特徴を抽出する手法として、データマイニングが広く用いられている。特に、インターネットの普及により、WWWから得られるデータにマイニングを行うことにより、有益な情報を得る応用はWWWマイニングと呼ばれ、WWW検索エンジンやマーケティングなどに幅広く応用されている。
データマイニングの対象となるデータの表現形式としては、2値行列による表現が用いられることがある。例えば、顧客の購買履歴は、縦軸(行)を顧客、横軸(列)を商品とし、特定の顧客が特定の商品を購入したとき、対応する行列の要素を「1」とし、購入していないときに行列の要素を「0」とすることにより、2値行列で表現することができる。
【0003】
このような、行列データは、一般に大規模疎行列となる。すなわち、行列の行数(顧客数)、列数(商品)数は大きいが、値が「1」となる行列のデータ要素は、値が「0」となる行列のデータ要素に比べて圧倒的に少ない。
このような、大規模な疎行列のままでは、有益な情報を把握しにくいが、大規模疎行列から値が「1」となる要素を多く含む密な部分行列を抽出することができれば、マーケティング等において有用な情報となる。すなわち、上記の例では、密な部分行列が得られれば、購買傾向の似た顧客群と商品群を同時に得られるからである。
【0004】
このように、大規模疎行列から密な部分行列を抽出する操作は、非特許文献1においては、マトリクスクラスタリングとよばれている。マトリクスクラスタリングは、WWWマイニングにおいても、ユーザとユーザが見たページの関係や、ページとページ内に含まれるキーワードの関係を同時に得ることに応用できるため、有効な手法である。
【0005】
マトリクスクラスタリングのリアルタイムの応用例として、リコメンデーションシステムがある。例えば、WWW上でのショッピングサイトにおいて、上記のようにユーザと購入した商品の履歴を2値行列で保持するものとする。
あるユーザが、そのショッピングサイトにログインしてきたとき、大規模疎行列から、そのユーザに関連する密な部分行列をリアルタイムで抽出することができれば、ログインしたユーザに対して、適切な商品をリコメンドすることができる。
すなわち、密な部分行列を得られれば、そのユーザと似た購買傾向を持つ他のユーザを抽出でき、密な部分行列において、そのユーザは購入していないが、他のユーザは購入している商品を見つけることができれば、その商品をそのユーザに奨めることができる。
このような、リコメンデーションシステムは、WWWのパーソナライズとして今後の発展が大いに期待されている分野である。
【0006】
マトリクスクラスタリングの他の応用例として、文書検索システムがある。個々の文書を横軸(列)に、文書に含まれるキーワードを縦軸(行)にした行列表現をとる。特定の文書の中に特定のキーワードが含まれるときに、対応する行列要素を1とし、含まれないときに0とする。あるキーワードが止定されたとき、そのキーワードに関連する密な部分行列を抽出することができれば、指定されたキーワードに関連した文書群とキーワード群が得られる。この場合、通常の文書検索システムとは異なり、入力されたキーワードを直接含まない文書でも、含まれるキーワードが類似していれば検索結果に含まれるという特徴がある。
【0007】
従来のマトリクスクラスタリングのアルゴリズムとして、非特許文献1には、行・列置換法とピンポン法が提示されている。
行・列置換法では、元の疎行列の行同士、あるいは列同士を入れ換える操作を繰り返す。例えば、行列の左上に1となる要素が集まるように、行同士、列同士を入れ替えることにより、密な部分行列を疎行列の左上に形成することができる。
【0008】
ピンポン法では、初期値となる行より列方向にマーカ伝播を行い、各列では受信したマーカ数により枝刈りを行い、多くのマーカを受信した列のみを操作の対象とする。次に列から行方向にマーカを伝播し、各行では受信したマーカ数により枝刈りを行い、多くのマーカを受信した行のみを操作の対象とする。ピンポン法は、これらの操作を繰り返すことにより、密行列を生成する手法である。
【非特許文献1】小柳滋、久保田和人、仲瀬明彦:Matrix Clustering:CRM向けの新しいデータマイニング手法、情報処理学会論文誌、Vol.42、No.8、pp.2156-2166、(2001)
【発明の開示】
【発明が解決しようとする課題】
【0009】
非特許文献1では、ピンポン法が行・列置換法に比べて性能や、密行列の性質において優れていることが示されている。
しかし、上記のような応用にピンポン法を適用する場合には、初期値として指定された行あるいは列を含まない密な部分行列を出力する場合があることが、問題となる。例えば、ピンポン法を前記リコメンデーションシステムへ応用した場合に、初期値としてあるユーザが指定されたのに、密な部分行列がそのユーザを示す行を含まないということは、要求と全く異なる結果が出力されるおそれがある。
また、ピンポン法を文書検索システムに応用した場合にも、同様に、要求と関連のない結果が出力されるというおそれがある。
【0010】
そこで、本発明は、抽出された密な部分行列が必要な行や列を含むことができる、新たな方法等を提供することを目的の一つとする。
【課題を解決するための手段】
【0011】
本発明は、有意なデータ要素と非有意なデータ要素とが含まれる行列データから、有意なデータ要素の密度が高い部分行列データをコンピュータによって抽出する方法であって、
(a)前記行列データの行の中から、部分行列データを抽出するために基準となる単一又は複数の基準行を決定するステップ、
(b)前記行列データの列の中から、部分行列データを抽出するために基準となる単一又は複数の基準列を決定するステップ、
(c)前記行列データの各行と前記基準行との間での類似性を示す数値を演算し、前記基準行との類似性の低い行を削除するステップ、
(d)前記行列データの各列と前記基準列との間での類似性を示す数値を演算し、前記基準列との類似性の低い列を削除するステップ、
を有することを特徴とする方法である。
【0012】
上記方法において、有意なデータ要素は、具体的な値としては、例えば「1」で表され、非有意なデータ要素は、具体的な値としては、例えば「0」で表されるものである。上記方法によって「1」などで表される有意なデータ要素の密度が高い部分行列データが得られる。
そして、上記方法によれば、基準行と基準列とが決定され、基準行・基準列との類似性の低い行・列から削除されるため、密な部分行列データを生成しても、当該部分行列データには基準行と基準列とが含まれることが保証される。
なお、上記(c)のステップと(d)のステップは、繰り返し行うことにより、行列データを次々に縮退させて、有意なデータ要素の密度を高めていくことができる。
【0013】
前記(c)のステップ、又は(d)のステップにおいて、行又は列の削除を行う際に、指定された所定割合の数の行又は列を一括して削除するのが好ましい。
指定された所定割合の数の行又は列を一括して削除することにより、(c)のステップや(d)のステップを何度も繰り返し行わなくても、少ない回数で、大きな疎行列を小さくすることができ、効率が良くなる。
【0014】
前記(a)のステップにおいて、複数の基準行が決定された場合には、前記(c)のステップに代えて、下記(e)のステップを実行するのが好ましい。
(e)前記行列データの各行と前記各基準行との間での類似性を示す数値を演算し、この際に、類似性の演算の対象となる基準行と非基準行にそれぞれ含まれる有意なデータ要素の数を考慮して類似性の演算を行い、前記各基準行との類似性が低い行を削除するステップ。
基準行が複数ある場合、それぞれの基準行に含まれる有意なデータ要素の数が異なることがあり、この場合、ある行と各基準行との類似性の演算を行うと、有意なデータ要素の数が多い基準行との類似度の方が高くなってしまい、他の基準行との類似度が相対的に低くなることになる。このように、有意なデータ要素の数の差によって、それぞれの基準行の間に、不必要な差が生じてしまうが、有意なデータ要素の数を考慮して類似性の演算を行うことにより、この問題を解消できる。
【0015】
また、複数基準列の場合も上記複数基準行の場合と同様にするのが好ましい。
すなわち、前記(b)のステップにおいて、複数の基準列が決定された場合には、前記(d)のステップに代えて、下記(f)のステップを実行するのが好ましい。
(f)前記行列データの各列と前記各基準列との間での類似性を示す数値を演算し、この際に、類似性の演算の対象となる基準列と非基準列にそれぞれ含まれる有意なデータ要素の数を考慮して類似性の演算を行い、前記各基準列との類似性が低い列を削除するステップ。
【0016】
演算を高速化するため、前記第(c)のステップ、又は(d)のステップの実行前に、下記(g)のステップを実行して初期部分行列データを生成し、その初期部分行列データに対して、前記(c)のステップ、又は(d)のステップを行うのが好ましい。
(g)前記基準行において有意なデータ要素が存在する列と同じ列に共通して存在する有意なデータ要素を1個以上持つ行と、前記基準列において有意なデータ要素が存在する行と同じ行に共通して存在する有意なデータ要素を1個以上持つ列と、からなる初期部分行列データを生成する。
【0017】
上記初期部分行列データにおいては、基準行又は基準列と共通するデータ要素を持たない行又は列は存在しなくなる。共通するデータ要素を持たない行又は列は、類似性を演算すると、いずれ削除されるものであるから、(c)のステップ、又は(d)のステップの実行前に初期部分行列データを生成して、これに(c)のステップ、又は(d)のステップを実行することで、(c)(d)のステップを高速に行える。
【0018】
前記(g)のステップにおいて、前記初期部分行列データは、前記基準行において有意なデータ要素が存在する列と同じ列に共通して存在する有意なデータ要素を1個以上持つ行のうち、前記基準行において有意なデータ要素が存在する列と同じ列に共通して存在する有意なデータ要素の数が多い所定数の行と、前記基準列において有意なデータ要素が存在する行と同じ行に共通して存在する有意なデータ要素を1個以上持つ列のうち、前記基準列において有意なデータ要素が存在する行と同じ行に共通して存在する有意なデータ要素の数が多い所定数の列と、を取り出して生成されるのが好ましい。
基準行又は基準列と共通するデータ要素を持つ行又は列であっても、その共通する数が少ない場合には、類似性を演算するといずれ削除される可能性が高いため、そのような行又は列は、初期部分行列データから取り除くことで、その後の演算をより高速に行うことができる。
【0019】
他の観点からみた本発明は、有意なデータ要素と非有意なデータ要素とが含まれる行列データから、有意なデータ要素の密度が高い部分行列データをコンピュータによって抽出する方法であって、
(a)前記行列データの行の中から、部分行列データを抽出するために基準となる単一又は複数の基準行を決定するステップ、
(b)前記行列データの列の中から、部分行列データを抽出するために基準となる単一又は複数の基準列を決定するステップ、
(h)前記基準行において有意なデータ要素が存在する列と同じ列に有意なデータ要素が存在しない行を削除するステップ、
(i)前記基準列において有意なデータ要素が存在する行と同じ行に有意なデータ要素が存在しない行を削除するステップ、
を有することを特徴とする方法である。
【0020】
上記方法によれば、基準行と基準列とが決定され、基準行・基準列と共通の有意なデータ要素が存在しない行又は列を削除して部分行列データを生成することで、行列の密度を高めることができるとともに、密な部分行列データを生成しても、当該部分行列データには基準行と基準列とが含まれることが保証される。
なお、基準行・基準列と共通の有意なデータ要素が存在しない行又は列を削除するだけでは、行列の大きさを十分に小さくできない場合があるため、他の方法によって、行列をさらに小さくし、密度を上げるようにしてもよい。
【0021】
コンピュータシステムに係る本発明は、有意なデータ要素と非有意なデータ要素とが含まれる行列データから、有意なデータ要素の密度が高い部分行列データを抽出するものであって、
(a)前記行列データの行の中から、部分行列データを抽出するために基準となる単一又は複数の基準行を決定する手段、
(b)前記行列データの列の中から、部分行列データを抽出するために基準となる単一又は複数の基準列を決定する手段、
(c)前記行列データの各行と前記基準行との間での類似性を示す数値を演算し、前記基準行との類似性の低い行を削除する手段、
(d)前記行列データの各列と前記基準列との間での類似性を示す数値を演算し、前記基準列との類似性の低い列を削除する手段、
を有することを特徴とするものである。
また、コンピュータプログラムに係る本発明は、コンピュータを、前記コンピュータシステムにおける(a)(b)(c)(d)のそれぞれの手段として機能させるためのものである。
【0022】
他の観点からみたコンピュータシステムに係る発明は、有意なデータ要素と非有意なデータ要素とが含まれる行列データから、有意なデータ要素の密度が高い部分行列データを抽出するものであって、
(a)前記行列データの行の中から、部分行列データを抽出するために基準となる単一又は複数の基準行を決定する手段、
(b)前記行列データの列の中から、部分行列データを抽出するために基準となる単一又は複数の基準列を決定する手段、
(h)前記基準行において有意な要素が存在する列と同じ列に有意なデータ要素が存在しない行を削除する手段、
(i)前記基準列において有意な要素が存在する行と同じ行に有意なデータ要素が存在しない行を削除する手段、
を有することを特徴とするものである。
また、他の観点からみたコンピュータプログラムに係る本発明は、コンピュータを、前記コンピュータシステムにおける(a)(b)(h)(i)のそれぞれの手段として機能させるためのものである。
【発明の効果】
【0023】
本発明によれば、必要な行や列を、基準行・基準列として決定し、これらの基準行・基準列が残るように密な部分行列データを抽出することができる。
【発明を実施するための最良の形態】
【0024】
以下、本発明の好ましい実施形態を図面に基づいて説明する。
[用語と標記法について]
ここでは、複数の行の間で共通して1となる列をそれらの行の共通要素とよぶ。また、列についても同様に、複数の列の間で共通して1となる行をそれらの列の共通要素とよぶ。
文中での行列の標記法は、行の集合と列の集合の間に×を置くか、行数と列数の間に×を置くものとする。行列の一つの要素は、行の名前と列の名前を並べ、()で括ることで表記する。
【0025】
[実施形態の方法で要求される事項]
ここで説明する実施形態に係る部分行列データの抽出方法は、行列中において、注目する行と列に関連する行と列を同時に発見する操作であり、マトリクスクラスタリングとよばれる。なお、以下では、マトリクスクラスタリングを、単に「MC」ということがある。
ここでのMCは、主に、有意なデータ要素である「1」と非有意なデータ要素である「0」の2値要素を対象にし、「1」要素が密に存在する部分行列を発見するために行われる。
このMCは、リコメンデーションシステムや文書検索システムへの応用をより適切に行うため、次の要求を満たすことが望ましいものである。
(要求1)部分行列が孤立した行又は列を含まない。
(要求2)部分行列の行数と列数の比を制御できる。
(要求3)部分行列が注目すべき行と列を同時に含むように制御できる。
(要求4)部分行列の特定の行又は列が0(非有意なデータ要素)を含むように制御できる。
【0026】
上記(要求1)は、図1(a)の行dと列Fのように、他の行及び列との共通要素を持たない行又は列を含んでいる場合をいう。また、図1(b)は、他の行と共通要素を持たない行の一種である空行aを含んでいる。
図1(a)の孤立した行dと列Fや、図1(b)の行aは、他の行及び列との間に関連性がなく、部分行列が関連した行と列の集合を表すべきものと考えた場合、孤立した行と列を含むことは許されない。つまり、孤立した行と列を含む部分行列に基づいて、リコメンドや、文書検索における関連文献の出力を行うには不適切である。そこで、上記(要求1)が必要となる。
【0027】
上記(要求2)のように、部分行列の行数と列数の比を制御できると、部分行列の使用目的等に応じて、部分行列に必要な行数と列数が異なる場合にも対応でき好ましい。
つまり、図2(a)から、密度(部分行列中の「1」の数/行列の全要素数)が1で、可能な限り大きい部分行列を取り出すと、横長の部分行列(図2(b))と、縦長の部分行列(図2(c))の2つが得られる。横長の部分行列は列の間よりも、行の間の共通要素数を多くすることを優先した結果であり、縦長の部分行列は行よりも列を優先した結果である。例えば、行を文書、列をそのキーワードとして類似文書を探すことを考えると、縦長の部分行列(図2(c))が表すものは、頻繁に使われるキーワード、つまり大きな分野を示すキーワードで一致する文書の集合であり、横長の部分行列(図(b))が表すものは、使用される頻度の低いキーワード、つまりより細分化された分野を示すキーワードまで一致する文書の集合である。このような使い分けをするには、上記(要求2)が必要となる。
【0028】
上記(要求3)のように、部分行列が注目すべき行と列を同時に含むように制御できると、得られた部分行列に注目すべき行と列が含まれていることを保証でき、得られた部分行列の適切さが向上する。
例えば、複数の分野にまたがる文書の場合、どのキーワードに着目するかで、関連する文書の集合が異なってくる。このような区別をするには、MCアルゴリズムが、注目すべき行(文書)だけでなく、列(キーワード)も取り扱えるようにして、部分行列が注目すべき行と列を同時に含むように制御できるようにすることが好ましく、上記(要求3)が必要となる。
【0029】
上記(要求4)のように、部分行列の特定の行又は列が0を含むように制御できると、確実にリコメンドをすることができる。例えば、オンライン書店で、ユーザに書籍を推薦することを考える。ユーザを行、書籍を列とし、ユーザが購入した書籍に該当する要素を「1」とした行列を用いると、得られた密な部分行列において、指定されたユーザを示す行には、少なくとも一つの0が含まれていなければ、推薦すべき書籍が見つからないから、何も出力できないという問題が発生する。この場合、部分行列において、ユーザを示す行は、必ず0を含む必要がある。また、列についても同様である。そこで、上記(要求4)が必要となる。
【0030】
[実施形態]
本実施形態で説明する方法は、リコメンデーションシステムの機能を有するWWWサーバ、又は文書検索コンピュータシステムなどのコンピュータシステムにおいて、記憶装置に記憶されたコンピュータプログラムに基づき、当該コンピュータシステムによって実行されるものである。なお、後述の他の実施形態においても同様である。
【0031】
図3は、有意なデータ要素である「1」の密度が疎である大規模行列データMの一例を示している。この行列データMは、行a〜jが顧客を示しており、列A〜Oが商品を示す2次元行列である。行列の各データ要素としては、「1」(有意なデータ要素)と「0」(非有意なデータ要素)の2値をとるものであり、例えば、行列データMの[e,G]のデータ要素が「1」であるのは、顧客eは商品Gを購入したことがある、ということを示している。コンピュータには、その記憶手段に、図3と同様の2次元配列データ構造又は、図3の2次元データと実質的に同じデータ内容を示すデータ構造により記憶させることができる。
【0032】
具体的には、行列データの構造は、図5に示すようなものとすることができる。行列Mの行エントリを配列データ:rowEntry[r](rは行a〜jを表す)とし、列エントリを配列データ:columnEntry[c](cは列A〜Oを表す)とする。
図5のデータ構造は、図3の行列Mに対応しており、配列rowEntry[r]には、rで示される行において「1」の要素を持つ列が格納されている。例えば、rowEntry[a]には、{C,F,J,N,O}が格納されている。
同様に、配列columnEntry[c]には、cで示される行において「1」の要素を持つ行が格納されている。例えば、columnEntry[F]には、{a,c,d,h}が格納されている。
なお、行列データMは、顧客が商品を購入する度に、データが更新される。
【0033】
図4は、実施形態に係る方法を示している。この方法は、基準行と基準列の決定(ステップS1)、初期部分行列データの生成(ステップS2)、部分行列データの縮退操作(ステップS3)とを含んでいる。
まず、行列データMのデータ要素の中から一つの要素(後述の実施形態では複数のデータ要素の場合もある)を決定することで、基準行と基準列が決まる。以下では、基準行をr_bといい、基準列をc_bという。
基準要素の決定は、例えば、WWW上でのショッピングサイトにおいて、ある「顧客a」がある「商品F」を購入、又はある「商品F」を購入検討のために見ること等によって、行われる。この場合、基準要素(r_b,c_b)=(a,F)であり、基準行はa、基準列はFに決まったことになる。なお、基準行及び基準列を示す情報は、コンピュータの記憶手段に記憶される。
【0034】
初期部分行列データM0の生成(ステップS2)は、行列データMから、基準行r_bと基準列c_bを用いて作られる。
初期部分行列データM0の生成は、特許請求の範囲の(g)のステップと同様の方法によって行われる。ここで、(g)のステップは、「基準行r_bにおいて有意なデータ要素「1」が存在する列と同じ列に共通して存在する有意なデータ要素「1」を1個以上持つ行rと、前記基準列c_bにおいて有意なデータ要素「1」が存在する行と同じ行に共通して存在する有意なデータ要素「1」を1個以上持つ列cと、からなる初期部分行列データM0を生成する」というものである。
【0035】
(g)のステップの具体的な実行方法は、一つではない。初期部分行列データM0の行を示す行集合をR(0)、列を示す列集合をC(0)とすると、R(0)のデータとC(0)のデータを作る方法は、それぞれ、少なくとも2通りある。
[行集合R(0)の構成方法その1]
行列データMの行のうち、r_bと共通要素を持つすべての行の集合R(0)を作る(以下、この場合のR(0)をRという。なお、添え字の「L」は「loose」を示している。)。図3の行列データMの場合、Rは次のようになる。
={a,c,d,e,f,h,i,j}
[行集合R(0)の構成方法その2]
行列データMの行のうち、c_bに「1」の要素を持つ行のみからなる集合R(0)を作る(以下、この場合のR(0)をRという。なお、添え字の「S」は「strict」を示している。)。図3の行列データMの場合、Rは次のようになる。
={a,c,d,h}
【0036】
[列集合C(0)の構成方法その1]
行列データMの列のうち、c_bと共通要素を持つすべての列の集合C(0)を作る(以下、この場合のC(0)をCという)。図3の行列データMの場合、Cは次のようになる。
={C,D,F,J,N,O}
[列集合C(0)の構成方法その2]
行列データMの列のうち、r_bに「1」の要素を持つ行のみからなる集合C(0)を作る(以下、この場合のC(0)をCという)。図3の行列データMの場合、Cは次のようになる。
={C,F,J,N,O}
【0037】
上記2つの行集合R,Rと、2つの列集合C,Cとの組み合わせで、計4種類の初期部分行列データM0を作ることができる。すなわち、R×C,R×C,R×C,R×Cの4種類である。これらは、行列データの使用目的に応じて使い分けられるべきものである。例えば、基準行r_bや基準列c_bが前記(要求4)を満たすべきものであるなら、RやCは使えない。なぜなら、Rを使うときは、初期部分行列データ中の基準列c_bが、Cなら基準行c_rが全て「1」要素で占められるからである。なお、R⊆R、C⊆Cが成立するため、4種類の初期部分行列データのうち、R×Cが最も小さい部分行列となり、R×Cが最も大きい部分行列となる。
図6(a)に示す初期部分行列データM0は、R×Cである。すなわち、行列データMに対して、[行集合R(0)の構成方法その1]と[列集合C(0)の構成方法その2]の操作を行うことによって生成されたものである。
なお、最も小さい部分行列R×Cの場合M0={a,c,d,h}×{C,F,J,N,O}となる。
【0038】
×Cの初期部分行列データM0の、より具体的な構成方法としては、次のようにすることができる。下記手順は、初期部分行列データM0の行集合を求める方法である。
(手順1)初期部分行列データM0の行番号を格納する配列データ:rowsを用意する。rowsは空で初期化する
(手順2)rowEntry[r_b]中の各要素ciに対して、columnEntry[ci]の全要素をrowsにコピーする。
(手順3)rowsの各データをソートし、重複要素を削除する。
【0039】
以上により、rowsに初期部分行列データを構成する行が存在することになる。
また、初期部分行列データM0の列集合を求める方法は下記手順のとおりである。
(手順1)初期部分行列データM0の行番号を格納する配列データ:columusを用意する。columusは空で初期化する。
(手順2)columnEntry[c_b]中の各要素riに対して、rowEntry[ri]の全要素をcolumnsにコピーする。
(手順3)columnsの各データをソートし、重複要素を削除する。
【0040】
1つの行・列の平均「1」要素数をそれぞれnr,ncとすると、(手順2)のコピーは、nr回実行され、1回にコピーされる要素数はncである。コピーが終了した時点で、rowsにはnr・nc個の要素が格納されている。nr・nc=Nとすると、コピーはO(N)となり、ソートをO(NlogN),重複要素の削除をO(N)とすると、この計算量はソートに支配され、O(NlogN)となる。
【0041】
この初期部分行列データM0の生成処理は、本実施形態では、後述する部分行列データの縮退操作(ステップS3)の前処理として行われるが、初期部分行列データM0の生成処理は、他の方法による部分行列抽出アルゴリズムの前処理として行っても良い。
また、用途によっては、初期部分行列データM0の生成処理によって、十分に面積が小さく密な部分行列が得られる場合もあり、この場合は、初期部分行列データM0の生成処理に相当する処理だけで、処理を終了してもよい。
初期部分行列データM0の生成処理に相当する処理だけで部分行列データ抽出処理を終了してもよいことは、初期部分行列データM0の生成処理(ステップS2)と部分行列データの縮退操作(ステップS3)が基本的に共通していることを示している。
すなわち、初期部分行列データM0の生成処理(ステップS2)は、部分行列データの縮退操作(ステップS3)における「内積」をとったときに、その値が0又は小さい値となる行又は列に相当するものを初期の段階で一括して削除する処理と考えることができる。基準行又は基準列と内積とったときに値が小さくなる行又は列は、基準行又は基準列との類似性が低く、縮退操作を行えば、いずれ削除される可能性が高いものであるから、予め削除しておくことで、縮退操作を高速に行うことが可能となる。
【0042】
部分行列データの縮退操作(ステップS3)は、主に、類似性演算(ステップS34−1,S34−2)と、削除操作(ステップS35−1,S25−2)とからなり、それぞれ、行方向の演算及び操作(ステップS34−1,S35−1)と、列方向の演算及び操作(ステップS34−2,S35−2)とがある。
行方向の類似性演算(ステップS34−1)は、部分行列データの各行をベクトルとみなし、基準行との内積を求めることで、それらの行にスコアを付ける操作である。対象が2値行列であるため、2つの行の内積は、それらの行の共通要素数に等しい。共通要素数が大きければ行の間の類似性は高くなる。列方向の類似性演算(ステップS34−2)も同様である。
行の削除操作(ステップS35−1)は、類似性を示すスコアの最も小さい行を部分行列から排除するものである。列の削除操作(ステップS35−2)も同様である。
【0043】
図6の初期部分行列データM0に対して、まず、行縮退rを行うとすると、基準行r_b=aであるから、各行の内積は、cとhが5、dとiが3、eとfとjが1となる。この結果に削除操作を行うと、内積最小の行e,f,jが取り除かれ、部分行列データM1(図6(b))が作られる。
次に列縮退cを行う。基準列c_b=Fなので、各列の内積はJとNが4、CとOが3、DとLが1となり、内積最小のD,Lが削除され、部分行列データM2が得られる。さらに、行縮退rを行うと、密度1の部分行列データM3が得られる。
なお、部分行列データM3に対して、さらに行と列の縮退操作を1回ずつ適用でき、その結果、a×Fが得られる。
【0044】
図6においては、行縮退rと列縮退cとが交互に行われているが、行と列のどちらを縮退するかは、縮退方向決定関数によって決定される(ステップS32)。縮退方向の決定方法としては、交互とする他、行と列の比を用いてもよい。行と列の比を用いて縮退方向を決定する方法については後述する。また、縮退方向の順序は、出力に影響を与えるがこの点も後述する。
また、縮退方向決定関数は、縮退操作(ステップS3)を終了させる手段としても機能する。図6では、部分行列データの密度が1のM3が作られるまで処理が続いているが、縮退方向決定関数が適当な終了条件を持つことで、M3に至る前に縮退処理は終了する。
主な終了条件としては、部分行列データの最小密度がある。図6の処理を、最小密度0.8の終了条件で実行すれば、密度が0.84となったM2で停止し、M2を出力とする。また、終了条件は、部分行列データの面積(データ要素数の数)であってもよいし、密度と面積の双方であってもよい。
【0045】
ステップS3の縮退操作を図4に基づいて、詳細に説明すれば、次のとおりである。まず、カウンタ変数iを0に初期化し(ステップS31)、i=0,1,2・・・に関して、終了条件を満たすまで次の処理を繰り返す(ステップS38)。
(a)縮退方向決定関数が、その関数値X=終了を出力すれば、部分行列データMiを出力して終了する。それ以外(X=行縮退orX=列縮退)なら、この関数が示す方向に縮退する(ステップS32,S33)。
(b)行縮退出の場合:
(b−1)部分行列データMiの各行に対して基準行r_bとの内積を求める(ステップS34−1)。
(b−2)内積の最も小さい行(複数存在するなら全て)を行集合R(i)から取り除いたものを行集合R(i+1)とする(ステップS35−1)。
(b−3)列集合C(i)を行集合C(i+1)とする(ステップS36−1)。
(c)列縮退出の場合:
(c−1)部分行列データMiの各列に対して基準列c_bとの内積を求める(ステップS34−2)。
(c−2)内積の最も小さい列(複数存在するなら全て)を列集合C(i)から取り除いたものを行集合C(i+1)とする(ステップS35−2)。
(c−3)行集合R(i)を行集合R(i+1)とする(ステップS36−2)。
(d)R(i+1)×C(i+1)をM(i+1)とする。
【0046】
また、部分行列R(i)×C(i)に対する1回の内積計算のアルゴリズムは、次のようになる。R(i)の要素を格納した配列をrows、C(i)の要素を格納した配列をcolumnsとする。以下は行縮退についてのものである。列についても同様である。
(手順1)rowsの各要素に対応する内積の配列ip[r]を用意する。各要素の値は0とする(図7参照)。
(手順2)columusとrowEntry[r_b]の共通要素を求める。その結果を配列commonに格納する(例えば、common={C,F,J,N.O})。
(手順3)rowの各要素rについて、commonとrowEntry[r]の共通要素数を求め、配列ip[r]の値とする。
【0047】
rowEntryの1行あたりの平均要素数をnr、集合AとBの共通要素を列挙する計算量をO(|A|+|B|)とすると、(手順2)の計算量はO(|C|+nr)となる。commonの要素数をmin(|C|,nr)とすると、(手順3)では、1つのrに対してO(nr+min(|C|,nr))=O(|C|+nr)となる。これを|R|回繰り返すので、計算量はO(|R||C|+nr))=O(|R||C|+|R|nr)となり、これが行の内積計算量を支配する。同様に、列の内積計算はO(|R||C|+|C|nc)となる。
なお、内積の計算が必要になるのは、縮退方向がその直前と入れ替わったときのみである。同じ方向の縮退方向が続くときは、その前の内積計算の結果をそのまま用いることができる。
削除操作ではipの最小値を求める必要がある。行方向の場合、要素数|R|の配列を一つずつ見ていくことで実現できるため、O|R|、列ならO|C|となる。よって縮退操作の計算量は内積計算量に支配される。
【0048】
部分行列データの縮退過程は、図8に示すように、部分行列を節点、1回の行縮退と列縮退を枝とした有向グラフで表現することができる。このグラフを縮退グラフとよぶ。図8の縮退グラフは、図6の行列M0を始点とする縮退グラフであり、M1,M2,M3は図6のM1,M2,M3に対応する。なお、図8では、0のデータ要素を白抜きで、1のデータ要素を網掛けで示している。また、各行列の下の数値は、密度を示している。
以下では、縮退グラフ中の部分行列をそれに相当する節点を同一視する。図8のrとcはそれぞれ行縮退と列縮退による節点の遷移を示し、以下ではそれぞれr遷移、c遷移とよぶ。行列Mに行縮退を施した行列をr(M)、列縮退を施した行列をc(M)とする。縮退グラフの経路を縮退経路とよぶ。縮退グラフは必ず、始点が初期部分行列、終単が基準要素である束になる。このように表現すると、本方式の処理過程は、縮退グラフ上で望ましい部分行列を探索するグラフ探索と捉えることができる。縮退グラフ上のグラフ探索アルゴリズムは前記縮退方向決定関数によって実行される。この関数の構成は、応用によって変わる出力に対する要求や処理時間に対する制約などによって、異なるものとなる。
【0049】
例えば、処理時間に対する制約が弱く、出力部分行列に対する要求が厳しい場合を考える。このときの縮退方向決定関数は、縮退グラフを全探索して、最善の部分行列を選択し、その部分行列への経路を順に返すものになる。さらに、要求間に矛盾が生じたとき、どの要求を優先して達成し、どの要求を緩めるかの方針が問題によって変わるが、その方針も前記関数に含めることができる。
反対に、処理時間に対する制約が強く、出力に対する要求が緩い場合を考える。このときの縮退方向決定関数は、可能な限り少数の部分行列のみを構成することで、要求をできるだけ満たす出力をする必要がある。部分行列の構成回数が最も少なくなる関数は、現在の部分行列のみから縮退方向を決定するものである。
この関数を用いると、縮退グラフ上での初期部分行列から出力部分行列までの経路上の部分行列しか構成されない。このような関数のうち最も単純なものは、現在の部分行列の行数と列の比を、要求として与えられる行数と列数の比と比較し、それらを近づける方向に縮退するものである。
すなわち、与えられた比に比べて現在の行が大きければ行を縮退し、列が大きければ列を縮退する。この関数に必要な処理時間は部分行列のサイズによらず一定であり、除算と減算1回ずつのみで実現することが可能である。この単純な縮退方向決定関数は、処理速度の点で望ましい上に、縮退グラフの単調変化する性質を利用する要求、すなわち最小行数、最小列数、最小面積、0要素の存在保証を必ず満たすことができる。しかし、最小密度と行列数比の制御に関しては、必ず満たすことを保証できない。
【0050】
[処理の高速化1:初期部分行列データの縮小化]
処理の高速化は、例えば、初期部分行列データM0を小さくすることによって達成できる。初期部分行列データM0を小さくする方法は、少なくとも、2つある。1つは、R×CではなくR×Cを利用するものである。ただし、R×Cは、前述のように、応用目的によっては用いることができない場合がる。もう一つの方法は、Rのうち、基準行r_bとの共通要素数の多い行を上から所定数を取り出して初期部分行列の行とし、列についても同様にするものである。これは、初期部分行列で内積の少ない行や列は早い段階の縮退で取り除かれる可能性が大きいので、これらを初期部分行列に含めずとも出力に大きな影響はないと考えられるからである。
【0051】
この処理のためには、前述の初期部分行列データM0の行集合を求める方法(段落0038参照)のアルゴリズムを次のように変更する。前記方法の(手順3)では、rowsの各データをソートし、重複要素を削除していたが、rowsから重複要素を削除する代わりに、各行番号rの重複回数を数え、行番号rを重複回数でソートし、rowsの端から一定の個数の行番号rを取り出す、というものである。列についても同様に行う。このときも計算量はO(NlogN)となる。
この方法は、高速化を達成するとともに、処理時間を一定に近づける効果を持つ。実施形態に係るMCにといて、計算時間を多く消費するのは初期部分行列データやそれに近い部分行列データである。そのため、初期部分行列データが行列中の「1」要素の分布によって決められるなら、計算時間も行列中の「1」要素の分布によって決められることになる。それに対してこの方法では、部分行列のサイズを常に一定以下に抑えることができるため、処理速度をアルゴリズムで制御することができる。
この方法は、空行や空列を含むことがあるため、縮退グラフの性質を保証するには、小さくなった初期部分行列の行と列の内積を計算し、内積0のものは排除した上で、それを初期部分行列データM0とする必要がある。この処理も、既に部分行列データが小さいため、計算時間を多く消費することはない。なお、上記2つの方法は組み合わせることができる。すなわち、Rの中から、基準行と多くの共通要素を持つものを初期部分行列データM0の行として選ぶことも可能である。
【0052】
[処理の高速化2:縮退回数の減少]
処理の高速化方法として、縮退回数を少なくすることが考えられる。縮退操作の回数を減らすためには、削除操作において、内積が採用の行・列だけでなく、内積の小さい行・列を所定の割合で取り除けばよい。この方法では、例えば、1000×2000お部分行列データに対して、8割を削除すると指定すれば、行ならは800行が、列ならば1600列が一度の操作で取り除かれる。800番目の行と同じ内積の行があった場合、それらの行も同時に削除する。列についても同様である。
この方法を縮退グラフの上で考えると、1度にr遷移とc遷移を同じ方向にまとめて行うことに相当する。以下では、この縮退方法を割合縮退とよび、内積最小の行・列のみを削除する方法を最小値縮退とよぶ。割合縮退で一度に取り除かれる行数・列数の割合を縮退率とよぶ。
【0053】
なお、割合縮退を用いる場合、終了条件を満たす部分行列を発見したとしても、より適切な部分行列が縮退前の部分行列との間に存在する可能性がある。そのため、ある部分行列が終了条件を満たした場合、直前の部分行列から最小値縮退、あるいは割合がより低い割合縮退を行うことで、より適切な部分行列を求めることができる。
また、縮退率は、各縮退操作において一定である必要がなく、縮退操作ごとに変化させてもよい。例えば、縮退率を徐々に小さくしていけば、高速化と部分行列の適切化の調和を図ることができる。
【0054】
[類似性の演算の他の例]
上記説明では、類似性の演算にベクトルの内積を用いていたが、これは他の手段でもよい。例えば、IU比を用いた類似性演算でもよい。ここでは、2つの2値ベクトルのIU比を、[ベクトルの共通部分の要素数÷ベクトルの和集合の要素数と定義する。例えば,A=(00110011)、B=(01010101)とすると、ABのIU比は共通部分の要素数が2,和集合の要素数が6のため、1/3となる。このような演算方法は、1が非常に多いベクトルと1が少ないベクトルとの類似性を相対的に低くするために有効である。
なお、類似性の演算は、IU比以外にも様々な方法を採用することができる。
【0055】
[基準行・列が複数の場合]
上記説明では、単一の基準行、単一の基準列を想定していたが、これらは複数でもよい。すなわち、基準要素は複数でもよい。本方法を文書検索システムに応用する場合、特定の文書に関連する文書群(行)とそれらに含まれる単語群(列)を抽出するには、基準行は単一でよいが、基準列はその文書に含まれる複数の単語となる。
ここでは、単一基準行、複数基準列のアルゴリズムについて説明するが、複数基準行・単一基準列でも、複数基準行・複数基準列でも同様である。
【0056】
(手順1)基準行をr_b、基準列をc_bをとする。r_bは単一、c_bは複数とする。
(手順2)r_bとc_bを用いて初期部分行列M0を作る。ここで、M0は、c_bの中のどれか一つを含む行とする。M0の行集合をR(0)、列集合をC(0)とする。
(手順3)i=0,1,2,3・・・に関して、終了条件を満たすまで以下を繰り返す:
(手順3−1)縮退方向決定関数が停止を出力すればMiを返して終了する。それ以外なら、この関数が示す方向に縮退する。行縮退の場合は(手順3−2)へ、列縮退の場合は(手順3−6)へ続く。
(手順3−2)Miの各行に対して、基準行r_bとの内積を求める。
(手順3−3)内積の最も小さい行(複数存在するなら全て)をR(i)から取り除いたものをR(i+1)とする。
(手順3−4)C(i)をC(i+1)とする。
(手順3−5)R(i+1)×C(i+1)をM(i+1)とし、(3−1)に戻る。
(手順3−6)Miの各列を正規化(詳細は後述)し、c_bに含まれる各列との内積の平均値をとる。ただし、内積計算においてr_bは含まない。
(手順3−7)内積の最も小さい列(複数存在するなら全て)をC(i)から取り除いたものをC(i+1)とする
(手順3−8)R(i)をR(i+1)とする
(手順3−9)R(i+1)×C(i+1)をM(i+1)とし、(手順3−1)に戻る。
【0057】
基準行r_bが複数の場合には、上記(手順3−2)を次のようにすればよい。
(手順3−2’)Miの各行を正規化(詳細は後述)し、r_bに含まれる各行との内積の平均値をとる。ただし、内積計算においてc_bは含まない。
【0058】
[正規化について]
正規化とは、ベクトル(行又は列)の各要素間の比率を保ったまま、各要素の2乗の和が1になるように、数をかけて、ベクトルの値を変えることをいう。
ある列cと基準列c_bの内積を求める場合を考えると、具体的には、次のようになる。ここで、各列ベクトルは基準行r_bを除いて次のように成っているものとする。
c:[111111110000000]
c_b:[000011111110000]
【0059】
列cの有意なデータ要素数は8なので、各要素を√8で割って、[1/√8 1/√8 1/√8 1/√8 1/√8 1/√8 [1/√8 1/√8 0000000]とする。
同様に、c_b(1要素数は7)も各要素を√7で割って、[0000 1/√7 1/√7 1/√7 1/√7 1/√7 1/√7 1/√7 0000]とする。
以上により、正規化が終了する。
正規化したcとc_bの内積をとる。両方のベクトルで共通して0以外の値を持っている4つの要素だけを見ればいいので、(1/√8)×(1/√7)×4=4√56が得られる。
【0060】
より具体的に、データ構造上での手順を説明すると次の通りである。
まず、列c中の「1」要素が存在する行番号の配列をvec_c、列c_bで「1」要素が存在する行の番号の配列をvec_cbとする。どちらの配列もソート(昇順ソート)されている。
続いて、vec_cとvec_cbの共通要素を全て列挙して、配列vec_intersectionに格納する。
さらに、vec_cの要素数の平行根(上記例だとP=√8)、vec_cbの要素数の平方根をq(上記例だとq=√7)、vec_cの要素数をr(上記例だと4)とする。この結果、r(pq)が正規化内積となる。
【0061】
複数の基準列がある場合に、単に、各基準列との類似性を示す数値(類似度)の平均をとる等によって、列削除のための値を求めてもよいが、pやqといった、要素数を考慮して類似性の演算を行うことで、各ベクトル中に含まれる1(有意なデータ要素)の数が異なる基準列が複数あっても、これによる類似度への影響を避けることができる。すなわち、正規化を行うことで、対比される列における有意な要素数が多くても、類似性を示す数値が大きくなりにくく、有意な要素数が少ない場合の類似度との比較をすることができるようになって、複数の基準列があっても問題が生じにくくなる。
また、正規化については、行についても全く同様に行うことができる。
【0062】
実施形態に係る方法の応用としては、次のようなものがある。例えば、WWWでの検索システムその他の文書検索システムにおいて、ユーザがキーワード検索を行った結果、システムがキーワードを含む文書(WWWページ)リストを(画面)出力した後に、ユーザがそのリストの中からある文書を選択した場合に、選択された文書に関連する文書をシステムが抽出するのに実施形態に係る方法を使用することができる。
すなわち、例えば、文書を行、キーワード(単語)を列として持つ2次元行列データにおいて、基準行をユーザが選択した文書、基準列をユーザが入力したキーワードとして、実施形態に係る方法を使用することで、関連する文書を効率よく検索することが可能となる。
また、WWW上のショッピングサイトにおいて、ユーザを行、ユーザが訪れた商品ページを列とする2次元行列データを具備しておき、ログインしてきたユーザを基準行、当該ユーザが訪れた商品のページを基準列として、実施形態に係る方法を使用することで、当該ユーザと似た傾向を有する他のユーザが訪れたページをリコメンドすることができる。
【0063】
なお、本発明は、上記実施形態に限定されるものではない。本発明は、特許請求の範囲に記載した事項の範囲内で様々な変形が可能である。
【図面の簡単な説明】
【0064】
【図1】孤立した行・列が存在する行列である。
【図2】横長部分行列と縦長部分行列である。
【図3】疎な大規模行列データMである。
【図4】実施形態に係る方法を示すフローチャートである。
【図5】行列データMのデータ構造である。
【図6】部分行列データの縮退を示す図である。
【図7】配列ipである。
【図8】縮退グラフである。
【符号の説明】
【0065】
r_b 基準行
c_b 基準列

【特許請求の範囲】
【請求項1】
有意なデータ要素と非有意なデータ要素とが含まれる行列データから、有意なデータ要素の密度が高い部分行列データをコンピュータによって抽出する方法であって、
(a)前記行列データの行の中から、部分行列データを抽出するために基準となる単一又は複数の基準行を決定するステップ、
(b)前記行列データの列の中から、部分行列データを抽出するために基準となる単一又は複数の基準列を決定するステップ、
(c)前記行列データの各行と前記基準行との間での類似性を示す数値を演算し、前記基準行との類似性の低い行を削除するステップ、
(d)前記行列データの各列と前記基準列との間での類似性を示す数値を演算し、前記基準列との類似性の低い列を削除するステップ、
を有することを特徴とする方法。
【請求項2】
請求項1における前記(c)のステップ、又は(d)のステップにおいて、
行又は列の削除を行う際に、指定された所定割合の数の行又は列を一括して削除することを特徴とする方法。
【請求項3】
請求項1における前記(a)のステップにおいて、複数の基準行が決定された場合には、請求項1における前記(c)のステップに代えて、下記(e)のステップを実行することを特徴とする方法。
(e)前記行列データの各行と前記各基準行との間での類似性を示す数値を演算し、この際に、類似性の演算の対象となる基準行と非基準行にそれぞれ含まれる有意なデータ要素の数を考慮して類似性の演算を行い、前記各基準行との類似性が低い行を削除するステップ。
【請求項4】
請求項1における前記(b)のステップにおいて、複数の基準列が決定された場合には、請求項1における前記(d)のステップに代えて、下記(f)のステップを実行することを特徴とする方法。
(f)前記行列データの各列と前記各基準列との間での類似性を示す数値を演算し、この際に、類似性の演算の対象となる基準列と非基準列にそれぞれ含まれる有意なデータ要素の数を考慮して類似性の演算を行い、前記各基準列との類似性が低い列を削除するステップ。
【請求項5】
請求項1における前記第(c)のステップ、又は(d)のステップの実行前に、下記(g)のステップを実行して初期部分行列データを生成し、その初期部分行列データに対して、請求項1における前記(c)のステップ、又は(d)のステップを行うことを特徴とする方法。
(g)前記基準行において有意なデータ要素が存在する列と同じ列に共通して存在する有意なデータ要素を1個以上持つ行と、前記基準列において有意なデータ要素が存在する行と同じ行に共通して存在する有意なデータ要素を1個以上持つ列と、からなる初期部分行列データを生成する。
【請求項6】
請求項5における(g)のステップにおいて、
前記初期部分行列データは、
前記基準行において有意なデータ要素が存在する列と同じ列に共通して存在する有意なデータ要素を1個以上持つ行のうち、前記基準行において有意なデータ要素が存在する列と同じ列に共通して存在する有意なデータ要素の数が多い所定数の行と、
前記基準列において有意なデータ要素が存在する行と同じ行に共通して存在する有意なデータ要素を1個以上持つ列のうち、前記基準列において有意なデータ要素が存在する行と同じ行に共通して存在する有意なデータ要素の数が多い所定数の列と、
を取り出して生成されることを特徴とする方法。
【請求項7】
有意なデータ要素と非有意なデータ要素とが含まれる行列データから、有意なデータ要素の密度が高い部分行列データをコンピュータによって抽出する方法であって、
(a)前記行列データの行の中から、部分行列データを抽出するために基準となる単一又は複数の基準行を決定するステップ、
(b)前記行列データの列の中から、部分行列データを抽出するために基準となる単一又は複数の基準列を決定するステップ、
(h)前記基準行において有意な要素が存在する列と同じ列に有意なデータ要素が存在しない行を削除するステップ、
(i)前記基準列において有意な要素が存在する行と同じ行に有意なデータ要素が存在しない行を削除するステップ、
を有することを特徴とする方法。
【請求項8】
有意なデータ要素と非有意なデータ要素とが含まれる行列データから、有意なデータ要素の密度が高い部分行列データを抽出するコンピュータシステムであって、
(a)前記行列データの行の中から、部分行列データを抽出するために基準となる単一又は複数の基準行を決定する手段、
(b)前記行列データの列の中から、部分行列データを抽出するために基準となる単一又は複数の基準列を決定する手段、
(c)前記行列データの各行と前記基準行との間での類似性を示す数値を演算し、前記基準行との類似性の低い行を削除する手段、
(d)前記行列データの各列と前記基準列との間での類似性を示す数値を演算し、前記基準列との類似性の低い列を削除する手段、
を有することを特徴とするコンピュータシステム。
【請求項9】
コンピュータを、請求項8記載のコンピュータシステムにおけるそれぞれの手段として機能させるためのコンピュータプログラム。
【請求項10】
有意なデータ要素と非有意なデータ要素とが含まれる行列データから、有意なデータ要素の密度が高い部分行列データを抽出するコンピュータシステムであって、
(a)前記行列データの行の中から、部分行列データを抽出するために基準となる単一又は複数の基準行を決定する手段、
(b)前記行列データの列の中から、部分行列データを抽出するために基準となる単一又は複数の基準列を決定する手段、
(h)前記基準行において有意な要素が存在する列と同じ列に有意なデータ要素が存在しない行を削除する手段、
(i)前記基準列において有意な要素が存在する行と同じ行に有意なデータ要素が存在しない行を削除する手段、
を有することを特徴とするコンピュータシステム。
【請求項11】
コンピュータを、請求項10記載のコンピュータシステムにおけるそれぞれの手段として機能させるためのコンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2006−139663(P2006−139663A)
【公開日】平成18年6月1日(2006.6.1)
【国際特許分類】
【出願番号】特願2004−330340(P2004−330340)
【出願日】平成16年11月15日(2004.11.15)
【新規性喪失の例外の表示】特許法第30条第1項適用申請有り 平成16年6月15日 社団法人情報処理学会発行の「情報処理学会論文誌 第45巻 No.SIG7(TOD 22)」に発表
【出願人】(593006630)学校法人立命館 (359)
【Fターム(参考)】