3.3 ネストしたデータの使用
1対多の関係の表間の結合は、ネストされた列によって表されます。
Oracle Machine Learning for SQLでは、各レコードが個別の行に含まれた、単一レコード・ケース形式のケース表が必要です。データの一部または全部が複数レコード・ケース形式で、各レコードが複数の行に含まれている場合はどうなるでしょうか。1つの属性で一連の値または値の集合(学生のテスト・スコアや顧客に購入された製品)を表す場合はどうなるでしょうか。
このような1対多の関係は通常、表間の結合として実装します。たとえば、顧客表を売上表と結合し、購入された製品のリストを各顧客に関連付けることができます。
OML4SQLでは、ネストした列を通じてディメンション化されたデータをサポートしています。ケース表にディメンション化されたデータを含めるには、ビューを作成し、機械学習のネストした表タイプの1つに結合データをキャストします。ネストした列の各行は、属性の名前と値のペアから構成されます。OML4SQLでは、ネストした各行は、別個の属性として内部的に処理されます。
ノート:
O-Clusterは、ネストしたデータをサポートしていない唯一のアルゴリズムです。
関連トピック
3.3.1 ネストしたオブジェクト型
ネストした表は、他のデータ型のかわりに使用できるオブジェクト・データ型です。
Oracle Databaseでは、実在するエンティティをデータベース内のオブジェクトとしてモデル化できる、ユーザー定義のデータ型がサポートされています。コレクション型は、複数値属性をモデル化するためのオブジェクト・データ型です。ネストした表はコレクション型です。ネストした表は、他のデータ型が使用できる場所であればどこでも使用できます。
OML4SQLでは、次のネストしたオブジェクト型をサポートしています。
DM_NESTED_BINARY_DOUBLES
DM_NESTED_BINARY_FLOATS
DM_NESTED_NUMERICALS
DM_NESTED_CATEGORICALS
ネストした型の説明は、この例を参照してください。
例3-3 OML4SQLのネストしたデータ型
describe dm_nested_binary_double
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE BINARY_DOUBLE
describe dm_nested_binary_doubles
DM_NESTED_BINARY_DOUBLES TABLE OF SYS.DM_NESTED_BINARY_DOUBLE
Name Null? Type
------------------------------------------ -------- ---------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE BINARY_DOUBLE
describe dm_nested_binary_float
Name Null? Type
----------------------------------------- -------- ---------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE BINARY_FLOAT
describe dm_nested_binary_floats
DM_NESTED_BINARY_FLOATS TABLE OF SYS.DM_NESTED_BINARY_FLOAT
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE BINARY_FLOAT
describe dm_nested_numerical
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE NUMBER
describe dm_nested_numericals
DM_NESTED_NUMERICALS TABLE OF SYS.DM_NESTED_NUMERICAL
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE NUMBER
describe dm_nested_categorical
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE VARCHAR2(4000)
describe dm_nested_categoricals
DM_NESTED_CATEGORICALS TABLE OF SYS.DM_NESTED_CATEGORICAL
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE VARCHAR2(4000)
3.3.2 例: 機械学習用のトランザクショナル・データの変換
この例では、変換前と変換後のデータを使用して、4つの地域の製品の売上を比較しています。
例3-4は、ある売上表のビューのデータです。4つの地域で販売された製品のうちの3種類の売上が表示されています。このデータは、各ケース(製品)の売上が複数の行に格納されているため、製品レベルでの機械学習には適していません。
例3-5は、機械学習のためにこのデータを変換する方法を示しています。ケースID列はPRODUCT
です。SALES_PER_REGION
(DM_NESTED_NUMERICALS
型のネストした列)がデータ属性です。この表は、各ケースの情報が単一行に格納されているため、製品ケース・レベルでの機械学習に適しています。
ノート:
この例は、単に概念を表したものです。実際には、処理前にデータがピボットされることはありません。
例3-4複数レコード・ケース形式の地域ごとの製品売上
PRODUCT REGION SALES
------- -------- ----------
Prod1 NE 556432
Prod2 NE 670155
Prod3 NE 3111
.
.
Prod1 NW 90887
Prod2 NW 100999
Prod3 NW 750437
.
.
Prod1 SE 82153
Prod2 SE 57322
Prod3 SE 28938
.
.
Prod1 SW 3297551
Prod2 SW 4972019
Prod3 SW 884923
.
.
例3-5 単一レコード・ケース形式の地域ごとの製品売上
PRODUCT SALES_PER_REGION
(ATTRIBUTE_NAME, VALUE)
------ --------------------------
Prod1 ('NE' , 556432)
('NW' , 90887)
('SE' , 82153)
('SW' , 3297551)
Prod2 ('NE' , 670155)
('NW' , 100999)
('SE' , 57322)
('SW' , 4972019)
Prod3 ('NE' , 3111)
('NW' , 750437)
('SE' , 28938)
('SW' , 884923)
.
.
例3-6 SALES_PER_REGIONから導出されたモデル属性
PRODUCT SALES_PER_REGION.NE SALES_PER_REGION.NW SALES_PER_REGION.SE SALES_PER_REGION.SW
------- ------------------ ------------------- ------------------ -------------------
Prod1 556432 90887 82153 3297551
Prod2 670155 100999 57322 4972019
Prod3 3111 750437 28938 884923
.
.