(57)【要約】【課題】データを効率よく圧縮することが可能なデータ圧縮装置等を提供する。【解決手段】入力された学習用行列データに基づき、圧縮に用いる辞書行列データを生成する辞書生成部と、入力された圧縮対象行列データと生成された前記辞書行列データとに基づき、前記圧縮対象行列データを圧縮した結果である圧縮行列データと、前記圧縮行列データの各行列要素のうち行列要素がゼロではない位置情報とを生成する圧縮部と、生成された前記圧縮行列データの各行において、ゼロ値ではない要素値から特定される特定値を連結したデータ列である特定値データ列について算出された指標値と閾値とを比較し、前記指標値が前記閾値よりも大きい場合、所定の定数を各係数として特定するとともに、前記指標値が前記閾値以下である場合、各特定値の逆数を前記各係数として算出する係数算出部と、要素値操作部とを備える。【選択図】図１
2018117208.tif 000002
【特許請求の範囲】
【請求項１】
入力された学習用行列データに基づき、圧縮に用いる辞書行列データを生成する辞書生成部と、
入力された圧縮対象行列データと生成された前記辞書行列データとに基づき、前記圧縮対象行列データを圧縮した結果である圧縮行列データと、前記圧縮行列データの各行列要素のうち行列要素がゼロではない位置情報とを生成する圧縮部と、
生成された前記圧縮行列データの各行において、ゼロ値ではない要素値から特定される特定値を連結したデータ列である特定値データ列について算出された指標値と閾値とを比較し、前記指標値が前記閾値よりも大きい場合、所定の定数を各係数として特定するとともに、前記指標値が前記閾値以下である場合、各特定値の逆数を前記各係数として算出する係数算出部と、
前記圧縮行列データの各要素について、前記各要素と算出された前記各係数との積について、対応する各要素における小数部の有効数字の桁数に基づいて丸めた結果である操作後の行列データを圧縮結果として出力する要素値操作部と、
を備えるデータ圧縮装置。
【請求項２】
前記辞書生成部は、
前記学習用行列データの列データに基づき、該列データとの内積が最大となる前記辞書行列データの列データ及び位置情報を抽出する抽出部と、
抽出した前記列データ及び前記学習用行列データの列データに基づき最小二乗解を算出する算出部と、
算出した最小二乗解、前記位置情報及び前記学習用行列データに基づき、前記辞書行列データを生成する生成部と、
を含む請求項１に記載のデータ圧縮装置。
【請求項３】
前記圧縮部は、
圧縮対象行列データの列データに基づき、該列データとの内積が最大となる前記辞書行列データの列データ及び位置情報を抽出する第２抽出部と、
抽出した前記列データ及び前記圧縮対象行列データの列データに基づき最小二乗解を算出する第２算出部と、
を含む請求項１または２に記載のデータ圧縮装置。
【請求項４】
前記要素値操作部は、
前記圧縮行列データの各要素と前記各係数との積を算出する積算出部と、
第１係数と、前記圧縮対象行列データの有効桁数及び符号の有無に基づき求まる第２係数と、前記圧縮行列データの各要素の符号の有無とに基づき算出される桁数を算出する桁数算出部と、
該桁数算出部で算出した桁数に基づき、前記積算出部で算出した積の端数を処理する処理部と、
を備える請求項１から３のいずれか一つに記載のデータ圧縮装置。
【請求項５】
桁数算出部は、
第１係数と、前記圧縮対象行列データの有効桁数、符号の有無及び小数点の有無に基づき求まる第２係数と、前記圧縮行列データの各要素の符号の有無及び小数点の有無とに基づき桁数を算出する
請求項４に記載のデータ圧縮装置。
【請求項６】
前記処理部は、
前記積算出部で算出した積に対し、前記桁数算出部で算出した桁数以降の端数を処理する
請求項４または５に記載のデータ圧縮装置。
【請求項７】
前記閾値は前記特定値の最大値及び最小値に基づき決定される
請求項１から６のいずれか一つに記載のデータ圧縮装置。
【請求項８】
前記特定値は、生成された前記圧縮行列データの各行のゼロ値ではない要素値の平均値、中央値、最大値または二乗平均であり、
前記指標値は、前記特定値を連結したデータ列である特定値データ列の分散である
請求項１から７のいずれか一つに記載のデータ圧縮装置。
【請求項９】
入力された学習用行列データに基づき、圧縮に用いる辞書行列データを生成し、
入力された圧縮対象行列データと生成された前記辞書行列データとに基づき、前記圧縮対象行列データを圧縮した結果である圧縮行列データと、前記圧縮行列データの各行列要素のうち行列要素がゼロではない位置情報とを生成し、
生成された前記圧縮行列データの各行において、ゼロ値ではない要素値から特定される特定値を連結したデータ列である特定値データ列について算出された指標値と閾値とを比較し、前記指標値が前記閾値よりも大きい場合、所定の定数を各係数として特定するとともに、前記指標値が前記閾値以下である場合、各特定値の逆数を前記各係数として算出し、
前記圧縮行列データの各要素について、前記各要素と算出された前記各係数との積について、対応する各要素における小数部の有効数字の桁数に基づいて丸めた結果である操作後の行列データを圧縮結果として出力する、
処理をコンピュータに実行させるデータ圧縮プログラム。
【請求項１０】
入力された学習用行列データに基づき、圧縮に用いる辞書行列データを生成し、
入力された圧縮対象行列データと生成された前記辞書行列データとに基づき、前記圧縮対象行列データを圧縮した結果である圧縮行列データと、前記圧縮行列データの各行列要素のうち行列要素がゼロではない位置情報とを生成し、
生成された前記圧縮行列データの各行において、ゼロ値ではない要素値から特定される特定値を連結したデータ列である特定値データ列について算出された指標値と閾値とを比較し、前記指標値が前記閾値よりも大きい場合、所定の定数を各係数として特定するとともに、前記指標値が前記閾値以下である場合、各特定値の逆数を前記各係数として算出し、
前記圧縮行列データの各要素について、前記各要素と算出された前記各係数との積について、対応する各要素における小数部の有効数字の桁数に基づいて丸めた結果である操作後の行列データを圧縮結果として出力する、
処理をコンピュータに実行させるデータ圧縮方法。
【請求項１１】
圧縮対象行列データ及び辞書行列データにより得られた圧縮行列データを取得し、
取得した前記圧縮行列データの各行データに基づき特定値を取得し、
取得した複数の特定値に基づき指標値を算出し、
算出した前記指標値及び閾値に基づき、前記圧縮行列データを補正する係数を特定する
処理をコンピュータに実行させるプログラム。
【請求項１２】
前記圧縮行列データに前記係数を乗じて乗算値を算出し、
前記乗算値を前記圧縮対象行列データの有効桁数に基づき端数処理する
請求項１１に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮装置、データ圧縮プログラム、データ圧縮方法及びプログラムに関する。
【背景技術】
【０００２】
従来、スパース表現クラス分類に要する計算量を削減すると共に分類精度を低下させずに高速にクラス分類を行う装置が知られている（例えば特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１７３７９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の技術では数多くのデータを効率よく圧縮することができないという問題がある。
【０００５】
一つの側面では、データを効率よく圧縮することが可能なデータ圧縮装置等を提供することを目的とする。
【課題を解決するための手段】
【０００６】
一つの案では、入力された学習用行列データに基づき、圧縮に用いる辞書行列データを生成する辞書生成部と、入力された圧縮対象行列データと生成された前記辞書行列データとに基づき、前記圧縮対象行列データを圧縮した結果である圧縮行列データと、前記圧縮行列データの各行列要素のうち行列要素がゼロではない位置情報とを生成する圧縮部と、生成された前記圧縮行列データの各行において、ゼロ値ではない要素値から特定される特定値を連結したデータ列である特定値データ列について算出された指標値と閾値とを比較し、前記指標値が前記閾値よりも大きい場合、所定の定数を各係数として特定するとともに、前記指標値が前記閾値以下である場合、各特定値の逆数を前記各係数として算出する係数算出部と、前記圧縮行列データの各要素について、前記各要素と算出された前記各係数との積について、対応する各要素における小数部の有効数字の桁数に基づいて丸めた結果である操作後の行列データを圧縮結果として出力する要素値操作部と、を備える。
【発明の効果】
【０００７】
一つの側面では、データを効率よく圧縮することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】処理概要を示す説明図である。
【図２】コンピュータのハードウェア群を示すブロック図である。
【図３】辞書学習処理の手順を示すフローチャートである。
【図４】辞書学習処理の手順を示すフローチャートである。
【図５】残差rt及び変数Atの数値例を示す説明図である。
【図６】辞書行列データの数値例を示す説明図である。
【図７】圧縮処理の手順を示すフローチャートである。
【図８】係数算出処理の手順を示すフローチャートである。
【図９】圧縮行列データのデータ例を示す説明図である。
【図１０】係数のデータ例を示す説明図である。
【図１１】補正処理及び端数処理の手順を示すフローチャートである。
【図１２】数値例を示す説明図である。
【図１３】数値例を示す説明図である。
【図１４】補正処理及び端数処理の手順を示すフローチャートである。
【図１５】数値例を示す説明図である。
【図１６】補正処理及び端数処理の手順を示すフローチャートである。
【図１７】数値例を示す説明図である。
【図１８】ｋ＝２の場合の誤差とファイルサイズとの関係を示すグラフである。
【図１９】ｋ＝５の場合の誤差とファイルサイズとの関係を示すグラフである。
【図２０】上述した形態のコンピュータの動作を示す機能ブロック図である。
【図２１】実施の形態４に係るコンピュータのハードウェア群を示すブロック図である。
【発明を実施するための形態】
【０００９】
実施の形態１
以下実施の形態を、図面を参照して説明する。図１は処理概要を示す説明図である。係数の算出等の各種処理を実行する情報処理装置１は、サーバコンピュータまたはパーソナルコンピュータ等である。以下では情報処理装置１をコンピュータ１と読み替えて説明する。コンピュータ１は、学習用行列データYAに基づき学習を行い、圧縮に用いる辞書Aを生成する。次いでコンピュータ１は圧縮対象の行列データYと辞書Aとを用いて、圧縮行列データXを算出する。
【００１０】
コンピュータ１は圧縮行列データXの各要素値に基づき、圧縮行列データXを補正するための係数Zを算出する。コンピュータ１は圧縮行列データX及び係数Zに基づき補正を行い、その後端数処理を行った上で最終的な補正圧縮行列データX’を求める。コンピュータ１は辞書A、係数Z及び補正圧縮行列データX’を最終結果として出力する。以下詳細を説明する。
【００１１】
図２はコンピュータ１のハードウェア群を示すブロック図である。コンピュータ１は制御部としてのＣＰＵ（Central Processing Unit）１１、ＲＡＭ（Random Access Memory）１２、入力部１３、表示部１４、記憶部１５、時計部１８、及び、通信部１６等を含む。ＣＰＵ１１は、バス１７を介してハードウェア各部と接続されている。ＣＰＵ１１は記憶部１５に記憶された制御プログラム１５Ｐに従いハードウェア各部を制御する。なお、ＣＰＵ１１は複数のプロセッサコアを搭載したマルチコアプロセッサであっても良い。ＲＡＭ１２は例えばＳＲＡＭ（Static RAM）、ＤＲＡＭ(Dynamic RAM)、フラッシュメモリ等である。ＲＡＭ１２は、記憶部としても機能し、ＣＰＵ１１による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【００１２】
入力部１３はマウス、キーボード、タッチパネル、ボタン等の入力デバイスであり、受け付けた操作情報をＣＰＵ１１へ出力する。表示部１４は液晶ディスプレイまたは有機ＥＬ（Electro Luminescence）ディスプレイ等であり、ＣＰＵ１１の指示に従い各種情報を表示する。通信部１６は通信モジュールであり、他のコンピュータ（図示せず）等と間で情報の送受信を行う。時計部１８は日時情報をＣＰＵ１１へ出力する。記憶部１５は大容量メモリまたはハードディスクであり、制御プログラム１５Ｐ等を記憶している。
【００１３】
図３及び図４は辞書学習処理の手順を示すフローチャートである。コンピュータ１のＣＰＵ１１は、辞書行列データAの初期値に標準正規乱数を設定する（ステップＳ３１）。なお、入力として、データの圧縮単位（要素数）をｎ、学習用のデータの個数（圧縮単位のベクトルの個数）をN、学習用行列データYA（以下、場合によりYで代表する）をｎ行N列の行列とする。また出力をｎ行ｍ列の辞書行列データAとする。m行N列の圧縮行列データX、残差rt（残差ベクトルrt）、変数At、ループ変数i等は変数とする。
【００１４】
ＣＰＵ１１は、変数iに１を入力する（ステップＳ３２）。ＣＰＵ１１は、サンプルｙに学習用行列データYのi列目のデータを入力する（ステップＳ３３）。ＣＰＵ１１は、残差rtの初期値としてサンプルｙを入力し、変数Atの初期値としてNULLを入力する（ステップＳ３４）。
【００１５】
図５は、残差rt及び変数Atの数値例を示す説明図である。図６は、辞書行列データAの数値例を示す説明図である。図５に示すように残差rtには2.6、2.6、2.6、2.4・・・と学習用行列データYのi列目のデータが入力されている。なお、図５及び図６の例では、ベクトルの長さを100としているが、紙面の都合上図５及び図６では20要素分までを記載している。
【００１６】
ＣＰＵ１１は、図６に示す辞書行列データAの転置行列ATの一列の中で、残差rtの転置行列rtTとの内積が最大となる列ji（位置情報）を抽出し、変数列Ajとする（ステップＳ３５）。すなわち、内積が最大となるものが最も似た方向を向いているベクトルであるとして抽出する。ＣＰＵ１１は、変数Atに変数列Ajを水平方向に連結する（ステップＳ３６）。なお、初回はAtの初期値がNULLであるため、連結対象の変数列Ajがそのまま入力される。図５及び図６に示すとおり、変数Atの１列目は、辞書行列データAの１３列目とベクトルの向きが類似し、変数Atの２列目は、辞書行列データAの２９２列目とベクトルの向きが類似している。また変数Atの３列目は、辞書行列データAの１６９列目とベクトルの向きが類似している。
【００１７】
ＣＰＵ１１は、変数Atと残差rtとの最小二乗解Xtiを算出する（ステップＳ３７）。具体的には、rt=At*XtiとなるXtiのうち、rt-At*Xtiの二乗誤差を最小にするXtiを算出する。図５に示すようにXtiは7.509095、6.965821、5.834313・・・と算出される。ＣＰＵ１１は、変数Atに最小二乗解Xtiを乗じて乗算値ytを算出する（ステップＳ３８）。ＣＰＵ１１は、残差rtから乗算値ytを減算した値を残差rtに置き換える（ステップＳ３９）。図５には、rtが1.618316731、3.323110212・・・と置き換えられている。
【００１８】
ＣＰＵ１１は、記憶部１５から閾値E１及び閾回数（例えば３０回）を読み出す（ステップＳ４１）。ＣＰＵ１１は、残差rtの二乗誤差が閾値E1以下、または、ステップＳ３５〜Ｓ４１の処理回数が閾回数以上か否かを判断する（ステップＳ４２）。ＣＰＵ１１は、残差rtの二乗誤差が閾値E1以下、または、閾回数以上のいずれでもないと判断した場合（ステップＳ４２でＮＯ）、処理をステップＳ３５へ移行させる。ＣＰＵ１１は、ステップＳ３５への移行の際、ステップＳ３５〜Ｓ４１の処理を実行した回数をインクリメントとし、ＲＡＭ１２に記憶する。ＣＰＵ１１は、ステップＳ４２において、閾回数とＲＡＭ１２に記憶した回数とを比較する。
【００１９】
ＣＰＵ１１は、残差rtの二乗誤差が閾値E1以下、または、閾回数以上であると判断した場合（ステップＳ４２でＹＥＳ）、処理をステップＳ４３へ移行させる。ＣＰＵ１１は、変数iに１を加える（ステップＳ４３）。ＣＰＵ１１は、変数iがNより大きいか否かを判断する（ステップＳ４４）。ＣＰＵ１１は、変数iがNより大きくないと判断した場合（ステップＳ４４でＮＯ）、処理をステップＳ３３に戻す。一方、ＣＰＵ１１は、変数iがNより大きいと判断した場合（ステップＳ４４でＹＥＳ）、処理をステップＳ４５へ移行させる。
【００２０】
ＣＰＵ１１は、最小二乗解Xti及び列jiから圧縮行列データXを構成し、学習用行列データY-辞書行列データA*圧縮行列データXの最小二乗解Aを算出する（ステップＳ４５）。具体的には、Xtiは非0の成分からのみ構成されるため、ＣＰＵ１１は、ステップＳ３５で求めた列番号ji（図５の例では、１３、２９２、１６９・・・）を使用し、非0の位置（１３、２９２、１６９・・・）以外の要素値を0とし、圧縮行列データXを構成する。次いで、ＣＰＵ１１は、Y=A*Xの最小二乗解を求めて新しいAとする。
【００２１】
ＣＰＵ１１は、記憶部１５から第２閾値E2及び閾回数を読み出す（ステップＳ４６）。ＣＰＵ１１は、学習用行列データY-辞書行列データA*圧縮行列データXの二乗誤差が第２閾値以下、または、閾回数以上か否かを判断する（ステップＳ４７）。具体的には、ＣＰＵ１１は、Y=AXの二乗誤差が第２閾値E2以下か否かを判断する。またＣＰＵ１１は、ステップＳ４７の処理を行った回数が閾回数以上か否かを判断する。ＣＰＵ１１は、第２閾値E2以下、または、閾回数以上でないと判断した場合（ステップＳ４７でＮＯ）、処理をステップＳ３３に戻す。ＣＰＵ１１は、ステップＳ４７の処理後、ステップＳ４７を処理した回数をインクリメントし、ＲＡＭ１２に記憶する。ＣＰＵ１１は、ステップＳ４７の処理において、閾回数と、ＲＡＭ１２に記憶した回数とを比較する。
【００２２】
ＣＰＵ１１は、第２閾値以下、または、閾回数以上と判断した場合（ステップＳ４７でＹＥＳ）、処理をステップＳ４８へ移行させる。ＣＰＵ１１は、学習済みの辞書行列データAを記憶部１５に記憶する（ステップＳ４８）。
【００２３】
図７は圧縮処理の手順を示すフローチャートである。入力としての圧縮対象のデータyは圧縮単位（要素数）ｎ個の列ベクトルである。その他、圧縮行列データXの非ゼロの個数K、辞書行列データA（n行m列の行列）を入力とする。また出力は圧縮結果Xtk及び非ゼロの位置jk（位置情報）とする。なお、残差rt及び変数At（辞書）は内部変数とする。ＣＰＵ１１は、残差rtの初期値としてデータｙを入力し、変数Atの初期値としてNULLを入力する（ステップＳ７１）。ＣＰＵ１１は、変数kkに１を入力する（ステップＳ７２）。
【００２４】
ＣＰＵ１１は、辞書行列データAの転置行列ATの一列の中で、残差rtの転置行列rtTとの内積が最大となる列jk（位置情報）を抽出し、変数列Ajkとする（ステップＳ７３）。具体的には、ＣＰＵ１１は、ATの列の中で、rtTとの内積が最大となる列jkを抽出し、Ajkとする。ＣＰＵ１１は、変数Atに変数列Ajkを水平方向に連結する（ステップＳ７４）。ＣＰＵ１１は、変数Atと残差rtとの最小二乗解をXtkとする（ステップＳ７５）。
【００２５】
ＣＰＵ１１は、変数Atに最小二乗解Xtkを乗じて乗算値ytを算出する（ステップＳ７６）。ＣＰＵ１１は、残差rtから乗算値ytを減算した値を残差rtに置き換える（ステップＳ７７）。ＣＰＵ１１は、変数kkが非ゼロの個数Kより大きいか否かを判断する（ステップＳ７８）。ＣＰＵ１１は、大きくないと判断した場合（ステップＳ７８でＮＯ）、処理をステップＳ７９へ移行させる。ＣＰＵ１１は、変数kkの値をインクリメントする（ステップＳ７９）。ＣＰＵ１１は、その後処理をステップＳ７３へ移行させる。ＣＰＵ１１は、変数kkが個数Kより大きいと判断した場合（ステップＳ７８でＹＥＳ）、処理を終了する。ＣＰＵ１１は、ステップＳ７６で求めたXtk及びステップＳ７３で求めた非ゼロの位置jk（K=1〜K）（位置情報）を出力する。
【００２６】
図８は係数算出処理の手順を示すフローチャートである。ＣＰＵ１１は、圧縮行列データXを取得する（ステップＳ８１）。図９は圧縮行列データXのデータ例を示す説明図である。圧縮行列データXはｍ行N列の行列であり、行が圧縮結果の要素の位置、列がサンプルの並びに対応する。行データの多くが０であり、非ゼロの要素が複数存在している。ＣＰＵ１１は、変数iに初期値１を入力する（ステップＳ８２）。
【００２７】
ＣＰＵ１１は、圧縮行列データXのi行の非ゼロの要素の特定値を取得する。特定値はi行の非ゼロの要素に基づき特定される値であり、例えば複数の非ゼロの要素の、平均値、中央値、最大値、最小値、または、二乗平均等である。なお、実施形態では非ゼロの要素に基づく特定値を利用する例を示すが、ゼロの要素を一部に含む形態であっても良い。以下の実施形態では特定値を非ゼロの要素の絶対値の平均値であるものとして説明する。ＣＰＵ１１は、圧縮行列データXのi行の非ゼロの要素の絶対値の平均値Miを算出する（ステップＳ８３）。ＣＰＵ１１は、変数iがｍ（行数ｍ）より大きいか否かを判断する（ステップＳ８４）。ＣＰＵ１１は、変数iがｍより大きくないと判断した場合（ステップＳ８４でＮＯ）、処理をステップＳ８５へ移行させる。
【００２８】
ＣＰＵ１１は、iに１を加算する（ステップＳ８５）。ＣＰＵ１１は、その後処理をステップＳ８３へ戻す。これにより平均値を連結したデータ列である特定値データ列（Mi（i = 1〜m））が算出される。ＣＰＵ１１は、iがmより大きいと判断した場合（ステップＳ８４でＹＥＳ）、処理をステップＳ８６へ移行させる。ＣＰＵ１１は、算出した複数の平均値に基づき、平均値のばらつきの度合いを示す指標値を算出する。実施形態では指標値を標準分散であるものとして説明するが、これに限るものではない。例えば不偏分散を用いても良い。
【００２９】
ＣＰＵ１１は、各列の平均値の標本分散を算出する（ステップＳ８６）。ＣＰＵ１１は、平均値の最大値及び最小値を抽出する（ステップＳ８７）。ＣＰＵ１１は、最大値から最小値を減算して減算値を求め、減算値を所定値（例えば６）で除して閾値（TX）を算出する（ステップＳ８８）。なお所定値は、ユーザが適宜入力部１３から値を設定すれば良い。ＣＰＵ１１は、標本分散が閾値より大きいか否かを判断する（ステップＳ８９）。ＣＰＵ１１は、標本分散が閾値より大きいと判断した場合（ステップＳ８９でＹＥＳ）、処理をステップＳ８１０へ移行させる。ＣＰＵ１１は、ばらつきが大きいため、係数Ziを１として出力する。（ステップＳ８１０）。
【００３０】
ＣＰＵ１１は、標本分散が閾値より大きくない場合（ステップＳ８９でＮＯ）、処理をステップＳ８１１へ移行させる。ＣＰＵ１１は、係数Ziを平均値Miの逆数として出力する（Zi=1/Mi（i=1〜m））（ステップＳ８１１）。
【００３１】
図１０は係数のデータ例を示す説明図である。Y1及びY2は、圧縮前の圧縮対象行列データを示す。X1及びX2は、辞書行列データAに基づき圧縮処理された後の圧縮行列データXである。ここで圧縮行列データXの非ゼロの個数k=8である。係数Zは、説明を容易にするためにX1及びX2の絶対値の平均値の逆数としている。また係数Zの標本分散は4.1であり、閾値より大きくないものとしている。続いてＣＰＵ１１は、係数Zを用いた圧縮行列データXの補正処理及び端数処理（丸め処理）を行う。
【００３２】
図１１は補正処理及び端数処理の手順を示すフローチャートである。図１２及び図１３は数値例を示す説明図である。ＣＰＵ１１は、記憶部１５に記憶した第１係数及び第２係数を読み出す（ステップＳ１１１）。第１係数は、圧縮対象行列データYと圧縮行列データXの容量比率を示す。第１係数は例えば、圧縮行列Xの小数部の有効桁数（有効数字の桁数）を圧縮対象行列データYの小数点以下の有効桁数で除した値とすれば良い。本実施形態では小数部の有効桁数としたがこれに限るものではない。第１係数を圧縮行列Xの有効桁数としてもよい。さらに、第１係数を、圧縮行列データXの小数点を含んだ文字数を、圧縮対象行列データYの小数点を含んだ文字数で除した値としても良い。例えば、２．６の場合、小数点を含んで文字数は３となる。なお、実施形態では一例として第１係数を２であるものとして説明する。
【００３３】
第２係数は、本実施形態では圧縮対象行列データYの有効桁数であり、一例として第２係数は２であるものとして説明する。ＣＰＵ１１は、第１係数に第２係数を乗じた乗算値から１を減じて桁数を算出する（ステップＳ１１２）。本実施形態では第１係数２に第２係数２を乗じて乗算値４を求め１を減じて、桁数は３となる。ＣＰＵ１１は、圧縮行列データXに係数Zを乗じて補正後の圧縮行列データXtempを算出する（ステップＳ１１３）。図１２には係数Zを乗じた後の補正後の圧縮行列データXtempが示されている。
【００３４】
ＣＰＵ１１は、補正後の圧縮行列データXtempを、ステップＳ１１２で求めた桁数で端数処理する（ステップＳ１１４）。図１３に示すように小数点第３位の桁の値について端数処理されている。端数処理は小数点第３位以下の第４位の数値に基づく四捨五入、第４位の数値の切り捨て、または第３位の切り上げを行えば良い。本実施形態では四捨五入する例を示す。ＣＰＵ１１は、端数処理後の圧縮行列データX’を記憶部１５に記憶し、表示部１４に出力または通信部１６を介して外部に出力する（ステップＳ１１５）。これにより効率よくデータを圧縮することが可能となる。また辞書の学習により精度を向上させることが可能となる。また桁数の算出により、要求に応じたサイズに精度よく圧縮することが可能となる。さらに圧縮行列データXのばらつきの度合いにより係数を適宜設定することで、効率よく圧縮することが可能となる。
【００３５】
実施の形態２
実施の形態２は、符号を考慮する形態に関する。図１４は補正処理及び端数処理の手順を示すフローチャートである。図１５は数値例を示す説明図である。ＣＰＵ１１は、記憶部１５に記憶した第１係数及び第２係数を読み出す（ステップＳ１４１）。なお、第１係数は２、第２係数は２であるものとして説明する。ＣＰＵ１１は、圧縮対象行列データYの符号の有無に応じて１または０を第２係数に加算する（ステップＳ１４２）。図１２に示したように圧縮対象行列データYはマイナスの符号が存在しないため、加算されず第２係数は２のままである。
【００３６】
ＣＰＵ１１は、第１係数に第２係数を乗じた乗算値から１を減じて桁数を算出する（ステップＳ１４３）。本実施形態では第１係数２に第２係数２を乗じて乗算値４を求め１を減じて、桁数は３となる。ＣＰＵ１１は、圧縮行列データXの符号の有無に応じて桁数に１または０を減算する（ステップＳ１４４）。圧縮行列データXは図１２に示すように符号を有するため、桁数３から１を減じて桁数２を算出する。ＣＰＵ１１は、圧縮行列データXに係数Zを乗じて補正後の圧縮行列データXtempを算出する（ステップＳ１４５）。
【００３７】
ＣＰＵ１１は、補正後の圧縮行列データXtempを、ステップＳ１４４の処理を経て得た桁数で端数処理する（ステップＳ１４６）。図１５に示すように小数点第２位の桁の値について端数処理されている。本実施形態では四捨五入する例を示している。ＣＰＵ１１は、端数処理後の圧縮行列データX’（圧縮結果）を記憶部１５に記憶し、表示部１４に出力または通信部１６を介して外部に出力する（ステップＳ１４７）。これにより圧縮行列データXの符号の有無をも考慮した精度の良いデータ圧縮が可能となる。
【００３８】
本実施の形態２は以上の如きであり、その他は実施の形態１と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
【００３９】
実施の形態３
実施の形態３は小数点の有無をも考慮する形態に関する。図１６は補正処理及び端数処理の手順を示すフローチャートである。図１７は数値例を示す説明図である。ＣＰＵ１１は、記憶部１５に記憶した第１係数及び第２係数を読み出す（ステップＳ１６１）。なお、第１係数は２、第２係数は２であるものとして説明する。ＣＰＵ１１は、圧縮対象行列データYの符号の有無に応じて１または０を第２係数に加算する（ステップＳ１６２）。図１２に示したように圧縮対象行列データYはマイナスの符号が存在しないため、加算されず第２係数は２のままである。
【００４０】
ＣＰＵ１１は、圧縮対象行列データYの小数点の有無に応じて１または０を第２係数に加算する（ステップＳ１６３）。図１２に示したように、圧縮対象行列データYは小数点が存在するため１加算され第２係数は３となる。ＣＰＵ１１は、第１係数に第２係数を乗じた乗算値から１を減じて桁数を算出する（ステップＳ１６４）。本実施形態では第１係数２に第２係数３を乗じて乗算値６を求め１を減じて、桁数は５となる。ＣＰＵ１１は、圧縮行列データXの符号の有無に応じて桁数に１または０を減算する（ステップＳ１６５）。圧縮行列データXは図１２に示すように符号を有するため、桁数５から１を減じて桁数４を算出する。
【００４１】
ＣＰＵ１１は、圧縮行列データXの小数点の有無に応じて桁数に１または０を減算する（ステップＳ１６６）。図１２に示すように圧縮行列データXは小数点を有するため、桁数４から１を減じて桁数３を算出する。ＣＰＵ１１は、圧縮行列データXに係数Zを乗じて補正後の圧縮行列データXtempを算出する（ステップＳ１６７）。ＣＰＵ１１は、補正後の圧縮行列データXtempを、ステップＳ１６６の処理を経て得た桁数で端数処理する（ステップＳ１６８）。図１７に示すように小数点第３位の桁の値について端数処理されている。本実施形態では四捨五入する例を示している。ＣＰＵ１１は、端数処理後の圧縮行列データX’を記憶部１５に記憶し、表示部１４に出力または通信部１６を介して外部に出力する（ステップＳ１６９）。これにより小数点の有無をも考慮した精度の良いデータ圧縮が可能となる。
【００４２】
図１８はｋ＝２の場合の誤差とファイルサイズとの関係を示すグラフであり、図１９はｋ＝５の場合の誤差とファイルサイズとの関係を示すグラフである。図１８における横軸は圧縮行列データXのファイルサイズ（バイト）であり、縦軸は圧縮誤差の最大値である。圧縮対象行列データYのファイルサイズは963,000バイト、小数点あり、符号なし、有効桁数を２桁、圧縮対象行列データYの圧縮単位n=223である。圧縮行列データXの非ゼロの個数kが２の場合が図１８、５の場合が図１９である。丸印で示す系列は比較例であり端数処理を行わないものである。四角で示す系列は第１係数を2.0としたものであり、三角で示す系列は第１係数を1.6としたものである。
【００４３】
圧縮後のファイルサイズは概ね、圧縮前ファイルサイズ*第１係数*k/nとなっている。また端数処理を行うことで、テキストファイルを保管する際に誤差を拡大させることもなくデータの更なる圧縮が可能であることが理解できる。ｋ＝２、k＝５いずれの場合にも、同程度の圧縮誤差であり、第１係数2.0の場合で比較例に対し約1/2、第１係数1.6の場合で比較例に対し約1/3程度の圧縮を行うことが可能となる。
【００４４】
本実施の形態３は以上の如きであり、その他は実施の形態１または２と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
【００４５】
実施の形態４
図２０は上述した形態のコンピュータ１の動作を示す機能ブロック図である。ＣＰＵ１１が制御プログラム１５Ｐを実行することにより、コンピュータ１は以下のように動作する。辞書生成部２０１は、入力された学習用行列データに基づき、圧縮に用いる辞書行列データを生成する。圧縮部２０２は、入力された圧縮対象行列データと生成された前記辞書行列データとに基づき、前記圧縮対象行列データを圧縮した結果である圧縮行列データと、前記圧縮行列データの各行列要素のうち行列要素がゼロではない位置情報とを生成する。係数算出部２０３は、生成された前記圧縮行列データの各行において、ゼロ値ではない要素値から特定される特定値を連結したデータ列である特定値データ列について算出された指標値と閾値とを比較し、前記指標値が前記閾値よりも大きい場合、所定の定数を各係数として特定するとともに、前記指標値が前記閾値以下である場合、各特定値の逆数を前記各係数として算出する。
【００４６】
要素値操作部２０４は、前記圧縮行列データの各要素について、前記各要素と算出された前記各係数との積について、対応する各要素における小数部の有効数字の桁数に基づいて丸めた結果である操作後の行列データを圧縮結果として出力する。抽出部２０５は、前記学習用行列データの列データに基づき、該列データとの内積が最大となる前記辞書行列データの列データ及び位置情報を抽出する。算出部２０６は、抽出した前記列データ及び前記学習用行列データの列データに基づき最小二乗解を算出する。生成部２０７は、算出した最小二乗解、前記位置情報及び前記学習用行列データに基づき、前記辞書行列データを生成する。
【００４７】
第２抽出部２０８は、圧縮対象行列データの列データに基づき、該列データとの内積が最大となる前記辞書行列データの列データを抽出する。第２算出部２０９は、抽出した前記列データ及び前記圧縮対象行列データの列データに基づき最小二乗解を算出する。積算出部２０１０は、前記圧縮行列データの各要素と前記各係数との積を算出する。桁数算出部２０１１は、第１係数と、前記圧縮対象行列データの有効桁数及び符号の有無に基づき求まる第２係数と、前記圧縮行列データの各要素の符号の有無とに基づき算出される桁数を算出する。処理部２０１２は、該桁数算出部で算出した桁数に基づき、前記積算出部で算出した積の端数を処理する。
【００４８】
図２１は実施の形態４に係るコンピュータ１のハードウェア群を示すブロック図である。コンピュータ１を動作させるためのプログラムは、ディスクドライブ、メモリーカードスロット等の読み取り部１０ＡにCD-ROM、DVDディスク、メモリーカード、またはUSBメモリ等の可搬型記録媒体１Ａを読み取らせて記憶部１５に記憶しても良い。また当該プログラムを記憶したフラッシュメモリ等の半導体メモリ１Ｂをコンピュータ１内に実装しても良い。さらに、当該プログラムは、インターネット等の通信網Ｎを介して接続される他のサーバコンピュータ（図示せず）からダウンロードすることも可能である。以下に、その内容を説明する。
【００４９】
図２１に示すコンピュータ１は、上述した各種ソフトウェア処理を実行するプログラムを、可搬型記録媒体１Ａまたは半導体メモリ１Ｂから読み取り、或いは、通信網Ｎを介して他のサーバコンピュータ（図示せず）からダウンロードする。当該プログラムは、制御プログラム１５Ｐとしてインストールされ、ＲＡＭ１２にロードして実行される。これにより、上述したコンピュータ１として機能する。その他、上述した処理を実行するプログラムを記憶したメモリとプロセッサとを有するハードウェアデバイスをデータ圧縮装置として、図示しないサーバコンピュータ、パーソナルコンピュータ、または、スマートフォン等に実装するようにしても良い。
【００５０】
本実施の形態４は以上の如きであり、その他は実施の形態１から３と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。なお、以上述べた各実施形態は適宜組み合わせることが可能である。
【００５１】
以上の実施の形態１から４を含む実施形態に関し、さらに以下の付記を開示する。
【００５２】
（付記１）
入力された学習用行列データに基づき、圧縮に用いる辞書行列データを生成する辞書生成部と、
入力された圧縮対象行列データと生成された前記辞書行列データとに基づき、前記圧縮対象行列データを圧縮した結果である圧縮行列データと、前記圧縮行列データの各行列要素のうち行列要素がゼロではない位置情報とを生成する圧縮部と、
生成された前記圧縮行列データの各行において、ゼロ値ではない要素値から特定される特定値を連結したデータ列である特定値データ列について算出された指標値と閾値とを比較し、前記指標値が前記閾値よりも大きい場合、所定の定数を各係数として特定するとともに、前記指標値が前記閾値以下である場合、各特定値の逆数を前記各係数として算出する係数算出部と、
前記圧縮行列データの各要素について、前記各要素と算出された前記各係数との積について、対応する各要素における小数部の有効数字の桁数に基づいて丸めた結果である操作後の行列データを圧縮結果として出力する要素値操作部と、
を備えるデータ圧縮装置。
（付記２）
前記辞書生成部は、
前記学習用行列データの列データに基づき、該列データとの内積が最大となる前記辞書行列データの列データ及び位置情報を抽出する抽出部と、
抽出した前記列データ及び前記学習用行列データの列データに基づき最小二乗解を算出する算出部と、
算出した最小二乗解、前記位置情報及び前記学習用行列データに基づき、前記辞書行列データを生成する生成部と、
を含む付記１に記載のデータ圧縮装置。
（付記３）
前記圧縮部は、
圧縮対象行列データの列データに基づき、該列データとの内積が最大となる前記辞書行列データの列データ及び位置情報を抽出する第２抽出部と、
抽出した前記列データ及び前記圧縮対象行列データの列データに基づき最小二乗解を算出する第２算出部と、
を含む付記１または２に記載のデータ圧縮装置。
（付記４）
前記要素値操作部は、
前記圧縮行列データの各要素と前記各係数との積を算出する積算出部と、
第１係数と、前記圧縮対象行列データの有効桁数及び符号の有無に基づき求まる第２係数と、前記圧縮行列データの各要素の符号の有無とに基づき算出される桁数を算出する桁数算出部と、
該桁数算出部で算出した桁数に基づき、前記積算出部で算出した積の端数を処理する処理部と、
を備える付記１から３のいずれか一つに記載のデータ圧縮装置。
（付記５）
桁数算出部は、
第１係数と、前記圧縮対象行列データの有効桁数、符号の有無及び小数点の有無に基づき求まる第２係数と、前記圧縮行列データの各要素の符号の有無及び小数点の有無とに基づき桁数を算出する
付記４に記載のデータ圧縮装置。
（付記６）
前記処理部は、
前記積算出部で算出した積に対し、前記桁数算出部で算出した桁数以降の端数を処理する
付記４または５に記載のデータ圧縮装置。
（付記７）
前記閾値は前記特定値の最大値及び最小値に基づき決定される
付記１から６のいずれか一つに記載のデータ圧縮装置。
（付記８）
前記特定値は、生成された前記圧縮行列データの各行のゼロ値ではない要素値の平均値、中央値、最大値または二乗平均であり、
前記指標値は、前記特定値を連結したデータ列である特定値データ列の分散である
付記１から７のいずれか一つに記載のデータ圧縮装置。
（付記９）
入力された学習用行列データに基づき、圧縮に用いる辞書行列データを生成し、
入力された圧縮対象行列データと生成された前記辞書行列データとに基づき、前記圧縮対象行列データを圧縮した結果である圧縮行列データと、前記圧縮行列データの各行列要素のうち行列要素がゼロではない位置情報とを生成し、
生成された前記圧縮行列データの各行において、ゼロ値ではない要素値から特定される特定値を連結したデータ列である特定値データ列について算出された指標値と閾値とを比較し、前記指標値が前記閾値よりも大きい場合、所定の定数を各係数として特定するとともに、前記指標値が前記閾値以下である場合、各特定値の逆数を前記各係数として算出し、
前記圧縮行列データの各要素について、前記各要素と算出された前記各係数との積について、対応する各要素における小数部の有効数字の桁数に基づいて丸めた結果である操作後の行列データを圧縮結果として出力する、
処理をコンピュータに実行させるデータ圧縮プログラム。
（付記１０）
入力された学習用行列データに基づき、圧縮に用いる辞書行列データを生成し、
入力された圧縮対象行列データと生成された前記辞書行列データとに基づき、前記圧縮対象行列データを圧縮した結果である圧縮行列データと、前記圧縮行列データの各行列要素のうち行列要素がゼロではない位置情報とを生成し、
生成された前記圧縮行列データの各行において、ゼロ値ではない要素値から特定される特定値を連結したデータ列である特定値データ列について算出された指標値と閾値とを比較し、前記指標値が前記閾値よりも大きい場合、所定の定数を各係数として特定するとともに、前記指標値が前記閾値以下である場合、各特定値の逆数を前記各係数として算出し、
前記圧縮行列データの各要素について、前記各要素と算出された前記各係数との積について、対応する各要素における小数部の有効数字の桁数に基づいて丸めた結果である操作後の行列データを圧縮結果として出力する、
処理をコンピュータに実行させるデータ圧縮方法。
（付記１１）
圧縮対象行列データ及び辞書行列データにより得られた圧縮行列データを取得し、
取得した前記圧縮行列データの各行データに基づき特定値を取得し、
取得した複数の特定値に基づき指標値を算出し、
算出した前記指標値及び閾値に基づき、前記圧縮行列データを補正する係数を特定する
処理をコンピュータに実行させるプログラム。
（付記１２）
前記圧縮行列データに前記係数を乗じて乗算値を算出し、
前記乗算値を前記圧縮対象行列データの有効桁数に基づき端数処理する
付記１１に記載のプログラム。
（付記１３）
取得した複数の特定値に基づき、分散を算出する
付記１１または１２に記載のプログラム。
（付記１４）
前記指標値が、前記閾値を超える場合、前記係数を１に特定し、前記閾値を超えない場合、前記係数を前記特定値の逆数とする
付記１１から付記１３に記載のプログラム。
（付記１５）
第１係数と、圧縮対象行列データの有効桁数に基づき決定される第２係数とに基づき桁数を算出し、
前記乗算値を、算出した前記桁数に基づき端数処理する
付記１２から１４のいずれか一つに記載のプログラム。
（付記１６）
第１係数と、圧縮対象行列データの有効桁数及び符号の有無に基づき決定される第２係数と、前記圧縮行列データの符号の有無とに基づき桁数を算出し、
前記乗算値を、算出した前記桁数に基づき端数処理する
付記１２から１４のいずれか一つに記載のプログラム。
（付記１７）
第１係数と、圧縮対象行列データの有効桁数、符号の有無及び小数点の有無に基づき決定される第２係数と、前記圧縮行列データの符号の有無及び小数点の有無とに基づき桁数を算出し、
前記乗算値を、算出した前記桁数に基づき端数処理する
付記１２から１４のいずれか一つに記載のプログラム。
（付記１８）
圧縮対象行列データ及び辞書行列データにより得られた圧縮行列データを取得し、
取得した前記圧縮行列データの各行データに基づき特定値を取得し、
取得した複数の特定値に基づき指標値を算出し、
算出した前記指標値及び閾値に基づき、前記圧縮行列データを補正する係数を特定する
処理をコンピュータに実行させる情報処理方法。
（付記１９）
圧縮対象行列データ及び辞書行列データにより得られた圧縮行列データを取得する第１取得部と、
取得した前記圧縮行列データの各行データに基づき特定値を取得する第２取得部と、
取得した複数の特定値に基づき指標値を算出する算出部と、
算出した前記指標値及び閾値に基づき、前記圧縮行列データを補正する係数を特定する特定部と
を備える情報処理装置。
【符号の説明】
【００５３】
１      コンピュータ（情報処理装置、データ圧縮装置）
１Ａ    可搬型記録媒体
１Ｂ    半導体メモリ
１０Ａ  読み取り部
１１    ＣＰＵ
１２    ＲＡＭ
１３    入力部
１４    表示部
１５    記憶部
１５Ｐ  制御プログラム
１６    通信部
１８    時計部
２０１    辞書生成部
２０２    圧縮部
２０３    係数算出部
２０４    要素値操作部
２０５    抽出部
２０６    算出部
２０７    生成部
２０８    第２抽出部
２０９    第２算出部
２０１０  積算出部
２０１１  桁数算出部
２０１２  処理部
Ｎ      通信網
【図１】
2018117208.tif 000003
【図２】
2018117208.tif 000004
【図３】
2018117208.tif 000005
【図４】
2018117208.tif 000006
【図５】
2018117208.tif 000007
【図６】
2018117208.tif 000008
【図７】
2018117208.tif 000009
【図８】
2018117208.tif 000010
【図９】
2018117208.tif 000011
【図１０】
2018117208.tif 000012
【図１１】
2018117208.tif 000013
【図１２】
2018117208.tif 000014
【図１３】
2018117208.tif 000015
【図１４】
2018117208.tif 000016
【図１５】
2018117208.tif 000017
【図１６】
2018117208.tif 000018
【図１７】
2018117208.tif 000019
【図１８】
2018117208.tif 000020
【図１９】
2018117208.tif 000021
【図２０】
2018117208.tif 000022
【図２１】
2018117208.tif 000023