9.17 特異値分解
oml.svd
クラスを使用して、特徴抽出用のモデルを構築します。
oml.svd
クラスは、特徴抽出に特異値分解(SVD)アルゴリズムを使用するモデルを作成します。SVDは、矩形マトリックスを3つのマトリックス(U、VおよびD)に分解することで、基礎となるデータの分散を取得する直交線形変換です。マトリックスVの列には右特異ベクトルが含まれ、マトリックスUの列には左特異ベクトルが含まれます。マトリックスDは対角マトリックスであり、その特異値は、ベースによって取得されるデータ分散の量を反映しています。
SVDS_MAX_NUM_FEATURES
定数は、SVDでサポートされている特徴の最大数を指定します。この定数の値は2500です。
oml.svd
クラスの属性およびメソッドの詳細は、help(oml.svd)
を呼び出すか、Oracle Machine Learning for Python APIリファレンスを参照してください。
特異値分解モデルの設定
表9-15 特異値分解モデルの設定
設定名 | 設定値 | 説明 |
---|---|---|
FEAT_NUM_FEATURES |
|
抽出する特徴の数。 デフォルト値は、アルゴリズムによって概算されます。マトリックスのランクがこの数よりも小さい場合、返される特徴は少なくなります。 |
|
[ |
確率SVDソルバーで使用されるサンプリング・マトリックスの列数を構成します。このマトリックスの列数は、特徴の要求数にオーバーサンプリング設定を加えた数と同じです。 |
|
[ |
SSVDソルバーの精度を向上させます。デフォルト値は |
|
[ |
確率SVDソルバーで使用されるサンプリング・マトリックスを初期化するためのランダム・シード値。デフォルト値は |
|
|
モデルでSVDスコアリングとPCAスコアリングのどちらを使用するかの指定。 ビルド・データがSVDでスコアリングされた場合、予測はUマトリックスと同じです。ビルド・データがPCAでスコアリングされた場合、予測はUマトリックスとDマトリックスの積です。 デフォルト値は |
|
|
データのSVDの計算に使用されるソルバーを指定します。PCAについては、ソルバー設定は、データのPCAの計算に使用されるSVDソルバーのタイプを示します。この設定を指定しない場合、ソルバー・タイプの選択はデータ駆動で行われます。属性の数が3240を超える場合は、デフォルトのワイド・ソルバーが使用されます。そうでない場合、デフォルトのナロー・ソルバーが選択されます。 次に、ソルバーのグループを示します。
ナロー・データ・ソルバーの場合:
ワイド・データ・ソルバーの場合:
|
|
[ |
プルーニング対象外の最初の固有値の共有部分として、特徴の固有値の最小値を定義します。この設定を使用して特徴をプルーニングします。デフォルト値は、データ駆動で決まります。 |
|
|
SVDによって作成されたUマトリックスを永続化するかどうかを指定します。 SVDのUマトリックスには、ビルド・データの行と同数の行があります。大規模なモデルの作成を回避するため、Uマトリックスは、
デフォルト値は |
関連項目:
例9-17 oml.svdクラスの使用
この例では、oml.svd
クラスのメソッドの一部を使用します。この例のリストでは、省略記号で示されているように、出力の一部が表示されていません。
import oml
import pandas as pd
from sklearn import datasets
# Load the iris data set and create a pandas.DataFrame for it.
iris = datasets.load_iris()
x = pd.DataFrame(iris.data,
columns = ['Sepal_Length','Sepal_Width',
'Petal_Length','Petal_Width'])
y = pd.DataFrame(list(map(lambda x:
{0: 'setosa', 1: 'versicolor',
2:'virginica'}[x], iris.target)),
columns = ['Species'])
try:
oml.drop('IRIS')
except:
pass
# Create the IRIS database table and the proxy object for the table.
oml_iris = oml.create(pd.concat([x, y], axis=1), table = 'IRIS')
# Create training and test data.
dat = oml.sync(table = 'IRIS').split()
train_dat = dat[0]
test_dat = dat[1]
# Create an SVD model object.
svd_mod = oml.svd(ODMS_DETAILS = 'ODMS_ENABLE')
# Fit the model according to the training data and parameter
# settings.
svd_mod = svd_mod.fit(train_dat)
# Show the model details.
svd_mod
# Use the model to make predictions on the test data.
svd_mod.predict(test_dat,
supplemental_cols = test_dat[:,
['Sepal_Length',
'Sepal_Width',
'Petal_Length',
'Species']])
# Perform dimensionality reduction and return values for the two
# features that have the highest topN values.
svd_mod.transform(test_dat,
supplemental_cols = test_dat[:, ['Sepal_Length']],
topN = 2).sort_values(by = ['Sepal_Length',
'TOP_1',
'TOP_1_VAL'])
この例のリスト
>>> import oml
>>> import pandas as pd
>>> from sklearn import datasets
>>>
>>> # Load the iris data set and create a pandas.DataFrame for it.
... iris = datasets.load_iris()
>>> x = pd.DataFrame(iris.data,
... columns = ['Sepal_Length','Sepal_Width',
... 'Petal_Length','Petal_Width'])
>>> y = pd.DataFrame(list(map(lambda x:
... {0: 'setosa', 1: 'versicolor',
... 2:'virginica'}[x], iris.target)),
... columns = ['Species'])
>>>
>>> try:
... oml.drop('IRIS')
... except:
... pass
>>>
>>> # Create the IRIS database table and the proxy object for the table.
... oml_iris = oml.create(pd.concat([x, y], axis=1), table = 'IRIS')
>>>
>>> # Create training and test data.
... dat = oml.sync(table = 'IRIS').split()
>>> train_dat = dat[0]
>>> test_dat = dat[1]
>>>
>>> # Create an SVD model object.
... svd_mod = oml.svd(ODMS_DETAILS = 'ODMS_ENABLE')
>>>
>>> # Fit the model according to the training data and parameter
... # settings.
>>> svd_mod = svd_mod.fit(train_dat)
>>>
>>> # Show the model details.
... svd_mod
Algorithm Name: Singular Value Decomposition
Mining Function: FEATURE_EXTRACTION
Settings:
setting name setting value
0 ALGO_NAME ALGO_SINGULAR_VALUE_DECOMP
1 ODMS_DETAILS ODMS_ENABLE
2 ODMS_MISSING_VALUE_TREATMENT ODMS_MISSING_VALUE_AUTO
3 ODMS_SAMPLING ODMS_SAMPLING_DISABLE
4 PREP_AUTO ON
5 SVDS_SCORING_MODE SVDS_SCORING_SVD
6 SVDS_U_MATRIX_OUTPUT SVDS_U_MATRIX_DISABLE
Computed Settings:
setting name setting value
0 FEAT_NUM_FEATURES 8
1 SVDS_SOLVER SVDS_SOLVER_TSEIGEN
2 SVDS_TOLERANCE .000000000000024646951146678475
Global Statistics:
attribute name attribute value
0 NUM_COMPONENTS 8
1 NUM_ROWS 111
2 SUGGESTED_CUTOFF 1
Attributes:
Petal_Length
Petal_Width
Sepal_Length
Sepal_Width
Species
Partition: NO
Features:
FEATURE_ID ATTRIBUTE_NAME ATTRIBUTE_VALUE VALUE
0 1 ID None 0.996297
1 1 Petal_Length None 0.046646
2 1 Petal_Width None 0.015917
3 1 Sepal_Length None 0.063312
... ... ... ... ...
60 8 Sepal_Width None -0.030620
61 8 Species setosa 0.431543
62 8 Species versicolor 0.566418
63 8 Species virginica 0.699261
[64 rows x 4 columns]
D:
FEATURE_ID VALUE
0 1 886.737809
1 2 32.736792
2 3 10.043389
3 4 5.270496
4 5 2.708602
5 6 1.652340
6 7 0.938640
7 8 0.452170
V:
'1' '2' '3' '4' '5' '6' '7' \
0 0.001332 0.156581 -0.317375 0.113462 -0.154414 -0.113058 0.799390
1 0.003692 0.052289 0.316295 0.733040 0.190746 0.022285 -0.046406
2 0.005267 -0.051498 -0.052111 0.527881 -0.066995 0.046461 -0.469396
3 0.015917 0.008741 0.263614 0.244811 0.460445 0.767503 0.262966
4 0.030208 0.550384 -0.358277 0.041807 0.689962 -0.261815 -0.143258
5 0.046646 0.189325 0.766663 0.326363 0.079611 -0.479070 0.177661
6 0.063312 0.790864 0.097964 -0.051230 -0.490804 0.312159 -0.131337
7 0.996297 -0.076079 -0.035940 -0.017429 -0.000960 -0.001908 0.001755
'8'
0 0.431543
1 0.566418
2 0.699261
3 0.005000
4 -0.030620
5 -0.016932
6 -0.052185
7 -0.001415
>>> # Use the model to make predictions on the test data.
>>> svd_mod.predict(test_dat,
supplemental_cols = test_dat[:,
... ['Sepal_Length',
... 'Sepal_Width',
... 'Petal_Length',
... 'Species']])
Sepal_Length Sepal_Width Petal_Length Species FEATURE_ID
0 5.0 3.6 1.4 setosa 2
1 5.0 3.4 1.5 setosa 2
2 4.4 2.9 1.4 setosa 8
3 4.9 3.1 1.5 setosa 2
... ... ... ... ... ...
35 6.9 3.1 5.4 virginica 1
36 5.8 2.7 5.1 virginica 1
37 6.2 3.4 5.4 virginica 5
38 5.9 3.0 5.1 virginica 1
>>> # Perform dimensionality reduction and return values for the two
... # features that have the highest topN values.
>>> svd_mod.transform(test_dat,
... supplemental_cols = test_dat[:, ['Sepal_Length']],
... topN = 2).sort_values(by = ['Sepal_Length',
... 'TOP_1',
... 'TOP_1_VAL'])
Sepal_Length TOP_1 TOP_1_VAL TOP_2 TOP_2_VAL
0 4.4 7 0.153125 3 -0.130778
1 4.4 8 0.171819 2 0.147070
2 4.8 2 0.159324 6 -0.085194
3 4.8 7 0.157187 3 -0.141668
... ... ... ... ... ...
35 7.2 6 -0.167688 1 0.142545
36 7.2 7 -0.176290 6 -0.175527
37 7.6 4 0.205779 3 0.141533
38 7.9 8 -0.253194 7 -0.166967